svf-tools 1.0.295 → 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 (65) hide show
  1. package/CMakeLists.txt +1 -1
  2. package/Dockerfile +1 -1
  3. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  4. package/SVF-doxygen/html/html/CHG_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/GraphPrinter_8h.html +1 -0
  12. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +5 -5
  13. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/PAG_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  28. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +1 -1
  29. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +1 -1
  30. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
  31. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +1 -1
  32. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  33. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +1 -1
  34. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +1 -1
  35. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +1 -1
  36. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  38. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
  39. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  40. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  41. package/SVF-doxygen/html/html/classSVF_1_1PAG.html +1 -1
  42. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  44. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
  46. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  49. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +7 -7
  50. package/build.sh +6 -3
  51. package/include/Graphs/GraphPrinter.h +2 -1
  52. package/include/MemoryModel/MutablePointsToDS.h +1 -1
  53. package/include/MemoryModel/PointerAnalysisImpl.h +4 -4
  54. package/include/Util/BasicTypes.h +1 -1
  55. package/lib/DDA/DDAPass.cpp +1 -1
  56. package/lib/MemoryModel/PointerAnalysis.cpp +7 -7
  57. package/lib/MemoryModel/PointerAnalysisImpl.cpp +3 -3
  58. package/lib/SVF-FE/Graph2Json.cpp +1 -1
  59. package/lib/SVF-FE/LLVMModule.cpp +1 -1
  60. package/lib/Util/TypeBasedHeapCloning.cpp +6 -6
  61. package/lib/WPA/FlowSensitive.cpp +2 -2
  62. package/lib/WPA/FlowSensitiveTBHC.cpp +2 -2
  63. package/lib/WPA/WPAPass.cpp +7 -7
  64. package/package.json +1 -1
  65. package/setup.sh +1 -1
@@ -372,7 +372,7 @@ Private Attributes</h2></td></tr>
372
372
  <p>Return MayAlias if any PTA gives MayAlias result </p>
373
373
 
374
374
  <p class="definition">Definition at line <a class="el" href="WPAPass_8cpp_source.html#l00202">202</a> of file <a class="el" href="WPAPass_8cpp_source.html">WPAPass.cpp</a>.</p>
