svf-tools 1.0.292 → 1.0.296

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.
Files changed (157) hide show
  1. package/CMakeLists.txt +1 -1
  2. package/Dockerfile +1 -1
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +2 -44
  6. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -5
  7. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/CHG_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  11. package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/GraphPrinter_8h.html +1 -0
  20. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +5 -5
  21. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +1 -1
  25. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/PAG_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -12
  32. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +33 -35
  33. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +32 -37
  35. package/SVF-doxygen/html/html/SVFG_8h_source.html +19 -19
  36. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +2 -2
  37. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/html/VFG_8cpp_source.html +17 -11
  40. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  42. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +3 -3
  44. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
  46. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -3
  47. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  48. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -3
  49. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +3 -3
  50. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -3
  53. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
  54. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  56. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +1 -1
  57. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +3 -3
  58. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  59. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  61. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +2 -2
  62. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +3 -3
  64. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +1 -1
  65. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +2 -2
  66. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +3 -3
  68. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  69. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
  72. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +1 -1
  73. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +3 -3
  74. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
  75. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -3
  79. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  81. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +36 -37
  82. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +121 -153
  83. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +50 -50
  84. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
  85. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +9 -9
  86. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +2 -2
  87. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  88. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +8 -9
  90. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +1 -1
  91. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +3 -3
  92. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
  94. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
  95. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  96. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
  97. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  98. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +7 -7
  99. package/SVF-doxygen/html/html/functions_f.html +3 -3
  100. package/SVF-doxygen/html/html/functions_func_g.html +9 -12
  101. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  102. package/SVF-doxygen/html/html/functions_g.html +10 -13
  103. package/SVF-doxygen/html/html/functions_n.html +3 -3
  104. package/SVF-doxygen/html/html/functions_o.html +11 -11
  105. package/SVF-doxygen/html/html/functions_p.html +9 -5
  106. package/SVF-doxygen/html/html/functions_r.html +3 -5
  107. package/SVF-doxygen/html/html/functions_s.html +6 -6
  108. package/SVF-doxygen/html/html/functions_t.html +6 -6
  109. package/SVF-doxygen/html/html/functions_u.html +3 -3
  110. package/SVF-doxygen/html/html/functions_v.html +3 -3
  111. package/SVF-doxygen/html/html/functions_w.html +8 -6
  112. package/SVF-doxygen/html/html/globals_c.html +100 -103
  113. package/SVF-doxygen/html/html/globals_func_c.html +88 -91
  114. package/SVF-doxygen/html/html/search/all_10.js +6 -6
  115. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  116. package/SVF-doxygen/html/html/search/all_13.js +2 -2
  117. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  118. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  119. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  120. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  121. package/SVF-doxygen/html/html/search/all_3.js +0 -1
  122. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  123. package/SVF-doxygen/html/html/search/all_7.js +1 -2
  124. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  125. package/SVF-doxygen/html/html/search/all_e.js +4 -4
  126. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  127. package/SVF-doxygen/html/html/search/functions_2.js +0 -1
  128. package/SVF-doxygen/html/html/search/functions_6.js +1 -2
  129. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  130. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  131. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  132. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  133. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +20 -20
  134. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
  135. package/build.sh +6 -3
  136. package/include/Graphs/GraphPrinter.h +2 -1
  137. package/include/MemoryModel/MutablePointsToDS.h +1 -1
  138. package/include/MemoryModel/PointerAnalysisImpl.h +4 -4
  139. package/include/SABER/ProgSlice.h +0 -3
  140. package/include/Util/BasicTypes.h +1 -1
  141. package/lib/DDA/DDAPass.cpp +1 -1
  142. package/lib/Graphs/SVFG.cpp +0 -20
  143. package/lib/Graphs/VFG.cpp +18 -0
  144. package/lib/MemoryModel/PointerAnalysis.cpp +7 -7
  145. package/lib/MemoryModel/PointerAnalysisImpl.cpp +3 -3
  146. package/lib/SABER/ProgSlice.cpp +0 -37
  147. package/lib/SABER/SaberAnnotator.cpp +1 -1
  148. package/lib/SVF-FE/BreakConstantExpr.cpp +5 -143
  149. package/lib/SVF-FE/Graph2Json.cpp +1 -1
  150. package/lib/SVF-FE/LLVMModule.cpp +1 -1
  151. package/lib/Util/TypeBasedHeapCloning.cpp +6 -6
  152. package/lib/WPA/Andersen.cpp +4 -4
  153. package/lib/WPA/FlowSensitive.cpp +2 -2
  154. package/lib/WPA/FlowSensitiveTBHC.cpp +2 -2
  155. package/lib/WPA/WPAPass.cpp +7 -7
  156. package/package.json +1 -1
  157. package/setup.sh +1 -1
