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.
- package/CMakeLists.txt +1 -1
- package/Dockerfile +1 -1
- package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/GraphPrinter_8h.html +1 -0
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
- package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +7 -7
- package/build.sh +6 -3
- package/include/Graphs/GraphPrinter.h +2 -1
- package/include/MemoryModel/MutablePointsToDS.h +1 -1
- package/include/MemoryModel/PointerAnalysisImpl.h +4 -4
- package/include/Util/BasicTypes.h +1 -1
- package/lib/DDA/DDAPass.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +7 -7
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +3 -3
- package/lib/SVF-FE/Graph2Json.cpp +1 -1
- package/lib/SVF-FE/LLVMModule.cpp +1 -1
- package/lib/Util/TypeBasedHeapCloning.cpp +6 -6
- package/lib/WPA/FlowSensitive.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +2 -2
- package/lib/WPA/WPAPass.cpp +7 -7
- package/package.json +1 -1
- 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> {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <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> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1PAG.html#ae3cdf8c2139ba043595b420624f25427">hasValueNode</a>(V1) && pag-><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>  {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <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>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  result = llvm::MayAlias;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">for</span> (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>  it != eit; ++it)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> ((*it)->alias(V1, V2) == llvm::NoAlias)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  result = llvm::NoAlias;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="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>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  result = llvm::NoAlias;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <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>  it != eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">if</span> ((*it)->alias(V1, V2) == llvm::MayAlias)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  result = llvm::MayAlias;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">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> }</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< WPAPass::AliasCheckRule > 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> {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <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> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag = <a class="code" href="classSVF_1_1WPAPass.html#a0b57d86a5305aefcd6c8ae4e328d3ab0">_pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1PAG.html#ae3cdf8c2139ba043595b420624f25427">hasValueNode</a>(V1) && pag-><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>  {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <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>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  result = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">for</span> (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>  it != eit; ++it)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> ((*it)->alias(V1, V2) == llvm::AliasResult::NoAlias)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="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>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  result = llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <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>  it != eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">if</span> ((*it)->alias(V1, V2) == llvm::AliasResult::MayAlias)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  result = llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">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> }</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< WPAPass::AliasCheckRule > 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#
|
|
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 & Destructor Documentation</h2>
|
|
94
94
|
<a id="a13b2efcc3e5967f60a27e107683cd448"></a>
|
|
95
95
|
<h2 class="memtitle"><span class="permalink"><a href="#a13b2efcc3e5967f60a27e107683cd448">◆ </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#
|
|
118
|
-
<div class="fragment"><div class="line"><a name="
|
|
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>  {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div></div><!-- fragment -->
|
|
119
119
|
</div>
|
|
120
120
|
</div>
|
|
121
121
|
<h2 class="groupheader">Member Function Documentation</h2>
|
|
@@ -163,8 +163,8 @@ template<class GraphType > </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#
|
|
167
|
-
<div class="fragment"><div class="line"><a name="
|
|
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>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">typedef</span> llvm::GraphTraits<GraphType> GTraits;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <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>  <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>  <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> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  O << <span class="stringliteral">"Printing VFG Graph"</span> << <span class="stringliteral">"'...\n"</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// Print each node name and its edges</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  node_iterator I = GTraits::nodes_begin(GT);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  node_iterator E = GTraits::nodes_end(GT);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span> (; I != E; ++I)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  NodeRef *Node = *I;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  O << <span class="stringliteral">"node :"</span> << Node << <span class="stringliteral">"'\n"</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  child_iterator EI = GTraits::child_begin(Node);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  child_iterator EE = GTraits::child_end(Node);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; EI != EE && i != 64; ++EI, ++i)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  O << <span class="stringliteral">"child :"</span> << *EI << <span class="stringliteral">"'\n"</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div></div><!-- fragment -->
|
|
168
168
|
</div>
|
|
169
169
|
</div>
|
|
170
170
|
<a id="a53b3809728c30389a594076097884b82"></a>
|
|
@@ -216,8 +216,8 @@ template<class GraphType > </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#
|
|
220
|
-
<div class="fragment"><div class="line"><a name="
|
|
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>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// Filename of the output dot file</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::string Filename = GraphName + <span class="stringliteral">".dot"</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  O << <span class="stringliteral">"Writing '"</span> << Filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  std::error_code ErrInfo;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <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> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">if</span> (!ErrInfo)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// dump the ValueFlowGraph here</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  WriteGraph(F.os(), GT, simple);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  F.os().close();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  O << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  F.keep();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  O << <span class="stringliteral">" error opening file for writing!\n"</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  F.os().clear_error();</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</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-
|
|
14
|
-
UbuntuLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-
|
|
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
|
-
|
|
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::
|
|
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::
|
|
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->
|
|
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(); }
|
package/lib/DDA/DDAPass.cpp
CHANGED
|
@@ -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->
|
|
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::
|
|
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::
|
|
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::
|
|
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:
|
package/lib/WPA/WPAPass.cpp
CHANGED
|
@@ -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.
|
|
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