375
- <div class="fragment"><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = llvm::MayAlias;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.getBits() == 0 || <a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394dabb45a604558e2ebff460adb77b4a5d7c">Veto</a>))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; result = llvm::MayAlias;</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">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; it != eit; ++it)</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="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::NoAlias)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; result = llvm::NoAlias;</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; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394da498ba80d25733b291f391a94500dd4c7">Conservative</a>))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; result = llvm::NoAlias;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::MayAlias)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; result = llvm::MayAlias;</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;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;}</div><div class="ttc" id="classSVF_1_1Options_html_ab9db3ae038f26a350afc964952907bd7"><div class="ttname"><a href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">SVF::Options::AliasRule</a></div><div class="ttdeci">static llvm::cl::bits&lt; WPAPass::AliasCheckRule &gt; AliasRule</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00245">Options.h:245</a></div></div>
375
+ <div class="fragment"><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.getBits() == 0 || <a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394dabb45a604558e2ebff460adb77b4a5d7c">Veto</a>))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; result = llvm::AliasResult::MayAlias;</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">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; it != eit; ++it)</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="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; result = llvm::AliasResult::NoAlias;</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; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">Options::AliasRule</a>.isSet(<a class="code" href="classSVF_1_1WPAPass.html#a4505a1882956feda3cf83c788149394da498ba80d25733b291f391a94500dd4c7">Conservative</a>))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (PTAVector::const_iterator it = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.begin(), eit = <a class="code" href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">ptaVector</a>.end();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> ((*it)-&gt;alias(V1, V2) == llvm::AliasResult::MayAlias)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; result = llvm::AliasResult::MayAlias;</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;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;}</div><div class="ttc" id="classSVF_1_1Options_html_ab9db3ae038f26a350afc964952907bd7"><div class="ttname"><a href="classSVF_1_1Options.html#ab9db3ae038f26a350afc964952907bd7">SVF::Options::AliasRule</a></div><div class="ttdeci">static llvm::cl::bits&lt; WPAPass::AliasCheckRule &gt; AliasRule</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00245">Options.h:245</a></div></div>
376
376
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_aaf6b41f44da3a4caea1fa395e41edf71"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">PAG * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
377
377
  <div class="ttc" id="classSVF_1_1WPAPass_html_a72a66ae158793f5d1bcb37b655db4446"><div class="ttname"><a href="classSVF_1_1WPAPass.html#a72a66ae158793f5d1bcb37b655db4446">SVF::WPAPass::ptaVector</a></div><div class="ttdeci">PTAVector ptaVector</div><div class="ttdoc">all pointer analysis to be executed. </div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8h_source.html#l00135">WPAPass.h:135</a></div></div>
378
378
  <div class="ttc" id="classSVF_1_1PAG_html"><div class="ttname"><a href="classSVF_1_1PAG.html">SVF::PAG</a></div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00047">PAG.h:47</a></div></div>
@@ -89,7 +89,7 @@ Static Public Member Functions</h2></td></tr>
89
89
  </table>
90
90
  <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
91
91
  <div class="textblock">
92
- <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00044">44</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
92
+ <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00045">45</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
93
93
  </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
94
94
  <a id="a13b2efcc3e5967f60a27e107683cd448"></a>
95
95
  <h2 class="memtitle"><span class="permalink"><a href="#a13b2efcc3e5967f60a27e107683cd448">&#9670;&nbsp;</a></span>GraphPrinter()</h2>
@@ -114,8 +114,8 @@ Static Public Member Functions</h2></td></tr>
114
114
  </table>
115
115
  </div><div class="memdoc">
116
116
 
117
- <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00048">48</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
118
- <div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div></div><!-- fragment -->
117
+ <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00049">49</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
118
+ <div class="fragment"><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; }</div></div><!-- fragment -->
119
119
  </div>
120
120
  </div>
121
121
  <h2 class="groupheader">Member Function Documentation</h2>
@@ -163,8 +163,8 @@ template&lt;class GraphType &gt; </div>
163
163
  <p>Print the graph to command line </p>
164
164
  <p>Define the GTraits and node iterator for printing </p>
165
165
 
166
- <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00085">85</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
167
- <div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">typedef</span> llvm::GraphTraits&lt;GraphType&gt; GTraits;</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; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTraits::NodeRef NodeRef;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTraits::nodes_iterator node_iterator;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTraits::ChildIteratorType child_iterator;</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; O &lt;&lt; <span class="stringliteral">&quot;Printing VFG Graph&quot;</span> &lt;&lt; <span class="stringliteral">&quot;&#39;...\n&quot;</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Print each node name and its edges</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; node_iterator I = GTraits::nodes_begin(GT);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; node_iterator E = GTraits::nodes_end(GT);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">for</span> (; I != E; ++I)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; NodeRef *Node = *I;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;node :&quot;</span> &lt;&lt; Node &lt;&lt; <span class="stringliteral">&quot;&#39;\n&quot;</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; child_iterator EI = GTraits::child_begin(Node);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; child_iterator EE = GTraits::child_end(Node);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; EI != EE &amp;&amp; i != 64; ++EI, ++i)</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; O &lt;&lt; <span class="stringliteral">&quot;child :&quot;</span> &lt;&lt; *EI &lt;&lt; <span class="stringliteral">&quot;&#39;\n&quot;</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</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; }</div></div><!-- fragment -->
166
+ <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00086">86</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
167
+ <div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">typedef</span> llvm::GraphTraits&lt;GraphType&gt; GTraits;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTraits::NodeRef NodeRef;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTraits::nodes_iterator node_iterator;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTraits::ChildIteratorType child_iterator;</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; O &lt;&lt; <span class="stringliteral">&quot;Printing VFG Graph&quot;</span> &lt;&lt; <span class="stringliteral">&quot;&#39;...\n&quot;</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// Print each node name and its edges</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; node_iterator I = GTraits::nodes_begin(GT);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; node_iterator E = GTraits::nodes_end(GT);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span> (; I != E; ++I)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; NodeRef *Node = *I;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;node :&quot;</span> &lt;&lt; Node &lt;&lt; <span class="stringliteral">&quot;&#39;\n&quot;</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; child_iterator EI = GTraits::child_begin(Node);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; child_iterator EE = GTraits::child_end(Node);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; EI != EE &amp;&amp; i != 64; ++EI, ++i)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;child :&quot;</span> &lt;&lt; *EI &lt;&lt; <span class="stringliteral">&quot;&#39;\n&quot;</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; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div></div><!-- fragment -->
168
168
  </div>
