svf-tools 1.0.796 → 1.0.798
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/AccessPath_8cpp_source.html +157 -153
- package/SVF-doxygen/html/AccessPath_8h_source.html +6 -6
- package/SVF-doxygen/html/SVFStatements_8h_source.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1AccessPath.html +151 -141
- package/SVF-doxygen/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/globals_func_t.html +1 -1
- package/SVF-doxygen/html/globals_t.html +1 -1
- package/SVF-doxygen/html/search/all_13.js +1 -1
- package/SVF-doxygen/html/search/functions_13.js +1 -1
- package/SVF-doxygen/html/svf-ex_8cpp.html +109 -106
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +108 -106
- package/package.json +1 -1
- package/svf/lib/MemoryModel/AccessPath.cpp +23 -2
- package/svf-llvm/tools/Example/svf-ex.cpp +7 -4
|
@@ -197,115 +197,119 @@ $(function() {
|
|
|
197
197
|
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
|
|
198
198
|
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
|
|
199
199
|
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div>
|
|
200
|
-
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#
|
|
200
|
+
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96"> 141</a></span> <span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode)</div>
|
|
201
201
|
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div>
|
|
202
|
-
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="
|
|
203
|
-
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="
|
|
204
|
-
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> 
|
|
205
|
-
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> 
|
|
206
|
-
<div class="line"><a name="
|
|
207
|
-
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> 
|
|
208
|
-
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> 
|
|
209
|
-
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="
|
|
210
|
-
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> 
|
|
211
|
-
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> 
|
|
212
|
-
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> 
|
|
213
|
-
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="
|
|
214
|
-
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <
|
|
215
|
-
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> 
|
|
216
|
-
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> 
|
|
217
|
-
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> 
|
|
218
|
-
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> 
|
|
219
|
-
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> 
|
|
220
|
-
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> 
|
|
221
|
-
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> 
|
|
222
|
-
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> 
|
|
223
|
-
<div class="line"><a name="
|
|
224
|
-
<div class="line"><a name="
|
|
225
|
-
<div class="line"><a name="l00170"></a><span class="lineno"
|
|
226
|
-
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> 
|
|
227
|
-
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="
|
|
228
|
-
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  </div>
|
|
229
|
-
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="
|
|
230
|
-
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <
|
|
231
|
-
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> 
|
|
232
|
-
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> 
|
|
233
|
-
<div class="line"><a name="
|
|
234
|
-
<div class="line"><a name="
|
|
235
|
-
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> 
|
|
236
|
-
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> 
|
|
237
|
-
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> 
|
|
238
|
-
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> 
|
|
239
|
-
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> 
|
|
240
|
-
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> 
|
|
241
|
-
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <
|
|
242
|
-
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> 
|
|
243
|
-
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> 
|
|
244
|
-
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> 
|
|
245
|
-
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> 
|
|
246
|
-
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> 
|
|
247
|
-
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> 
|
|
248
|
-
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> 
|
|
249
|
-
<div class="line"><a name="
|
|
250
|
-
<div class="line"><a name="
|
|
251
|
-
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> 
|
|
252
|
-
<div class="line"><a name="
|
|
253
|
-
<div class="line"><a name="
|
|
254
|
-
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> 
|
|
255
|
-
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> 
|
|
256
|
-
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> 
|
|
257
|
-
<div class="line"><a name="l00207"></a><span class="lineno"
|
|
258
|
-
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> 
|
|
259
|
-
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  </div>
|
|
260
|
-
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> 
|
|
261
|
-
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> 
|
|
262
|
-
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> 
|
|
263
|
-
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> 
|
|
264
|
-
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> 
|
|
265
|
-
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> 
|
|
266
|
-
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> 
|
|
267
|
-
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> 
|
|
268
|
-
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> 
|
|
202
|
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const ICFGNode*></a> worklist;</div>
|
|
203
|
+
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const ICFGNode*></a> visited;</div>
|
|
204
|
+
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(iNode);</div>
|
|
205
|
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  </div>
|
|
206
|
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
|
|
207
|
+
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  {</div>
|
|
208
|
+
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
|
|
209
|
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = vNode-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div>
|
|
210
|
+
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  vNode-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div>
|
|
211
|
+
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div>
|
|
212
|
+
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div>
|
|
213
|
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div>
|
|
214
|
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div>
|
|
215
|
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div>
|
|
216
|
+
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  visited.insert(succNode);</div>
|
|
217
|
+
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(succNode);</div>
|
|
218
|
+
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div>
|
|
219
|
+
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div>
|
|
220
|
+
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div>
|
|
221
|
+
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
|
|
222
|
+
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
|
|
223
|
+
<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b"> 168</a></span> <span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val)</div>
|
|
224
|
+
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> {</div>
|
|
225
|
+
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div>
|
|
226
|
+
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  </div>
|
|
227
|
+
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(val));</div>
|
|
228
|
+
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-><a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div>
|
|
229
|
+
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const VFGNode*></a> worklist;</div>
|
|
230
|
+
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const VFGNode*></a> visited;</div>
|
|
231
|
+
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(vNode);</div>
|
|
232
|
+
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div>
|
|
233
|
+
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
|
|
234
|
+
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div>
|
|
235
|
+
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
|
|
236
|
+
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div>
|
|
237
|
+
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  vNode-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div>
|
|
238
|
+
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div>
|
|
239
|
+
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div>
|
|
240
|
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div>
|
|
241
|
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div>
|
|
242
|
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div>
|
|
243
|
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  visited.insert(succNode);</div>
|
|
244
|
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(succNode);</div>
|
|
245
|
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div>
|
|
246
|
+
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  }</div>
|
|
247
|
+
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div>
|
|
248
|
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div>
|
|
249
|
+
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const VFGNode*>::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div>
|
|
250
|
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div>
|
|
251
|
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="comment">// const VFGNode* node = *it;</span></div>
|
|
252
|
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"></span> }</div>
|
|
253
|
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
|
|
254
|
+
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  </div>
|
|
255
|
+
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 205</a></span> <span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div>
|
|
256
|
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div>
|
|
257
|
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  </div>
|
|
258
|
+
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  std::vector<std::string> moduleNameVec;</div>
|
|
259
|
+
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  moduleNameVec = <a class="code" href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a>(</div>
|
|
260
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  argc, argv, <span class="stringliteral">"Whole Program Points-to Analysis"</span>, <span class="stringliteral">"[options] <input-bitcode...>"</span></div>
|
|
261
|
+
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  );</div>
|
|
262
|
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div>
|
|
263
|
+
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (Options::WriteAnder() == <span class="stringliteral">"ir_annotator"</span>)</div>
|
|
264
|
+
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div>
|
|
265
|
+
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  LLVMModuleSet::preProcessBCs(moduleNameVec);</div>
|
|
266
|
+
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  }</div>
|
|
267
|
+
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  </div>
|
|
268
|
+
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::buildSVFModule(moduleNameVec);</div>
|
|
269
269
|
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  </div>
|
|
270
|
-
<div class="line"><a name="
|
|
271
|
-
<div class="line"><a name="
|
|
272
|
-
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> 
|
|
273
|
-
<div class="line"><a name="
|
|
274
|
-
<div class="line"><a name="
|
|
275
|
-
<div class="line"><a name="
|
|
276
|
-
<div class="line"><a name="
|
|
277
|
-
<div class="line"><a name="
|
|
278
|
-
<div class="line"><a name="
|
|
279
|
-
<div class="line"><a name="
|
|
280
|
-
<div class="line"><a name="
|
|
281
|
-
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> 
|
|
282
|
-
<div class="line"><a name="
|
|
283
|
-
<div class="line"><a name="
|
|
284
|
-
<div class="line"><a name="
|
|
285
|
-
<div class="line"><a name="
|
|
286
|
-
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> 
|
|
287
|
-
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> 
|
|
288
|
-
<div class="line"><a name="
|
|
289
|
-
<div class="line"><a name="
|
|
290
|
-
<div class="line"><a name="
|
|
291
|
-
<div class="line"><a name="
|
|
292
|
-
<div class="line"><a name="
|
|
293
|
-
<div class="line"><a name="
|
|
294
|
-
<div class="line"><a name="
|
|
295
|
-
<div class="line"><a name="
|
|
296
|
-
<div class="line"><a name="
|
|
297
|
-
<div class="line"><a name="
|
|
298
|
-
<div class="line"><a name="
|
|
270
|
+
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder(svfModule);</div>
|
|
271
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5ecf1deb5646ccb46b0b3101417f4689">build</a>();</div>
|
|
272
|
+
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  </div>
|
|
273
|
+
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div>
|
|
274
|
+
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  </div>
|
|
275
|
+
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div>
|
|
276
|
+
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  </div>
|
|
277
|
+
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div>
|
|
278
|
+
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  </div>
|
|
279
|
+
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>();</div>
|
|
280
|
+
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  icfg-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg"</span>);</div>
|
|
281
|
+
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  </div>
|
|
282
|
+
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div>
|
|
283
|
+
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  </div>
|
|
284
|
+
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div>
|
|
285
|
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">//SVFG* svfg =</span></div>
|
|
286
|
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div>
|
|
287
|
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  </div>
|
|
288
|
+
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  </div>
|
|
289
|
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  </div>
|
|
290
|
+
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it : *icfg)</div>
|
|
291
|
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  {</div>
|
|
292
|
+
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = it.second;</div>
|
|
293
|
+
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96">traverseOnICFG</a>(icfg, node);</div>
|
|
294
|
+
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div>
|
|
295
|
+
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  </div>
|
|
296
|
+
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// clean up memory</span></div>
|
|
297
|
+
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">delete</span> vfg;</div>
|
|
298
|
+
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  AndersenWaveDiff::releaseAndersenWaveDiff();</div>
|
|
299
|
+
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  SVFIR::releaseSVFIR();</div>
|
|
299
300
|
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  </div>
|
|
300
|
-
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> 
|
|
301
|
-
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <
|
|
302
|
-
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> 
|
|
303
|
-
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> 
|
|
301
|
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  LLVMModuleSet::getLLVMModuleSet()->dumpModulesToFile(<span class="stringliteral">".svf.bc"</span>);</div>
|
|
302
|
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div>
|
|
303
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  </div>
|
|
304
|
+
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  llvm::llvm_shutdown();</div>
|
|
305
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> 0;</div>
|
|
306
|
+
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
|
|
307
|
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  </div>
|
|
304
308
|
</div><!-- fragment --></div><!-- contents -->
|
|
305
309
|
<div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a0df409a67428e528321869d201f2a474"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(const Data &data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00165">WorkList.h:165</a></div></div>
|
|
306
310
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_adb82778157e0f5e7a2ea4d803bcd07ad"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#adb82778157e0f5e7a2ea4d803bcd07ad">SVF::SVFIR2ItvExeState::translateCall</a></div><div class="ttdeci">void translateCall(const CallPE *callPE)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00946">SVFIR2ItvExeState.cpp:946</a></div></div>
|
|
307
311
|
<div class="ttc" id="aclassSVF_1_1CopyStmt_html"><div class="ttname"><a href="classSVF_1_1CopyStmt.html">SVF::CopyStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00350">SVFStatements.h:350</a></div></div>
|
|
308
|
-
<div class="ttc" id="asvf-ex_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#
|
|
312
|
+
<div class="ttc" id="asvf-ex_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00205">svf-ex.cpp:205</a></div></div>
|
|
309
313
|
<div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00200">WorkList.h:200</a></div></div>
|
|
310
314
|
<div class="ttc" id="aclassSVF_1_1SVFG_html"><div class="ttname"><a href="classSVF_1_1SVFG.html">SVF::SVFG</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00065">SVFG.h:65</a></div></div>
|
|
311
315
|
<div class="ttc" id="aclassSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
|
|
@@ -327,6 +331,7 @@ $(function() {
|
|
|
327
331
|
<div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00174">PointerAnalysis.h:174</a></div></div>
|
|
328
332
|
<div class="ttc" id="aclassSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00058">PointerAnalysis.h:58</a></div></div>
|
|
329
333
|
<div class="ttc" id="aclassSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00604">SVFStatements.h:604</a></div></div>
|
|
334
|
+
<div class="ttc" id="asvf-ex_8cpp_html_a19f3fe331a1e7050a513672a91743b96"><div class="ttname"><a href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96">traverseOnICFG</a></div><div class="ttdeci">void traverseOnICFG(ICFG *icfg, const ICFGNode *iNode)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00141">svf-ex.cpp:141</a></div></div>
|
|
330
335
|
<div class="ttc" id="aclassSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00870">SVFStatements.h:870</a></div></div>
|
|
331
336
|
<div class="ttc" id="aclassSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
|
|
332
337
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_aac5cc8767eb750bf121f1897788dee24"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#aac5cc8767eb750bf121f1897788dee24">SVF::SVFIR2ItvExeState::translateCmp</a></div><div class="ttdeci">void translateCmp(const CmpStmt *cmp)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00570">SVFIR2ItvExeState.cpp:570</a></div></div>
|
|
@@ -339,9 +344,8 @@ $(function() {
|
|
|
339
344
|
<div class="ttc" id="aCommandLine_8h_html"><div class="ttname"><a href="CommandLine_8h.html">CommandLine.h</a></div></div>
|
|
340
345
|
<div class="ttc" id="aclassSVF_1_1CallPE_html"><div class="ttname"><a href="classSVF_1_1CallPE.html">SVF::CallPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00544">SVFStatements.h:544</a></div></div>
|
|
341
346
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a8f2a564370d9b9fb05e139c45eeaba68"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a8f2a564370d9b9fb05e139c45eeaba68">SVF::SVFIR2ItvExeState::translateLoad</a></div><div class="ttdeci">void translateLoad(const LoadStmt *load)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00754">SVFIR2ItvExeState.cpp:754</a></div></div>
|
|
342
|
-
<div class="ttc" id="asvf-ex_8cpp_html_ad58149e5445ad22ce478339e103ab42b"><div class="ttname"><a href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a></div><div class="ttdeci">void traverseOnVFG(const SVFG *vfg, SVFValue *val)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#
|
|
347
|
+
<div class="ttc" id="asvf-ex_8cpp_html_ad58149e5445ad22ce478339e103ab42b"><div class="ttname"><a href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a></div><div class="ttdeci">void traverseOnVFG(const SVFG *vfg, SVFValue *val)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00168">svf-ex.cpp:168</a></div></div>
|
|
343
348
|
<div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
344
|
-
<div class="ttc" id="asvf-ex_8cpp_html_addc5529c5b161d0c61eba4944428455e"><div class="ttname"><a href="svf-ex_8cpp.html#addc5529c5b161d0c61eba4944428455e">traverseOnICFG</a></div><div class="ttdeci">void traverseOnICFG(ICFG *icfg, const SVFInstruction *svfInst)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00141">svf-ex.cpp:141</a></div></div>
|
|
345
349
|
<div class="ttc" id="aclassOptionBase_html_a4fb6c6e4a1754d702c6c1730f54457e5"><div class="ttname"><a href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a></div><div class="ttdeci">static std::vector< std::string > parseOptions(int argc, char *argv[], std::string description, std::string callFormat)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00075">CommandLine.h:75</a></div></div>
|
|
346
350
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html">SVF::SVFIR2ItvExeState</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00041">SVFIR2ItvExeState.h:41</a></div></div>
|
|
347
351
|
<div class="ttc" id="aclassSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00956">SVFStatements.h:956</a></div></div>
|
|
@@ -352,7 +356,6 @@ $(function() {
|
|
|
352
356
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a449ee8f244120866037c7f6d2ee5fc13"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a449ee8f244120866037c7f6d2ee5fc13">SVF::SVFIR2ItvExeState::translateBinary</a></div><div class="ttdeci">void translateBinary(const BinaryOPStmt *binary)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00508">SVFIR2ItvExeState.cpp:508</a></div></div>
|
|
353
357
|
<div class="ttc" id="aclassSVF_1_1GenericNode_html_a19a3366fd8a58290d0c740c46c3dcb3d"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">SVF::GenericNode::OutEdgeEnd</a></div><div class="ttdeci">iterator OutEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00221">GenericGraph.h:221</a></div></div>
|
|
354
358
|
<div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class.</div></div>
|
|
355
|
-
<div class="ttc" id="aclassSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00088">ICFG.h:88</a></div></div>
|
|
356
359
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html">SVF::SVFIRBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00046">SVFIRBuilder.h:46</a></div></div>
|
|
357
360
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_aed2e41879bae8389c49e69356b7aaac5"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#aed2e41879bae8389c49e69356b7aaac5">SVF::SVFIR2ItvExeState::translateStore</a></div><div class="ttdeci">void translateStore(const StoreStmt *store)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00800">SVFIR2ItvExeState.cpp:800</a></div></div>
|
|
358
361
|
<div class="ttc" id="anamespaceSVF_html_a61c01e2e687ab3a001fb806737583943"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a></div><div class="ttdeci">AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00604">SVFType.h:604</a></div></div>
|
|
@@ -387,7 +390,6 @@ $(function() {
|
|
|
387
390
|
<div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
|
|
388
391
|
<div class="ttc" id="aclassSVF_1_1ICFG_html_a999956500bbd605326531480546db9ba"><div class="ttname"><a href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">SVF::ICFG::dump</a></div><div class="ttdeci">void dump(const std::string &file, bool simple=false)</div><div class="ttdoc">Dump graph into dot file.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00441">ICFG.cpp:441</a></div></div>
|
|
389
392
|
<div class="ttc" id="aclassSVF_1_1ICFGNode_html_ac16c5a3227a44d3b9f7c3209156d9df2"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">SVF::ICFGNode::const_iterator</a></div><div class="ttdeci">ICFGEdge::ICFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00073">ICFGNode.h:73</a></div></div>
|
|
390
|
-
<div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00620">SVFValue.h:620</a></div></div>
|
|
391
393
|
<div class="ttc" id="aclassSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>
|
|
392
394
|
<div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00201">PointerAnalysis.h:201</a></div></div>
|
|
393
395
|
<div class="ttc" id="aclassSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00101">GenericGraph.h:101</a></div></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.798",
|
|
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": {
|
|
@@ -101,26 +101,47 @@ APOffset AccessPath::computeConstantByteOffset() const
|
|
|
101
101
|
APOffset totalConstOffset = 0;
|
|
102
102
|
for(int i = offsetVarAndGepTypePairs.size() - 1; i >= 0; i--)
|
|
103
103
|
{
|
|
104
|
+
/// For example, there is struct DEST{int a, char b[10], int c[5]}
|
|
105
|
+
/// (1) %c = getelementptr inbounds %struct.DEST, %struct.DEST* %arr, i32 0, i32 2
|
|
106
|
+
// (2) %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %b, i64 0, i64 8
|
|
104
107
|
const SVFValue* value = offsetVarAndGepTypePairs[i].first->getValue();
|
|
108
|
+
/// for (1) offsetVarAndGepTypePairs.size() = 2
|
|
109
|
+
/// i = 0, type: %struct.DEST*, PtrType, op = 0
|
|
110
|
+
/// i = 1, type: %struct.DEST, StructType, op = 2
|
|
111
|
+
/// for (2) offsetVarAndGepTypePairs.size() = 2
|
|
112
|
+
/// i = 0, type: [10 x i8]*, PtrType, op = 0
|
|
113
|
+
/// i = 1, type: [10 x i8], ArrType, op = 8
|
|
105
114
|
const SVFType* type = offsetVarAndGepTypePairs[i].second;
|
|
106
115
|
const SVFType* type2 = type;
|
|
107
116
|
if (const SVFArrayType* arrType = SVFUtil::dyn_cast<SVFArrayType>(type))
|
|
108
117
|
{
|
|
118
|
+
/// for (2) i = 1, arrType: [10 x i8], type2 = i8
|
|
109
119
|
type2 = arrType->getTypeOfElement();
|
|
110
120
|
}
|
|
111
121
|
else if (const SVFPointerType* ptrType = SVFUtil::dyn_cast<SVFPointerType>(type))
|
|
112
122
|
{
|
|
123
|
+
/// for (1) i = 0, ptrType: %struct.DEST*, type2: %struct.DEST
|
|
124
|
+
/// for (2) i = 0, ptrType: [10 x i8]*, type2 = [10 x i8]
|
|
113
125
|
type2 = ptrType->getPtrElementType();
|
|
114
126
|
}
|
|
115
127
|
|
|
116
128
|
const SVFConstantInt* op = SVFUtil::dyn_cast<SVFConstantInt>(value);
|
|
117
129
|
if (const SVFStructType* structType = SVFUtil::dyn_cast<SVFStructType>(type))
|
|
118
130
|
{
|
|
119
|
-
|
|
120
|
-
|
|
131
|
+
/// for (1) structType: %struct.DEST
|
|
132
|
+
/// structField = 0, type2: int
|
|
133
|
+
/// structField = 1, type2: char[10]
|
|
134
|
+
/// structField = 2, type2: int[5]
|
|
135
|
+
for (u32_t structField = 0; structField < (u32_t)op->getSExtValue(); ++structField)
|
|
136
|
+
{
|
|
137
|
+
type2 = structType->getTypeInfo()->getOriginalElemType(structField);
|
|
138
|
+
totalConstOffset += type2->getLLVMByteSize();
|
|
139
|
+
}
|
|
121
140
|
}
|
|
122
141
|
else
|
|
123
142
|
{
|
|
143
|
+
/// for (2) i = 0, op: 0, type: [10 x i8]*(Ptr), type2: [10 x i8](Arr)
|
|
144
|
+
/// i = 1, op: 8, type: [10 x i8](Arr), type2: i8
|
|
124
145
|
totalConstOffset += op->getSExtValue() * type2->getLLVMByteSize();
|
|
125
146
|
}
|
|
126
147
|
}
|
|
@@ -138,9 +138,8 @@ void traverseOnSVFStmt(const ICFGNode* node)
|
|
|
138
138
|
/*!
|
|
139
139
|
* An example to query/collect all successor nodes from a ICFGNode (iNode) along control-flow graph (ICFG)
|
|
140
140
|
*/
|
|
141
|
-
void traverseOnICFG(ICFG* icfg, const
|
|
141
|
+
void traverseOnICFG(ICFG* icfg, const ICFGNode* iNode)
|
|
142
142
|
{
|
|
143
|
-
ICFGNode* iNode = icfg->getICFGNode(svfInst);
|
|
144
143
|
FIFOWorkList<const ICFGNode*> worklist;
|
|
145
144
|
Set<const ICFGNode*> visited;
|
|
146
145
|
worklist.push(iNode);
|
|
@@ -154,7 +153,6 @@ void traverseOnICFG(ICFG* icfg, const SVFInstruction* svfInst)
|
|
|
154
153
|
{
|
|
155
154
|
ICFGEdge* edge = *it;
|
|
156
155
|
ICFGNode* succNode = edge->getDstNode();
|
|
157
|
-
traverseOnSVFStmt(succNode);
|
|
158
156
|
if (visited.find(succNode) == visited.end())
|
|
159
157
|
{
|
|
160
158
|
visited.insert(succNode);
|
|
@@ -250,8 +248,13 @@ int main(int argc, char ** argv)
|
|
|
250
248
|
/// Collect uses of an LLVM Value
|
|
251
249
|
/// traverseOnVFG(svfg, value);
|
|
252
250
|
|
|
251
|
+
|
|
253
252
|
/// Collect all successor nodes on ICFG
|
|
254
|
-
|
|
253
|
+
for (const auto &it : *icfg)
|
|
254
|
+
{
|
|
255
|
+
const ICFGNode* node = it.second;
|
|
256
|
+
traverseOnICFG(icfg, node);
|
|
257
|
+
}
|
|
255
258
|
|
|
256
259
|
// clean up memory
|
|
257
260
|
delete vfg;
|