@@ -200,7 +200,7 @@ $(function() {
200
200
  <div class="ttc" id="classSVF_1_1CHNode_html_a268ccdfb486cc2efa8581ee7a3b5af39"><div class="ttname"><a href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">SVF::CHNode::isPureAbstract</a></div><div class="ttdeci">bool isPureAbstract() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00121">CHG.h:121</a></div></div>
201
201
  <div class="ttc" id="classSVF_1_1CHNode_html_af6e71c1a932464b1b615fc177f5af089"><div class="ttname"><a href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">SVF::CHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00091">CHG.h:91</a></div></div>
202
202
  <div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4_html_a73928161c8b1427e8150ca68ec48160e"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html#a73928161c8b1427e8150ca68ec48160e">llvm::DOTGraphTraits&lt; CHGraph * &gt;::NodeType</a></div><div class="ttdeci">CHNode NodeType</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00907">CHG.cpp:907</a></div></div>
203
- <div class="ttc" id="classllvm_1_1GraphPrinter_html_a53b3809728c30389a594076097884b82"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(llvm::raw_ostream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00056">GraphPrinter.h:56</a></div></div>
203
+ <div class="ttc" id="classllvm_1_1GraphPrinter_html_a53b3809728c30389a594076097884b82"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(llvm::raw_ostream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00057">GraphPrinter.h:57</a></div></div>
204
204
  <div class="ttc" id="classSVF_1_1CHNode_html_a5df1cf4d51bf3406d188c96bc9aae0af"><div class="ttname"><a href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">SVF::CHNode::getVirtualFunctionVectors</a></div><div class="ttdeci">const std::vector&lt; FuncVector &gt; &amp; getVirtualFunctionVectors() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00139">CHG.h:139</a></div></div>
205
205
  </div><!-- fragment --></div><!-- contents -->
206
206
  <!-- start footer part -->
@@ -175,7 +175,7 @@ $(function() {
175
175
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a0fd9fca5ed82cf83dbd825d23c63783a"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">SVF::ConstraintNode::sccEdgeFlag</a></div><div class="ttdeci">static SCCEdgeFlag sccEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00076">ConsGNode.h:76</a></div></div>
176
176
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_af9fc8308845628fe8900528573e30462"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462">SVF::ConstraintGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump graph into dot file. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00524">ConsG.cpp:524</a></div></div>
177
177
  <div class="ttc" id="classSVF_1_1GenericEdge_html_a0e8736f88ee75da025d874f92328ca71"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">SVF::GenericEdge::src</a></div><div class="ttdeci">NodeTy * src</div><div class="ttdoc">source node </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00055">GenericGraph.h:55</a></div></div>
178
- <div class="ttc" id="classllvm_1_1GraphPrinter_html_a53b3809728c30389a594076097884b82"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(llvm::raw_ostream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00056">GraphPrinter.h:56</a></div></div>
178
+ <div class="ttc" id="classllvm_1_1GraphPrinter_html_a53b3809728c30389a594076097884b82"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(llvm::raw_ostream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00057">GraphPrinter.h:57</a></div></div>
179
179
  </div><!-- fragment --></div><!-- contents -->
180
180
  <!-- start footer part -->
181
181
  <hr class="footer"/><address class="footer"><small>
@@ -146,7 +146,7 @@ $(function() {
146
146
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_a42035e9669204ddd5d38583db21af3d7"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a42035e9669204ddd5d38583db21af3d7">SVF::PTACallGraph::getCallerOfCallSite</a></div><div class="ttdeci">const SVFFunction * getCallerOfCallSite(CallSiteID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00367">PTACallGraph.h:367</a></div></div>
147
147
  <div class="ttc" id="classSVF_1_1CondStdSet_html"><div class="ttname"><a href="classSVF_1_1CondStdSet.html">SVF::CondStdSet</a></div><div class="ttdef"><b>Definition:</b> <a href="ConditionalPT_8h_source.html#l00131">ConditionalPT.h:131</a></div></div>
148
148
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_acb7980c7e0d1d8ad6abab0b80831d2a9"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">SVF::DDAVFSolver&lt; CxtVar, CxtPtSet, CxtLocDPItem &gt;::getSVFG</a></div><div class="ttdeci">SVFG * getSVFG() const</div><div class="ttdoc">Return SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00096">DDAVFSolver.h:96</a></div></div>
149
- <div class="ttc" id="classSVF_1_1SVFG_html_a0cebc2ba5ae81a6d45b224a4f94fc8b4"><div class="ttname"><a href="classSVF_1_1SVFG.html#a0cebc2ba5ae81a6d45b224a4f94fc8b4">SVF::SVFG::connectCallerAndCallee</a></div><div class="ttdeci">virtual void connectCallerAndCallee(const CallBlockNode *cs, const SVFFunction *callee, SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Connect SVFG nodes between caller and callee for indirect call site. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00660">SVFG.cpp:660</a></div></div>
149
+ <div class="ttc" id="classSVF_1_1SVFG_html_a0cebc2ba5ae81a6d45b224a4f94fc8b4"><div class="ttname"><a href="classSVF_1_1SVFG.html#a0cebc2ba5ae81a6d45b224a4f94fc8b4">SVF::SVFG::connectCallerAndCallee</a></div><div class="ttdeci">virtual void connectCallerAndCallee(const CallBlockNode *cs, const SVFFunction *callee, SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Connect SVFG nodes between caller and callee for indirect call site. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00640">SVFG.cpp:640</a></div></div>
150
150
  <div class="ttc" id="classSVF_1_1ContextDDA_html"><div class="ttname"><a href="classSVF_1_1ContextDDA.html">SVF::ContextDDA</a></div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00026">ContextDDA.h:26</a></div></div>
151
151
  <div class="ttc" id="DPItem_8h_html"><div class="ttname"><a href="DPItem_8h.html">DPItem.h</a></div></div>
152
152
  <div class="ttc" id="classSVF_1_1ContextDDA_html_a525949d1743136466d33bf4dc26ba423"><div class="ttname"><a href="classSVF_1_1ContextDDA.html#a525949d1743136466d33bf4dc26ba423">SVF::ContextDDA::isEdgeInRecursion</a></div><div class="ttdeci">virtual bool isEdgeInRecursion(CallSiteID csId)</div><div class="ttdoc">Whether call/return inside recursion. </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00106">ContextDDA.h:106</a></div></div>
@@ -172,7 +172,7 @@ $(function() {
172
172
  <div class="ttc" id="classSVF_1_1GenericEdge_html_a0e8736f88ee75da025d874f92328ca71"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">SVF::GenericEdge&lt; DCHNode &gt;::src</a></div><div class="ttdeci">DCHNode * src</div><div class="ttdoc">source node </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00055">GenericGraph.h:55</a></div></div>
173
173
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a10225f56b21eb7f0870fdc433de3c393"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">SVF::DCHGraph::canonicalTypes</a></div><div class="ttdeci">Set&lt; const DIType * &gt; canonicalTypes</div><div class="ttdoc">Set of all possible canonical types (i.e. values of canonicalTypeMap). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00372">DCHG.h:372</a></div></div>
174
174
  <div class="ttc" id="classSVF_1_1DCHNode_html_aed5e8397d43b602b79425acdae5e01f5"><div class="ttname"><a href="classSVF_1_1DCHNode.html#aed5e8397d43b602b79425acdae5e01f5">SVF::DCHNode::isPureAbstract</a></div><div class="ttdeci">bool isPureAbstract() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00136">DCHG.h:136</a></div></div>
175
- <div class="ttc" id="classllvm_1_1GraphPrinter_html_a53b3809728c30389a594076097884b82"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(llvm::raw_ostream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00056">GraphPrinter.h:56</a></div></div>
175
+ <div class="ttc" id="classllvm_1_1GraphPrinter_html_a53b3809728c30389a594076097884b82"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(llvm::raw_ostream &amp;O, const std::string &amp;GraphName, const GraphType &amp;GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00057">GraphPrinter.h:57</a></div></div>
176
176
  <div class="ttc" id="classSVF_1_1CommonCHGraph_html_adf2a02fff9d7dd9fc9d92121e5e28f8b"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">SVF::CommonCHGraph::getKind</a></div><div class="ttdeci">CHGKind getKind(void) const</div><div class="ttdef"><b>Definition:</b> <a href="CommonCHG_8h_source.html#l00037">CommonCHG.h:37</a></div></div>
177
177
  </div><!-- fragment --></div><!-- contents -->
178
178
  <!-- start footer part -->
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">DDAPass.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="DDAPass_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>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * @file: DDAPass.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * @author: Yulei Sui</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * @date: 01/07/2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DDAPass_8h.html">DDA/DDAPass.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowDDA_8h.html">DDA/FlowDDA.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ContextDDA_8h.html">DDA/ContextDDA.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DDAClient_8h.html">DDA/DDAClient.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PAGBuilder_8h.html">SVF-FE/PAGBuilder.h</a>&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;limits.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keywordtype">char</span> <a class="code" href="classSVF_1_1DDAPass.html#adb39fc24e3d45e558ac36f37b5dc3565">DDAPass::ID</a> = 0;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">static</span> llvm::RegisterPass&lt;DDAPass&gt; <a class="code" href="DDAPass_8cpp.html#ac357f2ea0af7849dfa394f4bf2be3d9a">DDAPA</a>(<span class="stringliteral">&quot;dda&quot;</span>, <span class="stringliteral">&quot;Demand-driven Pointer Analysis Pass&quot;</span>);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#adc8e3d685a1fbb9731040a8ceb4f4202"> 26</a></span>&#160;<a class="code" href="classSVF_1_1DDAPass.html#adc8e3d685a1fbb9731040a8ceb4f4202">DDAPass::~DDAPass</a>()</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// _pta-&gt;dumpStat();</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (_client != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">delete</span> _client;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#af196994d6ec7f5cead72212407842103"> 34</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#af196994d6ec7f5cead72212407842103">DDAPass::runOnModule</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">//InitializeAliasAnalysis(this, SymbolTableInfo::getDataLayout(&amp;module));</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; selectClient(module);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">PointerAnalysis::FlowS_DDA</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; i &lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">PointerAnalysis::Default_PTA</a>; i++)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a2203f622ab539b3a38488575c9eec33b">Options::DDASelected</a>.isSet(i))</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; runPointerAnalysis(module, i);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a7bc2c9a62b7d97b8e19bee0c4625aea3"> 49</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAPass.html#af196994d6ec7f5cead72212407842103">DDAPass::runOnModule</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; module)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae919327019b5014f64b754dbdeb07f75">buildSVFModule</a>(module);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; runOnModule(svfModule);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842"> 57</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842">DDAPass::selectClient</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a>.<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>())</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a> == <span class="stringliteral">&quot;funptr&quot;</span>)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; _client = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FunptrDDAClient.html">FunptrDDAClient</a>(module);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a> == <span class="stringliteral">&quot;alias&quot;</span>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; _client = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AliasDDAClient.html">AliasDDAClient</a>(module);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; _client = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DDAClient.html">DDAClient</a>(module);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a> != <span class="stringliteral">&quot;all&quot;</span>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> buf; <span class="comment">// Have a buffer</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; stringstream ss(<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a>); <span class="comment">// Insert the user input string into a stream</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">while</span> (ss &gt;&gt; buf)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; _client-&gt;setQuery(buf);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Please specify query options!&quot;</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; _client-&gt;initialise(module);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a13ff3107a0e4f8749b166fa9b8165167"> 93</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#a13ff3107a0e4f8749b166fa9b8165167">DDAPass::runPointerAnalysis</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> kind)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1PAGBuilder.html">PAGBuilder</a> builder;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = builder.<a class="code" href="classSVF_1_1PAGBuilder.html#a757ab2c9481467842e1ad4c46a1f6291">build</a>(module);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1ContextCond.html#a084679a423e78217ca10794775c25b1d">ContextCond::setMaxPathLen</a>(<a class="code" href="classSVF_1_1Options.html#a32ef95b3bd06b50337b3129b74ffb45c">Options::MaxPathLen</a>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classSVF_1_1ContextCond.html#a92e89bbae0f31bb9eb971ab3edcc8071">ContextCond::setMaxCxtLen</a>(<a class="code" href="classSVF_1_1Options.html#a2e53156bd075d7802d390672f129c6a8">Options::MaxContextLen</a>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">switch</span> (kind)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a0ab6564c48897595c9d23382a026e0a8">PointerAnalysis::Cxt_DDA</a>:</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; _pta = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ContextDDA.html">ContextDDA</a>(pag, _client);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">PointerAnalysis::FlowS_DDA</a>:</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; _pta = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowDDA.html">FlowDDA</a>(pag, _client);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;This pointer analysis has not been implemented yet.\n&quot;</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a0865038c4738fcc8f47106faad03d98a">Options::WPANum</a>)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; _client-&gt;collectWPANum(module);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; _pta-&gt;initialize();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; _client-&gt;answerQueries(_pta);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; _pta-&gt;finalize();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#aee5e47ee3ca9bacb514f9dfbcb3abf24">Options::PrintCPts</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; _pta-&gt;dumpCPts();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (_pta-&gt;printStat())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; _client-&gt;performStat(_pta);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aabfcfcd67df527cdf587aff5ecc26a10">Options::PrintQueryPts</a>)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; printQueryPTS();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#add44aee75c9a59327b4eb46774551e2b"> 147</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#add44aee75c9a59327b4eb46774551e2b">DDAPass::initCxtInsensitiveEdges</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SCCDetection.html">SVFGSCC</a>* svfgSCC, <a class="code" href="classSVF_1_1DDAPass.html#acc81a1f7ad572fa27648999334479f56">SVFGEdgeSet</a>&amp; insensitveEdges)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#aa1a3b9293dffeef1bb16a2a7b3a007dd">Options::InsenRecur</a>)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; collectCxtInsenEdgeForRecur(pta,svfg,insensitveEdges);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a35cfe6add81dc82983e0c53c36c6e667">Options::InsenCycle</a>)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; collectCxtInsenEdgeForVFCycle(pta,svfg,svfgSCC,insensitveEdges);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a3810708c5e2695d2a0e36084b589e432"> 158</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAPass.html#a3810708c5e2695d2a0e36084b589e432">DDAPass::edgeInSVFGSCC</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SCCDetection.html">SVFGSCC</a>* svfgSCC,<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> (svfgSCC-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()) == svfgSCC-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()));</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;}</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#aab60429398a89ec1c8663a305130376f"> 166</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAPass.html#aab60429398a89ec1c8663a305130376f">DDAPass::edgeInCallGraphSCC</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta,<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span>(srcFun &amp;&amp; dstFun)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae58c2b25494ec51e714c83c6cfd5dd67">inSameCallGraphSCC</a>(srcFun,dstFun);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>() == <span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;should not be an inter-procedural return edge&quot;</span> );</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;}</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#af8bc7f84e7dc8c7032eec6162a837ba6"> 184</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#af8bc7f84e7dc8c7032eec6162a837ba6">DDAPass::collectCxtInsenEdgeForRecur</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg,<a class="code" href="classSVF_1_1DDAPass.html#acc81a1f7ad572fa27648999334479f56">SVFGEdgeSet</a>&amp; insensitveEdges)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (SVFG::SVFGNodeIDToNodeMapTy::const_iterator it = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),eit = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeIt = it-&gt;second-&gt;InEdgeBegin();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeEit = it-&gt;second-&gt;InEdgeEnd();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">for</span> (; edgeIt != edgeEit; ++edgeIt)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *edgeIt;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>() || edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span>(edgeInCallGraphSCC(pta,edge))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; insensitveEdges.insert(edge);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;}</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#af03661604ba924d1c3fd34a231ba87a6"> 207</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#af03661604ba924d1c3fd34a231ba87a6">DDAPass::collectCxtInsenEdgeForVFCycle</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SCCDetection.html">SVFGSCC</a>* svfgSCC, <a class="code" href="classSVF_1_1DDAPass.html#acc81a1f7ad572fa27648999334479f56">SVFGEdgeSet</a>&amp; insensitveEdges)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;NodePair&gt;</a> insensitvefunPairs;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (SVFG::SVFGNodeIDToNodeMapTy::const_iterator it = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),eit = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeIt = it-&gt;second-&gt;InEdgeBegin();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeEit = it-&gt;second-&gt;InEdgeEnd();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">for</span> (; edgeIt != edgeEit; ++edgeIt)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *edgeIt;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>() || edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span>(this-&gt;edgeInSVFGSCC(svfgSCC,edge))</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span>(srcFun &amp;&amp; dstFun)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(srcFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(dstFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; insensitvefunPairs.insert(std::make_pair(src,dst));</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; insensitvefunPairs.insert(std::make_pair(dst,src));</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>() == <span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;should not be an inter-procedural return edge&quot;</span> );</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">for</span>(SVFG::SVFGNodeIDToNodeMapTy::const_iterator it = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),eit = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeIt = it-&gt;second-&gt;InEdgeBegin();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeEit = it-&gt;second-&gt;InEdgeEnd();</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">for</span> (; edgeIt != edgeEit; ++edgeIt)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *edgeIt;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>() || edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span>(srcFun &amp;&amp; dstFun)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(srcFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(dstFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span>(insensitvefunPairs.find(std::make_pair(src,dst))!=insensitvefunPairs.end())</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; insensitveEdges.insert(edge);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(insensitvefunPairs.find(std::make_pair(dst,src))!=insensitvefunPairs.end())</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; insensitveEdges.insert(edge);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a96de481dd2af7b39428aff38158c1d4e"> 269</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1DDAPass.html#a0a39a0f3e530a97a38dbfe0d9f04ec33">DDAPass::alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = _pta-&gt;<a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">getPAG</a>();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(node1)))</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; _pta-&gt;computeDDAPts(node1);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(node2)))</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; _pta-&gt;computeDDAPts(node2);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span> _pta-&gt;alias(node1,node2);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;}</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a242575c5bd8a8f17fdc802e5ba80e7b0"> 285</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1DDAPass.html#a0a39a0f3e530a97a38dbfe0d9f04ec33">DDAPass::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;{</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = _pta-&gt;<a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">getPAG</a>();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (pag-&gt;<a class="code" href="classSVF_1_1PAG.html#ae3cdf8c2139ba043595b420624f25427">hasValueNode</a>(V1) &amp;&amp; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#ae3cdf8c2139ba043595b420624f25427">hasValueNode</a>(V2))</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* node1 = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">getValueNode</a>(V1));</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(node1))</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; _pta-&gt;computeDDAPts(node1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* node2 = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">getValueNode</a>(V2));</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(node2))</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _pta-&gt;computeDDAPts(node2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> _pta-&gt;alias(V1,V2);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> llvm::MayAlias;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#afc700bd3abb5d9199621741b9bd04f0f"> 313</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#afc700bd3abb5d9199621741b9bd04f0f">DDAPass::printQueryPTS</a>()</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a>&amp; candidates = _client-&gt;getCandidateQueries();</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::const_iterator it = candidates.begin(), eit = candidates.end(); it != eit; ++it)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = _pta-&gt;getPts(*it);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; _pta-&gt;dumpPts(*it,pts);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
69
+ <a href="DDAPass_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>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * @file: DDAPass.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * @author: Yulei Sui</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * @date: 01/07/2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DDAPass_8h.html">DDA/DDAPass.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowDDA_8h.html">DDA/FlowDDA.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ContextDDA_8h.html">DDA/ContextDDA.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DDAClient_8h.html">DDA/DDAClient.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PAGBuilder_8h.html">SVF-FE/PAGBuilder.h</a>&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;limits.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keywordtype">char</span> <a class="code" href="classSVF_1_1DDAPass.html#adb39fc24e3d45e558ac36f37b5dc3565">DDAPass::ID</a> = 0;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">static</span> llvm::RegisterPass&lt;DDAPass&gt; <a class="code" href="DDAPass_8cpp.html#ac357f2ea0af7849dfa394f4bf2be3d9a">DDAPA</a>(<span class="stringliteral">&quot;dda&quot;</span>, <span class="stringliteral">&quot;Demand-driven Pointer Analysis Pass&quot;</span>);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#adc8e3d685a1fbb9731040a8ceb4f4202"> 26</a></span>&#160;<a class="code" href="classSVF_1_1DDAPass.html#adc8e3d685a1fbb9731040a8ceb4f4202">DDAPass::~DDAPass</a>()</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// _pta-&gt;dumpStat();</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (_client != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">delete</span> _client;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#af196994d6ec7f5cead72212407842103"> 34</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#af196994d6ec7f5cead72212407842103">DDAPass::runOnModule</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">//InitializeAliasAnalysis(this, SymbolTableInfo::getDataLayout(&amp;module));</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; selectClient(module);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">PointerAnalysis::FlowS_DDA</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; i &lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">PointerAnalysis::Default_PTA</a>; i++)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a2203f622ab539b3a38488575c9eec33b">Options::DDASelected</a>.isSet(i))</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; runPointerAnalysis(module, i);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a7bc2c9a62b7d97b8e19bee0c4625aea3"> 49</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAPass.html#af196994d6ec7f5cead72212407842103">DDAPass::runOnModule</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; module)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae919327019b5014f64b754dbdeb07f75">buildSVFModule</a>(module);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; runOnModule(svfModule);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842"> 57</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842">DDAPass::selectClient</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a>.<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>())</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a> == <span class="stringliteral">&quot;funptr&quot;</span>)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; _client = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FunptrDDAClient.html">FunptrDDAClient</a>(module);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a> == <span class="stringliteral">&quot;alias&quot;</span>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; _client = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AliasDDAClient.html">AliasDDAClient</a>(module);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; _client = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DDAClient.html">DDAClient</a>(module);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a> != <span class="stringliteral">&quot;all&quot;</span>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> buf; <span class="comment">// Have a buffer</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; stringstream ss(<a class="code" href="classSVF_1_1Options.html#a3c3d704c209c4e6eed1a771caf8214ce">Options::UserInputQuery</a>); <span class="comment">// Insert the user input string into a stream</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">while</span> (ss &gt;&gt; buf)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; _client-&gt;setQuery(buf);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Please specify query options!&quot;</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; _client-&gt;initialise(module);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a13ff3107a0e4f8749b166fa9b8165167"> 93</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#a13ff3107a0e4f8749b166fa9b8165167">DDAPass::runPointerAnalysis</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> kind)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1PAGBuilder.html">PAGBuilder</a> builder;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = builder.<a class="code" href="classSVF_1_1PAGBuilder.html#a757ab2c9481467842e1ad4c46a1f6291">build</a>(module);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1ContextCond.html#a084679a423e78217ca10794775c25b1d">ContextCond::setMaxPathLen</a>(<a class="code" href="classSVF_1_1Options.html#a32ef95b3bd06b50337b3129b74ffb45c">Options::MaxPathLen</a>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classSVF_1_1ContextCond.html#a92e89bbae0f31bb9eb971ab3edcc8071">ContextCond::setMaxCxtLen</a>(<a class="code" href="classSVF_1_1Options.html#a2e53156bd075d7802d390672f129c6a8">Options::MaxContextLen</a>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">switch</span> (kind)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a0ab6564c48897595c9d23382a026e0a8">PointerAnalysis::Cxt_DDA</a>:</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; _pta = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ContextDDA.html">ContextDDA</a>(pag, _client);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">PointerAnalysis::FlowS_DDA</a>:</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; _pta = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowDDA.html">FlowDDA</a>(pag, _client);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;This pointer analysis has not been implemented yet.\n&quot;</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a0865038c4738fcc8f47106faad03d98a">Options::WPANum</a>)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; _client-&gt;collectWPANum(module);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; _pta-&gt;initialize();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; _client-&gt;answerQueries(_pta);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; _pta-&gt;finalize();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#aee5e47ee3ca9bacb514f9dfbcb3abf24">Options::PrintCPts</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; _pta-&gt;dumpCPts();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (_pta-&gt;printStat())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; _client-&gt;performStat(_pta);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aabfcfcd67df527cdf587aff5ecc26a10">Options::PrintQueryPts</a>)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; printQueryPTS();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#add44aee75c9a59327b4eb46774551e2b"> 147</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#add44aee75c9a59327b4eb46774551e2b">DDAPass::initCxtInsensitiveEdges</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SCCDetection.html">SVFGSCC</a>* svfgSCC, <a class="code" href="classSVF_1_1DDAPass.html#acc81a1f7ad572fa27648999334479f56">SVFGEdgeSet</a>&amp; insensitveEdges)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#aa1a3b9293dffeef1bb16a2a7b3a007dd">Options::InsenRecur</a>)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; collectCxtInsenEdgeForRecur(pta,svfg,insensitveEdges);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a35cfe6add81dc82983e0c53c36c6e667">Options::InsenCycle</a>)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; collectCxtInsenEdgeForVFCycle(pta,svfg,svfgSCC,insensitveEdges);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a3810708c5e2695d2a0e36084b589e432"> 158</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAPass.html#a3810708c5e2695d2a0e36084b589e432">DDAPass::edgeInSVFGSCC</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SCCDetection.html">SVFGSCC</a>* svfgSCC,<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> (svfgSCC-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()) == svfgSCC-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()));</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;}</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#aab60429398a89ec1c8663a305130376f"> 166</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAPass.html#aab60429398a89ec1c8663a305130376f">DDAPass::edgeInCallGraphSCC</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta,<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span>(srcFun &amp;&amp; dstFun)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ae58c2b25494ec51e714c83c6cfd5dd67">inSameCallGraphSCC</a>(srcFun,dstFun);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>() == <span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;should not be an inter-procedural return edge&quot;</span> );</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;}</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#af8bc7f84e7dc8c7032eec6162a837ba6"> 184</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#af8bc7f84e7dc8c7032eec6162a837ba6">DDAPass::collectCxtInsenEdgeForRecur</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg,<a class="code" href="classSVF_1_1DDAPass.html#acc81a1f7ad572fa27648999334479f56">SVFGEdgeSet</a>&amp; insensitveEdges)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (SVFG::SVFGNodeIDToNodeMapTy::const_iterator it = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),eit = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeIt = it-&gt;second-&gt;InEdgeBegin();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeEit = it-&gt;second-&gt;InEdgeEnd();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">for</span> (; edgeIt != edgeEit; ++edgeIt)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *edgeIt;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>() || edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span>(edgeInCallGraphSCC(pta,edge))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; insensitveEdges.insert(edge);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;}</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#af03661604ba924d1c3fd34a231ba87a6"> 207</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#af03661604ba924d1c3fd34a231ba87a6">DDAPass::collectCxtInsenEdgeForVFCycle</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SCCDetection.html">SVFGSCC</a>* svfgSCC, <a class="code" href="classSVF_1_1DDAPass.html#acc81a1f7ad572fa27648999334479f56">SVFGEdgeSet</a>&amp; insensitveEdges)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;NodePair&gt;</a> insensitvefunPairs;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (SVFG::SVFGNodeIDToNodeMapTy::const_iterator it = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),eit = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeIt = it-&gt;second-&gt;InEdgeBegin();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeEit = it-&gt;second-&gt;InEdgeEnd();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">for</span> (; edgeIt != edgeEit; ++edgeIt)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *edgeIt;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>() || edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span>(this-&gt;edgeInSVFGSCC(svfgSCC,edge))</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span>(srcFun &amp;&amp; dstFun)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(srcFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(dstFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; insensitvefunPairs.insert(std::make_pair(src,dst));</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; insensitvefunPairs.insert(std::make_pair(dst,src));</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>() == <span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;should not be an inter-procedural return edge&quot;</span> );</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">for</span>(SVFG::SVFGNodeIDToNodeMapTy::const_iterator it = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),eit = svfg-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeIt = it-&gt;second-&gt;InEdgeBegin();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; SVFGEdge::SVFGEdgeSetTy::const_iterator edgeEit = it-&gt;second-&gt;InEdgeEnd();</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">for</span> (; edgeIt != edgeEit; ++edgeIt)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *edgeIt;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a4352297ef44c4eff1efe2f348cce6fe9">isCallVFGEdge</a>() || edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#a3937eef974c3953f1d1e7d64c5a24ff3">isRetVFGEdge</a>())</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getICFGNode()-&gt;getFun();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span>(srcFun &amp;&amp; dstFun)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(srcFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(dstFun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span>(insensitvefunPairs.find(std::make_pair(src,dst))!=insensitvefunPairs.end())</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; insensitveEdges.insert(edge);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(insensitvefunPairs.find(std::make_pair(dst,src))!=insensitvefunPairs.end())</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; insensitveEdges.insert(edge);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a96de481dd2af7b39428aff38158c1d4e"> 269</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1DDAPass.html#a0a39a0f3e530a97a38dbfe0d9f04ec33">DDAPass::alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = _pta-&gt;<a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">getPAG</a>();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(node1)))</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; _pta-&gt;computeDDAPts(node1);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(node2)))</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; _pta-&gt;computeDDAPts(node2);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span> _pta-&gt;alias(node1,node2);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;}</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#a242575c5bd8a8f17fdc802e5ba80e7b0"> 285</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1DDAPass.html#a0a39a0f3e530a97a38dbfe0d9f04ec33">DDAPass::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;{</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = _pta-&gt;<a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">getPAG</a>();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (pag-&gt;<a class="code" href="classSVF_1_1PAG.html#ae3cdf8c2139ba043595b420624f25427">hasValueNode</a>(V1) &amp;&amp; pag-&gt;<a class="code" href="classSVF_1_1PAG.html#ae3cdf8c2139ba043595b420624f25427">hasValueNode</a>(V2))</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* node1 = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">getValueNode</a>(V1));</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(node1))</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; _pta-&gt;computeDDAPts(node1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* node2 = pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">getValueNode</a>(V2));</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span>(pag-&gt;<a class="code" href="classSVF_1_1PAG.html#a107c329c9524b2c029ff3fd8088dab67">isValidTopLevelPtr</a>(node2))</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _pta-&gt;computeDDAPts(node2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> _pta-&gt;alias(V1,V2);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAPass.html#afc700bd3abb5d9199621741b9bd04f0f"> 313</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAPass.html#afc700bd3abb5d9199621741b9bd04f0f">DDAPass::printQueryPTS</a>()</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a>&amp; candidates = _client-&gt;getCandidateQueries();</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::const_iterator it = candidates.begin(), eit = candidates.end(); it != eit; ++it)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = _pta-&gt;getPts(*it);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; _pta-&gt;dumpPts(*it,pts);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1PAG_html_a5f49b7da110a626ed6605d1f108dfa25"><div class="ttname"><a href="classSVF_1_1PAG.html#a5f49b7da110a626ed6605d1f108dfa25">SVF::PAG::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get PAG Node according to LLVM value. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00547">PAG.h:547</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1DDAPass_html_af03661604ba924d1c3fd34a231ba87a6"><div class="ttname"><a href="classSVF_1_1DDAPass.html#af03661604ba924d1c3fd34a231ba87a6">SVF::DDAPass::collectCxtInsenEdgeForVFCycle</a></div><div class="ttdeci">void collectCxtInsenEdgeForVFCycle(PointerAnalysis *pta, const SVFG *svfg, const SVFGSCC *svfgSCC, SVFGEdgeSet &amp;insensitveEdges)</div><div class="ttdef"><b>Definition:</b> <a href="DDAPass_8cpp_source.html#l00207">DDAPass.cpp:207</a></div></div>
72
72
  <div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
@@ -68,7 +68,7 @@ $(function() {
68
68
  <div class="contents">
69
69
  <a href="DoubleFreeChecker_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>&#160;<span class="comment">//===- DoubleFreeChecker.cpp -- Detecting double-free errors------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<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>&#160;<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>&#160;<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>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<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>&#160;<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>&#160;<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>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<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>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * DoubleFreeChecker.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Apr 24, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DoubleFreeChecker_8h.html">SABER/DoubleFreeChecker.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1DoubleFreeChecker.html#aa6bde3be780876317dcdcdf26d2ece2a"> 35</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DoubleFreeChecker.html#aa6bde3be780876317dcdcdf26d2ece2a">DoubleFreeChecker::reportBug</a>(<a class="code" href="classSVF_1_1ProgSlice.html">ProgSlice</a>* slice)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span>(slice-&gt;<a class="code" href="classSVF_1_1ProgSlice.html#a45fb7711498bcba60e931c9c2a9ccec4">isSatisfiableForPairs</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = slice-&gt;<a class="code" href="classSVF_1_1ProgSlice.html#ac1dc48ea64a89ce37394a22e609a0cd0">getSource</a>();</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = getSrcCSID(src);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">bugMsg2</a>(<span class="stringliteral">&quot;\t Double Free :&quot;</span>) &lt;&lt; <span class="stringliteral">&quot; memory allocation at : (&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()) &lt;&lt; <span class="stringliteral">&quot;)\n&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\t double free path: \n&quot;</span> &lt;&lt; slice-&gt;<a class="code" href="classSVF_1_1ProgSlice.html#afac06b0be2b04cb8a65af21fd697b756">evalFinalCond</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; slice-&gt;<a class="code" href="classSVF_1_1ProgSlice.html#ab1fdec8d39c9890324718607d7464eab">annotatePaths</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><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>
70
70
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af0f447732c67402037a86ea29006efc2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVF::SVFUtil::errs</a></div><div class="ttdeci">raw_ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00055">SVFUtil.h:55</a></div></div>
71
- <div class="ttc" id="classSVF_1_1ProgSlice_html_afac06b0be2b04cb8a65af21fd697b756"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#afac06b0be2b04cb8a65af21fd697b756">SVF::ProgSlice::evalFinalCond</a></div><div class="ttdeci">std::string evalFinalCond() const</div><div class="ttdoc">Evaluate final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00197">ProgSlice.cpp:197</a></div></div>
71
+ <div class="ttc" id="classSVF_1_1ProgSlice_html_afac06b0be2b04cb8a65af21fd697b756"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#afac06b0be2b04cb8a65af21fd697b756">SVF::ProgSlice::evalFinalCond</a></div><div class="ttdeci">std::string evalFinalCond() const</div><div class="ttdoc">Evaluate final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00160">ProgSlice.cpp:160</a></div></div>
72
72
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a28c0ede7e4765d2a686fc8ae0f5641a4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVF::SVFUtil::getSourceLoc</a></div><div class="ttdeci">std::string getSourceLoc(const Value *val)</div><div class="ttdoc">Return source code including line number and file name from debug information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00269">SVFUtil.cpp:269</a></div></div>
73
73
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a054c3e668ce8b265bbc5d923f6243ce7"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">SVF::SVFUtil::bugMsg2</a></div><div class="ttdeci">std::string bugMsg2(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00088">SVFUtil.cpp:88</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1ProgSlice_html_a45fb7711498bcba60e931c9c2a9ccec4"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#a45fb7711498bcba60e931c9c2a9ccec4">SVF::ProgSlice::isSatisfiableForPairs</a></div><div class="ttdeci">bool isSatisfiableForPairs()</div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00112">ProgSlice.cpp:112</a></div></div>
@@ -77,7 +77,7 @@ $(function() {
77
77
  <div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
78
78
  <div class="ttc" id="classSVF_1_1DoubleFreeChecker_html_aa6bde3be780876317dcdcdf26d2ece2a"><div class="ttname"><a href="classSVF_1_1DoubleFreeChecker.html#aa6bde3be780876317dcdcdf26d2ece2a">SVF::DoubleFreeChecker::reportBug</a></div><div class="ttdeci">void reportBug(ProgSlice *slice)</div><div class="ttdoc">Report file/close bugs. </div><div class="ttdef"><b>Definition:</b> <a href="DoubleFreeChecker_8cpp_source.html#l00035">DoubleFreeChecker.cpp:35</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1ProgSlice_html"><div class="ttname"><a href="classSVF_1_1ProgSlice.html">SVF::ProgSlice</a></div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8h_source.html#l00041">ProgSlice.h:41</a></div></div>
80
- <div class="ttc" id="classSVF_1_1ProgSlice_html_ab1fdec8d39c9890324718607d7464eab"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#ab1fdec8d39c9890324718607d7464eab">SVF::ProgSlice::annotatePaths</a></div><div class="ttdeci">void annotatePaths()</div><div class="ttdoc">Annotate program according to final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00222">ProgSlice.cpp:222</a></div></div>
80
+ <div class="ttc" id="classSVF_1_1ProgSlice_html_ab1fdec8d39c9890324718607d7464eab"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#ab1fdec8d39c9890324718607d7464eab">SVF::ProgSlice::annotatePaths</a></div><div class="ttdeci">void annotatePaths()</div><div class="ttdoc">Annotate program according to final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00185">ProgSlice.cpp:185</a></div></div>
81
81
  <div class="ttc" id="DoubleFreeChecker_8h_html"><div class="ttname"><a href="DoubleFreeChecker_8h.html">DoubleFreeChecker.h</a></div></div>
82
82
  <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#l00047">VFGNode.h:47</a></div></div>
83
83
  </div><!-- fragment --></div><!-- contents -->
@@ -70,7 +70,7 @@ $(function() {
70
70
  <div class="ttc" id="classSVF_1_1FileChecker_html_a8a4e249c4ac93b98149d25e1aa411cb0"><div class="ttname"><a href="classSVF_1_1FileChecker.html#a8a4e249c4ac93b98149d25e1aa411cb0">SVF::FileChecker::reportPartialClose</a></div><div class="ttdeci">void reportPartialClose(const SVFGNode *src)</div><div class="ttdef"><b>Definition:</b> <a href="FileChecker_8cpp_source.html#l00043">FileChecker.cpp:43</a></div></div>
71
71
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af0f447732c67402037a86ea29006efc2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af0f447732c67402037a86ea29006efc2">SVF::SVFUtil::errs</a></div><div class="ttdeci">raw_ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00055">SVFUtil.h:55</a></div></div>
72
72
  <div class="ttc" id="FileChecker_8h_html"><div class="ttname"><a href="FileChecker_8h.html">FileChecker.h</a></div></div>
73
- <div class="ttc" id="classSVF_1_1ProgSlice_html_afac06b0be2b04cb8a65af21fd697b756"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#afac06b0be2b04cb8a65af21fd697b756">SVF::ProgSlice::evalFinalCond</a></div><div class="ttdeci">std::string evalFinalCond() const</div><div class="ttdoc">Evaluate final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00197">ProgSlice.cpp:197</a></div></div>
73
+ <div class="ttc" id="classSVF_1_1ProgSlice_html_afac06b0be2b04cb8a65af21fd697b756"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#afac06b0be2b04cb8a65af21fd697b756">SVF::ProgSlice::evalFinalCond</a></div><div class="ttdeci">std::string evalFinalCond() const</div><div class="ttdoc">Evaluate final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00160">ProgSlice.cpp:160</a></div></div>
74
74
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a28c0ede7e4765d2a686fc8ae0f5641a4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVF::SVFUtil::getSourceLoc</a></div><div class="ttdeci">std::string getSourceLoc(const Value *val)</div><div class="ttdoc">Return source code including line number and file name from debug information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00269">SVFUtil.cpp:269</a></div></div>
75
75
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a054c3e668ce8b265bbc5d923f6243ce7"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">SVF::SVFUtil::bugMsg2</a></div><div class="ttdeci">std::string bugMsg2(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00088">SVFUtil.cpp:88</a></div></div>
76
76
  <div class="ttc" id="classSVF_1_1FileChecker_html_ac6b092dd119642f435c21a708b160b49"><div class="ttname"><a href="classSVF_1_1FileChecker.html#ac6b092dd119642f435c21a708b160b49">SVF::FileChecker::reportNeverClose</a></div><div class="ttdeci">void reportNeverClose(const SVFGNode *src)</div><div class="ttdef"><b>Definition:</b> <a href="FileChecker_8cpp_source.html#l00036">FileChecker.cpp:36</a></div></div>
@@ -79,7 +79,7 @@ $(function() {
79
79
  <div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1FileChecker_html_a88ffc46ca954b77463de4c94c4eace54"><div class="ttname"><a href="classSVF_1_1FileChecker.html#a88ffc46ca954b77463de4c94c4eace54">SVF::FileChecker::reportBug</a></div><div class="ttdeci">void reportBug(ProgSlice *slice)</div><div class="ttdoc">Report file/close bugs. </div><div class="ttdef"><b>Definition:</b> <a href="FileChecker_8cpp_source.html#l00050">FileChecker.cpp:50</a></div></div>
81
81
  <div class="ttc" id="classSVF_1_1ProgSlice_html"><div class="ttname"><a href="classSVF_1_1ProgSlice.html">SVF::ProgSlice</a></div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8h_source.html#l00041">ProgSlice.h:41</a></div></div>
82
- <div class="ttc" id="classSVF_1_1ProgSlice_html_ab1fdec8d39c9890324718607d7464eab"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#ab1fdec8d39c9890324718607d7464eab">SVF::ProgSlice::annotatePaths</a></div><div class="ttdeci">void annotatePaths()</div><div class="ttdoc">Annotate program according to final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00222">ProgSlice.cpp:222</a></div></div>
82
+ <div class="ttc" id="classSVF_1_1ProgSlice_html_ab1fdec8d39c9890324718607d7464eab"><div class="ttname"><a href="classSVF_1_1ProgSlice.html#ab1fdec8d39c9890324718607d7464eab">SVF::ProgSlice::annotatePaths</a></div><div class="ttdeci">void annotatePaths()</div><div class="ttdoc">Annotate program according to final condition. </div><div class="ttdef"><b>Definition:</b> <a href="ProgSlice_8cpp_source.html#l00185">ProgSlice.cpp:185</a></div></div>
83
83
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6c66553e2559eebfe4f98c0c7ec4b08"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6c66553e2559eebfe4f98c0c7ec4b08">SVF::SVFUtil::bugMsg1</a></div><div class="ttdeci">std::string bugMsg1(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00083">SVFUtil.cpp:83</a></div></div>
84
84
  <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#l00047">VFGNode.h:47</a></div></div>
85
85
  </div><!-- fragment --></div><!-- contents -->