169
169
  </div>
170
170
  <a id="a53b3809728c30389a594076097884b82"></a>
@@ -216,8 +216,8 @@ template&lt;class GraphType &gt; </div>
216
216
  </div><div class="memdoc">
217
217
  <p>Write the graph into dot file for debugging purpose </p>
218
218
 
219
- <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00056">56</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
220
- <div class="fragment"><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; <span class="comment">// Filename of the output dot file</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::string Filename = GraphName + <span class="stringliteral">&quot;.dot&quot;</span>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;Writing &#39;&quot;</span> &lt;&lt; Filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; std::error_code ErrInfo;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">llvm::ToolOutputFile</a> F(Filename.c_str(), ErrInfo, llvm::sys::fs::F_None);</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; <span class="keywordflow">if</span> (!ErrInfo)</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="comment">// dump the ValueFlowGraph here</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; WriteGraph(F.os(), GT, simple);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; F.os().close();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; F.keep();</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</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; O &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; F.os().clear_error();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="ttc" id="namespaceSVF_html_acde6a1d496f1b655088ccbe023820277"><div class="ttname"><a href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">SVF::ToolOutputFile</a></div><div class="ttdeci">llvm::ToolOutputFile ToolOutputFile</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
219
+ <p class="definition">Definition at line <a class="el" href="GraphPrinter_8h_source.html#l00057">57</a> of file <a class="el" href="GraphPrinter_8h_source.html">GraphPrinter.h</a>.</p>
220
+ <div class="fragment"><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="comment">// Filename of the output dot file</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; std::string Filename = GraphName + <span class="stringliteral">&quot;.dot&quot;</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;Writing &#39;&quot;</span> &lt;&lt; Filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::error_code ErrInfo;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">llvm::ToolOutputFile</a> F(Filename.c_str(), ErrInfo, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (!ErrInfo)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// dump the ValueFlowGraph here</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; WriteGraph(F.os(), GT, simple);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; F.os().close();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; F.keep();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</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; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; O &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; F.os().clear_error();</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="ttc" id="namespaceSVF_html_acde6a1d496f1b655088ccbe023820277"><div class="ttname"><a href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">SVF::ToolOutputFile</a></div><div class="ttdeci">llvm::ToolOutputFile ToolOutputFile</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
221
221
  </div><!-- fragment -->
222
222
  </div>
223
223
  </div>
package/build.sh CHANGED
@@ -10,13 +10,16 @@
10
10
  ########
11
11
  SVFHOME=$(pwd)
12
12
  sysOS=$(uname -s)
13
- MacLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.0/clang+llvm-12.0.0-x86_64-apple-darwin.tar.xz"
14
- UbuntuLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.0/clang+llvm-12.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz"
13
+ MacLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-apple-darwin.tar.xz"
14
+ UbuntuLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz"
15
15
  MacZ3="https://github.com/Z3Prover/z3/releases/download/z3-4.8.8/z3-4.8.8-x64-osx-10.14.6.zip"
16
16
  UbuntuZ3="https://github.com/Z3Prover/z3/releases/download/z3-4.8.8/z3-4.8.8-x64-ubuntu-16.04.zip"
17
17
  MacCTIR="https://github.com/mbarbar/ctir/releases/download/ctir-10.c3/ctir-clang-v10.c3-macos10.15.zip"
18
18
  UbuntuCTIR="https://github.com/mbarbar/ctir/releases/download/ctir-10.c3/ctir-clang-v10.c3-ubuntu18.04.zip"
19
- LLVMHome="llvm-12.0.0.obj"
19
+
20
+ # Keep LLVM version suffix for version checking and better debugging
21
+ # keep the version consistent with LLVM_DIR in setup.sh and llvm_version in Dockerfile
22
+ LLVMHome="llvm-13.0.0.obj"
20
23
  Z3Home="z3.obj"
21
24
  CTIRHome="ctir.obj"
22
25
 
@@ -34,6 +34,7 @@
34
34
  #include <system_error>
35
35
  #include <llvm/Support/ToolOutputFile.h>
36
36
  #include <llvm/Support/FileSystem.h> // for file open flag
37
+ #include <llvm/ADT/GraphTraits.h>
37
38
 
38
39
  namespace llvm
39
40
  {
@@ -60,7 +61,7 @@ public:
60
61
  std::string Filename = GraphName + ".dot";
61
62
  O << "Writing '" << Filename << "'...";
62
63
  std::error_code ErrInfo;
63
- llvm::ToolOutputFile F(Filename.c_str(), ErrInfo, llvm::sys::fs::F_None);
64
+ llvm::ToolOutputFile F(Filename.c_str(), ErrInfo, llvm::sys::fs::OF_None);
64
65
 
65
66
  if (!ErrInfo)
66
67
  {
@@ -581,7 +581,7 @@ public:
581
581
  mutPTData.dumpPTData();
582
582
  /// dump points-to of address-taken variables
583
583
  std::error_code ErrInfo;
584
- ToolOutputFile F("svfg_pts.data", ErrInfo, llvm::sys::fs::F_None);
584
+ ToolOutputFile F("svfg_pts.data", ErrInfo, llvm::sys::fs::OF_None);
585
585
  if (!ErrInfo)
586
586
  {
587
587
  raw_fd_ostream & osm = F.os();
@@ -539,15 +539,15 @@ public:
539
539
  CPtSet cpts2;
540
540
  expandFIObjs(pts2,cpts2);
541
541
  if (containBlackHoleNode(cpts1) || containBlackHoleNode(cpts2))
542
- return llvm::MayAlias;
542
+ return llvm::AliasResult::MayAlias;
543
543
  else if(this->getAnalysisTy()==PathS_DDA && contains(cpts1,cpts2) && contains(cpts2,cpts1))
544
544
  {
545
- return llvm::MustAlias;
545
+ return llvm::AliasResult::MustAlias;
546
546
  }
547
547
  else if(overlap(cpts1,cpts2))
548
- return llvm::MayAlias;
548
+ return llvm::AliasResult::MayAlias;
549
549
  else
550
- return llvm::NoAlias;
550
+ return llvm::AliasResult::NoAlias;
551
551
  }
552
552
  /// Test blk node for cpts
553
553
  inline bool containBlackHoleNode(const CPtSet& cpts)
@@ -326,7 +326,7 @@ public:
326
326
  unsigned arg_size() const { return CB->arg_size(); }
327
327
  bool arg_empty() const { return CB->arg_empty(); }
328
328
  Value *getArgOperand(unsigned i) const { return CB->getArgOperand(i); }
329
- unsigned getNumArgOperands() const { return CB->getNumArgOperands(); }
329
+ unsigned getNumArgOperands() const { return CB->arg_size(); }
330
330
  Function *getCalledFunction() const { return CB->getCalledFunction(); }
331
331
  Value *getCalledValue() const { return CB->getCalledOperand(); }
332
332
  Function *getCaller() const { return CB->getCaller(); }
@@ -304,7 +304,7 @@ AliasResult DDAPass::alias(const Value* V1, const Value* V2)
304
304
  return _pta->alias(V1,V2);
305
305
  }
306
306
 
307
- return llvm::MayAlias;
307
+ return llvm::AliasResult::MayAlias;
308
308
  }
309
309
 
310
310
  /*!
@@ -592,24 +592,24 @@ void PointerAnalysis::validateSuccessTests(std::string fun)
592
592
  bool checkSuccessful = false;
593
593
  if (fun == aliasTestMayAlias || fun == aliasTestMayAliasMangled)
594
594
  {
595
- if (aliasRes == llvm::MayAlias || aliasRes == llvm::MustAlias)
595
+ if (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::MustAlias)
596
596
  checkSuccessful = true;
597
597
  }
598
598
  else if (fun == aliasTestNoAlias || fun == aliasTestNoAliasMangled)
599
599
  {
600
- if (aliasRes == llvm::NoAlias)
600
+ if (aliasRes == llvm::AliasResult::NoAlias)
601
601
  checkSuccessful = true;
602
602
  }
603
603
  else if (fun == aliasTestMustAlias || fun == aliasTestMustAliasMangled)
604
604
  {
605
605
  // change to must alias when our analysis support it
606
- if (aliasRes == llvm::MayAlias || aliasRes == llvm::MustAlias)
606
+ if (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::MustAlias)
607
607
  checkSuccessful = true;
608
608
  }
609
609
  else if (fun == aliasTestPartialAlias || fun == aliasTestPartialAliasMangled)
610
610
  {
611
611
  // change to partial alias when our analysis support it
612
- if (aliasRes == llvm::MayAlias)
612
+ if (aliasRes == llvm::AliasResult::MayAlias)
613
613
  checkSuccessful = true;
614
614
  }
615
615
  else
@@ -650,7 +650,7 @@ void PointerAnalysis::validateExpectedFailureTests(std::string fun)
650
650
  checkFun->getLLVMFun()->user_end(); i != e; ++i)
651
651
  if (CallInst *call = SVFUtil::dyn_cast<CallInst>(*i))
652
652
  {
653
- assert(call->getNumArgOperands() == 2
653
+ assert(call->arg_size() == 2
654
654
  && "arguments should be two pointers!!");
655
655
  Value* V1 = call->getArgOperand(0);
656
656
  Value* V2 = call->getArgOperand(1);
@@ -660,13 +660,13 @@ void PointerAnalysis::validateExpectedFailureTests(std::string fun)
660
660
  if (fun == aliasTestFailMayAlias || fun == aliasTestFailMayAliasMangled)
661
661
  {
662
662
  // change to must alias when our analysis support it
663
- if (aliasRes == llvm::NoAlias)
663
+ if (aliasRes == llvm::AliasResult::NoAlias)
664
664
  expectedFailure = true;
665
665
  }
666
666
  else if (fun == aliasTestFailNoAlias || fun == aliasTestFailNoAliasMangled)
667
667
  {
668
668
  // change to partial alias when our analysis support it
669
- if (aliasRes == llvm::MayAlias || aliasRes == llvm::PartialAlias || aliasRes == llvm::MustAlias)
669
+ if (aliasRes == llvm::AliasResult::MayAlias || aliasRes == llvm::AliasResult::PartialAlias || aliasRes == llvm::AliasResult::MustAlias)
670
670
  expectedFailure = true;
671
671
  }
672
672
  else
@@ -113,7 +113,7 @@ void BVDataPTAImpl::writeToFile(const string& filename)
113
113
  outs() << "Storing pointer analysis results to '" << filename << "'...";
114
114
 
115
115
  error_code err;
116
- ToolOutputFile F(filename.c_str(), err, llvm::sys::fs::F_None);
116
+ ToolOutputFile F(filename.c_str(), err, llvm::sys::fs::OF_None);
117
117
  if (err)
118
118
  {
119
119
  outs() << " error opening file for writing!\n";
@@ -477,7 +477,7 @@ AliasResult BVDataPTAImpl::alias(const PointsTo& p1, const PointsTo& p2)
477
477
  expandFIObjs(p2,pts2);
478
478
 
479
479
  if (containBlackHoleNode(pts1) || containBlackHoleNode(pts2) || pts1.intersects(pts2))
480
- return llvm::MayAlias;
480
+ return llvm::AliasResult::MayAlias;
481
481
  else
482
- return llvm::NoAlias;
482
+ return llvm::AliasResult::NoAlias;
483
483
  }
@@ -15,7 +15,7 @@ void ICFGPrinter::printICFGToJson(const std::string& filename)
15
15
  {
16
16
  outs() << "write symbols to '" << filename << "'...";
17
17
  std::error_code err;
18
- ToolOutputFile F(filename.c_str(), err, llvm::sys::fs::F_None);
18
+ ToolOutputFile F(filename.c_str(), err, llvm::sys::fs::OF_None);
19
19
  if (err)
20
20
  {
21
21
  outs() << " error opening file for writing!\n";
@@ -467,7 +467,7 @@ void LLVMModuleSet::dumpModulesToFile(const std::string suffix)
467
467
  OutputFilename = moduleName + suffix;
468
468
 
469
469
  std::error_code EC;
470
- raw_fd_ostream OS(OutputFilename.c_str(), EC, llvm::sys::fs::F_None);
470
+ raw_fd_ostream OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);
471
471
 
472
472
  #if (LLVM_VERSION_MAJOR >= 7)
473
473
  WriteBitcodeToFile(mod, OS);
@@ -656,37 +656,37 @@ void TypeBasedHeapCloning::validateTBHCTests(SVFModule*)
656
656
  if (fn->getName() == PointerAnalysis::aliasTestMayAlias
657
657
  || fn->getName() == PointerAnalysis::aliasTestMayAliasMangled)
658
658
  {
659
- passed = res == llvm::MayAlias || res == llvm::MustAlias;
659
+ passed = res == llvm::AliasResult::MayAlias || res == llvm::AliasResult::MustAlias;
660
660
  testName = PointerAnalysis::aliasTestMayAlias;
661
661
  }
662
662
  else if (fn->getName() == PointerAnalysis::aliasTestNoAlias
663
663
  || fn->getName() == PointerAnalysis::aliasTestNoAliasMangled)
664
664
  {
665
- passed = res == llvm::NoAlias;
665
+ passed = res == llvm::AliasResult::NoAlias;
666
666
  testName = PointerAnalysis::aliasTestNoAlias;
667
667
  }
668
668
  else if (fn->getName() == PointerAnalysis::aliasTestMustAlias
669
669
  || fn->getName() == PointerAnalysis::aliasTestMustAliasMangled)
670
670
  {
671
- passed = res == llvm::MustAlias || res == llvm::MayAlias;
671
+ passed = res == llvm::AliasResult::MustAlias || res == llvm::AliasResult::MayAlias;
672
672
  testName = PointerAnalysis::aliasTestMustAlias;
673
673
  }
674
674
  else if (fn->getName() == PointerAnalysis::aliasTestPartialAlias
675
675
  || fn->getName() == PointerAnalysis::aliasTestPartialAliasMangled)
676
676
  {
677
- passed = res == llvm::MayAlias || res == llvm::PartialAlias;
677
+ passed = res == llvm::AliasResult::MayAlias || res == llvm::AliasResult::PartialAlias;
678
678
  testName = PointerAnalysis::aliasTestPartialAlias;
679
679
  }
680
680
  else if (fn->getName() == PointerAnalysis::aliasTestFailMayAlias
681
681
  || fn->getName() == PointerAnalysis::aliasTestFailMayAliasMangled)
682
682
  {
683
- passed = res != llvm::MayAlias && res != llvm::MustAlias && res != llvm::PartialAlias;
683
+ passed = res != llvm::AliasResult::MayAlias && res != llvm::AliasResult::MustAlias && res != llvm::AliasResult::PartialAlias;
684
684
  testName = PointerAnalysis::aliasTestFailMayAlias;
685
685
  }
686
686
  else if (fn->getName() == PointerAnalysis::aliasTestFailNoAlias
687
687
  || fn->getName() == PointerAnalysis::aliasTestFailNoAliasMangled)
688
688
  {
689
- passed = res != llvm::NoAlias;
689
+ passed = res != llvm::AliasResult::NoAlias;
690
690
  testName = PointerAnalysis::aliasTestFailNoAlias;
691
691
  }
692
692
 
@@ -899,10 +899,10 @@ void FlowSensitive::countAliases(Set<std::pair<NodeID, NodeID>> cmp, unsigned *m
899
899
 
900
900
  switch (alias(p, q))
901
901
  {
902
- case llvm::NoAlias:
902
+ case llvm::AliasResult::NoAlias:
903
903
  ++(*noAliases);
904
904
  break;
905
- case llvm::MayAlias:
905
+ case llvm::AliasResult::MayAlias:
906
906
  ++(*mayAliases);
907
907
  break;
908
908
  default:
@@ -682,10 +682,10 @@ void FlowSensitiveTBHC::countAliases(Set<std::pair<NodeID, NodeID>> cmp, unsigne
682
682
 
683
683
  switch (alias(aPts, bPts))
684
684
  {
685
- case llvm::NoAlias:
685
+ case llvm::AliasResult::NoAlias:
686
686
  ++(*noAliases);
687
687
  break;
688
- case llvm::MayAlias:
688
+ case llvm::AliasResult::MayAlias:
689
689
  ++(*mayAliases);
690
690
  break;
691
691
  default:
@@ -202,7 +202,7 @@ void WPAPass::PrintAliasPairs(PointerAnalysis* pta)
202
202
  AliasResult WPAPass::alias(const Value* V1, const Value* V2)
203
203
  {
204
204
 
205
- AliasResult result = llvm::MayAlias;
205
+ AliasResult result = llvm::AliasResult::MayAlias;
206
206
 
207
207
  PAG* pag = _pta->getPAG();
208
208
 
@@ -217,25 +217,25 @@ AliasResult WPAPass::alias(const Value* V1, const Value* V2)
217
217
  if (Options::AliasRule.getBits() == 0 || Options::AliasRule.isSet(Veto))
218
218
  {
219
219
  /// Return NoAlias if any PTA gives NoAlias result
220
- result = llvm::MayAlias;
220
+ result = llvm::AliasResult::MayAlias;
221
221
 
222
222
  for (PTAVector::const_iterator it = ptaVector.begin(), eit = ptaVector.end();
223
223
  it != eit; ++it)
224
224
  {
225
- if ((*it)->alias(V1, V2) == llvm::NoAlias)
226
- result = llvm::NoAlias;
225
+ if ((*it)->alias(V1, V2) == llvm::AliasResult::NoAlias)
226
+ result = llvm::AliasResult::NoAlias;
227
227
  }
228
228
  }
229
229
  else if (Options::AliasRule.isSet(Conservative))
230
230
  {
231
231
  /// Return MayAlias if any PTA gives MayAlias result
232
- result = llvm::NoAlias;
232
+ result = llvm::AliasResult::NoAlias;
233
233
 
234
234
  for (PTAVector::const_iterator it = ptaVector.begin(), eit = ptaVector.end();
235
235
  it != eit; ++it)
236
236
  {
237
- if ((*it)->alias(V1, V2) == llvm::MayAlias)
238
- result = llvm::MayAlias;
237
+ if ((*it)->alias(V1, V2) == llvm::AliasResult::MayAlias)
238
+ result = llvm::AliasResult::MayAlias;
239
239
  }
240
240
  }
241
241
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.295",
3
+ "version": "1.0.296",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/setup.sh CHANGED
@@ -18,7 +18,7 @@ function set_llvm {
18
18
  [ -n "$LLVM_DIR" ] && return 0
19
19
 
20
20
  # use local download directory
21
- LLVM_DIR="$SVF_DIR/llvm-12.0.0.obj"
21
+ LLVM_DIR="$SVF_DIR/llvm-13.0.0.obj"
22
22
  [ -d "$LLVM_DIR" ] && return 0
23
23
 
24
24
  # ... otherwise don't set LLVM_DIR