svf-tools 1.0.894 → 1.0.895
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.
|
@@ -266,9 +266,9 @@ $(function() {
|
|
|
266
266
|
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div>
|
|
267
267
|
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(curValue))</div>
|
|
268
268
|
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  insertInferSite(gepInst);</div>
|
|
269
|
-
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: curValue->
|
|
269
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: curValue->users())</div>
|
|
270
270
|
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div>
|
|
271
|
-
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(it
|
|
271
|
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(it))</div>
|
|
272
272
|
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div>
|
|
273
273
|
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">/*</span></div>
|
|
274
274
|
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * infer based on load, e.g.,</span></div>
|
|
@@ -278,7 +278,7 @@ $(function() {
|
|
|
278
278
|
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> */</span></div>
|
|
279
279
|
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  insertInferSite(loadInst);</div>
|
|
280
280
|
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
|
|
281
|
-
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(it
|
|
281
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(it))</div>
|
|
282
282
|
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div>
|
|
283
283
|
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == curValue)</div>
|
|
284
284
|
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div>
|
|
@@ -292,7 +292,7 @@ $(function() {
|
|
|
292
292
|
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div>
|
|
293
293
|
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">else</span></div>
|
|
294
294
|
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div>
|
|
295
|
-
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &nit: storeInst->getPointerOperand()->
|
|
295
|
+
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &nit: storeInst->getPointerOperand()->users())</div>
|
|
296
296
|
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div>
|
|
297
297
|
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">/*</span></div>
|
|
298
298
|
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> * propagate across store (value operand) and load</span></div>
|
|
@@ -301,8 +301,8 @@ $(function() {
|
|
|
301
301
|
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> %q = load i8*, i8** %p</span></div>
|
|
302
302
|
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment"> ..infer based on %q..</span></div>
|
|
303
303
|
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment"> */</span></div>
|
|
304
|
-
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(nit
|
|
305
|
-
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  insertInferSitesOrPushWorklist(nit
|
|
304
|
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(nit))</div>
|
|
305
|
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  insertInferSitesOrPushWorklist(nit);</div>
|
|
306
306
|
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div>
|
|
307
307
|
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">/*</span></div>
|
|
308
308
|
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment"> * infer based on store (value operand) <- gep (result element)</span></div>
|
|
@@ -322,18 +322,18 @@ $(function() {
|
|
|
322
322
|
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *gepBase = gepInst->getPointerOperand();</div>
|
|
323
323
|
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<LoadInst>(gepBase)) <span class="keywordflow">continue</span>;</div>
|
|
324
324
|
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *load = SVFUtil::dyn_cast<LoadInst>(gepBase);</div>
|
|
325
|
-
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse: load->getPointerOperand()->
|
|
325
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse: load->getPointerOperand()->users())</div>
|
|
326
326
|
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div>
|
|
327
|
-
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (loadUse
|
|
327
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (loadUse == load || !SVFUtil::isa<LoadInst>(loadUse))</div>
|
|
328
328
|
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">continue</span>;</div>
|
|
329
|
-
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &gepUse: loadUse
|
|
329
|
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &gepUse: loadUse->users())</div>
|
|
330
330
|
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div>
|
|
331
|
-
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GetElementPtrInst>(gepUse
|
|
332
|
-
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse2: gepUse
|
|
331
|
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GetElementPtrInst>(gepUse)) <span class="keywordflow">continue</span>;</div>
|
|
332
|
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse2: gepUse->users())</div>
|
|
333
333
|
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div>
|
|
334
|
-
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(loadUse2
|
|
334
|
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(loadUse2))</div>
|
|
335
335
|
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  {</div>
|
|
336
|
-
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  insertInferSitesOrPushWorklist(loadUse2
|
|
336
|
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  insertInferSitesOrPushWorklist(loadUse2);</div>
|
|
337
337
|
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div>
|
|
338
338
|
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div>
|
|
339
339
|
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div>
|
|
@@ -343,7 +343,7 @@ $(function() {
|
|
|
343
343
|
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div>
|
|
344
344
|
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  </div>
|
|
345
345
|
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div>
|
|
346
|
-
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it
|
|
346
|
+
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it))</div>
|
|
347
347
|
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  {</div>
|
|
348
348
|
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">/*</span></div>
|
|
349
349
|
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"> * infer based on gep (pointer operand)</span></div>
|
|
@@ -354,17 +354,17 @@ $(function() {
|
|
|
354
354
|
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (gepInst->getPointerOperand() == curValue)</div>
|
|
355
355
|
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  insertInferSite(gepInst);</div>
|
|
356
356
|
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div>
|
|
357
|
-
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(it
|
|
357
|
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(it))</div>
|
|
358
358
|
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  {</div>
|
|
359
359
|
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// continue on bitcast</span></div>
|
|
360
360
|
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  insertInferSitesOrPushWorklist(bitcast);</div>
|
|
361
361
|
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div>
|
|
362
|
-
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(it
|
|
362
|
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(it))</div>
|
|
363
363
|
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div>
|
|
364
364
|
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">// continue on bitcast</span></div>
|
|
365
365
|
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  insertInferSitesOrPushWorklist(phiNode);</div>
|
|
366
366
|
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div>
|
|
367
|
-
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(it
|
|
367
|
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(it))</div>
|
|
368
368
|
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div>
|
|
369
369
|
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">/*</span></div>
|
|
370
370
|
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> * propagate from return to caller</span></div>
|
|
@@ -377,9 +377,9 @@ $(function() {
|
|
|
377
377
|
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment"> %call = call i8* @malloc_wrapper()</span></div>
|
|
378
378
|
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment"> ..infer based on %call..</span></div>
|
|
379
379
|
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment"> */</span></div>
|
|
380
|
-
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &callsite: retInst->getFunction()->
|
|
380
|
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &callsite: retInst->getFunction()->users())</div>
|
|
381
381
|
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div>
|
|
382
|
-
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(callsite
|
|
382
|
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(callsite))</div>
|
|
383
383
|
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div>
|
|
384
384
|
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">// skip function as parameter</span></div>
|
|
385
385
|
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
@@ -388,7 +388,7 @@ $(function() {
|
|
|
388
388
|
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div>
|
|
389
389
|
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div>
|
|
390
390
|
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div>
|
|
391
|
-
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(it
|
|
391
|
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(it))</div>
|
|
392
392
|
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div>
|
|
393
393
|
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">/*</span></div>
|
|
394
394
|
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> * propagate from callsite to callee</span></div>
|
|
@@ -503,9 +503,9 @@ $(function() {
|
|
|
503
503
|
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  }</div>
|
|
504
504
|
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(curValue))</div>
|
|
505
505
|
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div>
|
|
506
|
-
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: loadInst->getPointerOperand()->
|
|
506
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: loadInst->getPointerOperand()->users())</div>
|
|
507
507
|
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div>
|
|
508
|
-
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast<StoreInst>(use
|
|
508
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast<StoreInst>(use))</div>
|
|
509
509
|
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  {</div>
|
|
510
510
|
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == loadInst->getPointerOperand())</div>
|
|
511
511
|
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  {</div>
|
|
@@ -516,9 +516,9 @@ $(function() {
|
|
|
516
516
|
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  }</div>
|
|
517
517
|
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast<Argument>(curValue))</div>
|
|
518
518
|
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div>
|
|
519
|
-
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: argument->getParent()->
|
|
519
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: argument->getParent()->users())</div>
|
|
520
520
|
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div>
|
|
521
|
-
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast<CallBase>(use
|
|
521
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast<CallBase>(use))</div>
|
|
522
522
|
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div>
|
|
523
523
|
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// skip function as parameter</span></div>
|
|
524
524
|
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
@@ -452,9 +452,9 @@ Private Attributes</h2></td></tr>
|
|
|
452
452
|
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  }</div>
|
|
453
453
|
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(curValue))</div>
|
|
454
454
|
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div>
|
|
455
|
-
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: loadInst->getPointerOperand()->
|
|
455
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: loadInst->getPointerOperand()->users())</div>
|
|
456
456
|
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div>
|
|
457
|
-
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast<StoreInst>(use
|
|
457
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast<StoreInst>(use))</div>
|
|
458
458
|
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  {</div>
|
|
459
459
|
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == loadInst->getPointerOperand())</div>
|
|
460
460
|
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  {</div>
|
|
@@ -465,9 +465,9 @@ Private Attributes</h2></td></tr>
|
|
|
465
465
|
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  }</div>
|
|
466
466
|
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *argument = SVFUtil::dyn_cast<Argument>(curValue))</div>
|
|
467
467
|
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div>
|
|
468
|
-
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: argument->getParent()->
|
|
468
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: argument->getParent()->users())</div>
|
|
469
469
|
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div>
|
|
470
|
-
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast<CallBase>(use
|
|
470
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast<CallBase>(use))</div>
|
|
471
471
|
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div>
|
|
472
472
|
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// skip function as parameter</span></div>
|
|
473
473
|
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
@@ -856,9 +856,9 @@ Private Attributes</h2></td></tr>
|
|
|
856
856
|
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div>
|
|
857
857
|
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(curValue))</div>
|
|
858
858
|
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  insertInferSite(gepInst);</div>
|
|
859
|
-
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: curValue->
|
|
859
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: curValue->users())</div>
|
|
860
860
|
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div>
|
|
861
|
-
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(it
|
|
861
|
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *loadInst = SVFUtil::dyn_cast<LoadInst>(it))</div>
|
|
862
862
|
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div>
|
|
863
863
|
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">/*</span></div>
|
|
864
864
|
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * infer based on load, e.g.,</span></div>
|
|
@@ -868,7 +868,7 @@ Private Attributes</h2></td></tr>
|
|
|
868
868
|
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> */</span></div>
|
|
869
869
|
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  insertInferSite(loadInst);</div>
|
|
870
870
|
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
|
|
871
|
-
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(it
|
|
871
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *storeInst = SVFUtil::dyn_cast<StoreInst>(it))</div>
|
|
872
872
|
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div>
|
|
873
873
|
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == curValue)</div>
|
|
874
874
|
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div>
|
|
@@ -882,7 +882,7 @@ Private Attributes</h2></td></tr>
|
|
|
882
882
|
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div>
|
|
883
883
|
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">else</span></div>
|
|
884
884
|
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div>
|
|
885
|
-
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &nit: storeInst->getPointerOperand()->
|
|
885
|
+
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &nit: storeInst->getPointerOperand()->users())</div>
|
|
886
886
|
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div>
|
|
887
887
|
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">/*</span></div>
|
|
888
888
|
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> * propagate across store (value operand) and load</span></div>
|
|
@@ -891,8 +891,8 @@ Private Attributes</h2></td></tr>
|
|
|
891
891
|
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> %q = load i8*, i8** %p</span></div>
|
|
892
892
|
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment"> ..infer based on %q..</span></div>
|
|
893
893
|
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment"> */</span></div>
|
|
894
|
-
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(nit
|
|
895
|
-
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  insertInferSitesOrPushWorklist(nit
|
|
894
|
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(nit))</div>
|
|
895
|
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  insertInferSitesOrPushWorklist(nit);</div>
|
|
896
896
|
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div>
|
|
897
897
|
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">/*</span></div>
|
|
898
898
|
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment"> * infer based on store (value operand) <- gep (result element)</span></div>
|
|
@@ -912,18 +912,18 @@ Private Attributes</h2></td></tr>
|
|
|
912
912
|
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *gepBase = gepInst->getPointerOperand();</div>
|
|
913
913
|
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<LoadInst>(gepBase)) <span class="keywordflow">continue</span>;</div>
|
|
914
914
|
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> <span class="keyword">auto</span> *load = SVFUtil::dyn_cast<LoadInst>(gepBase);</div>
|
|
915
|
-
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse: load->getPointerOperand()->
|
|
915
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse: load->getPointerOperand()->users())</div>
|
|
916
916
|
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div>
|
|
917
|
-
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (loadUse
|
|
917
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (loadUse == load || !SVFUtil::isa<LoadInst>(loadUse))</div>
|
|
918
918
|
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">continue</span>;</div>
|
|
919
|
-
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &gepUse: loadUse
|
|
919
|
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &gepUse: loadUse->users())</div>
|
|
920
920
|
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div>
|
|
921
|
-
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GetElementPtrInst>(gepUse
|
|
922
|
-
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse2: gepUse
|
|
921
|
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GetElementPtrInst>(gepUse)) <span class="keywordflow">continue</span>;</div>
|
|
922
|
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &loadUse2: gepUse->users())</div>
|
|
923
923
|
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div>
|
|
924
|
-
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(loadUse2
|
|
924
|
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadInst>(loadUse2))</div>
|
|
925
925
|
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  {</div>
|
|
926
|
-
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  insertInferSitesOrPushWorklist(loadUse2
|
|
926
|
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  insertInferSitesOrPushWorklist(loadUse2);</div>
|
|
927
927
|
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div>
|
|
928
928
|
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div>
|
|
929
929
|
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div>
|
|
@@ -933,7 +933,7 @@ Private Attributes</h2></td></tr>
|
|
|
933
933
|
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div>
|
|
934
934
|
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  </div>
|
|
935
935
|
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div>
|
|
936
|
-
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it
|
|
936
|
+
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it))</div>
|
|
937
937
|
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  {</div>
|
|
938
938
|
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">/*</span></div>
|
|
939
939
|
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"> * infer based on gep (pointer operand)</span></div>
|
|
@@ -944,17 +944,17 @@ Private Attributes</h2></td></tr>
|
|
|
944
944
|
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (gepInst->getPointerOperand() == curValue)</div>
|
|
945
945
|
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  insertInferSite(gepInst);</div>
|
|
946
946
|
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div>
|
|
947
|
-
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(it
|
|
947
|
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *bitcast = SVFUtil::dyn_cast<BitCastInst>(it))</div>
|
|
948
948
|
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  {</div>
|
|
949
949
|
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// continue on bitcast</span></div>
|
|
950
950
|
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  insertInferSitesOrPushWorklist(bitcast);</div>
|
|
951
951
|
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div>
|
|
952
|
-
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(it
|
|
952
|
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *phiNode = SVFUtil::dyn_cast<PHINode>(it))</div>
|
|
953
953
|
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div>
|
|
954
954
|
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">// continue on bitcast</span></div>
|
|
955
955
|
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  insertInferSitesOrPushWorklist(phiNode);</div>
|
|
956
956
|
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div>
|
|
957
|
-
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(it
|
|
957
|
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *retInst = SVFUtil::dyn_cast<ReturnInst>(it))</div>
|
|
958
958
|
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div>
|
|
959
959
|
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">/*</span></div>
|
|
960
960
|
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> * propagate from return to caller</span></div>
|
|
@@ -967,9 +967,9 @@ Private Attributes</h2></td></tr>
|
|
|
967
967
|
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment"> %call = call i8* @malloc_wrapper()</span></div>
|
|
968
968
|
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment"> ..infer based on %call..</span></div>
|
|
969
969
|
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment"> */</span></div>
|
|
970
|
-
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &callsite: retInst->getFunction()->
|
|
970
|
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &callsite: retInst->getFunction()->users())</div>
|
|
971
971
|
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div>
|
|
972
|
-
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(callsite
|
|
972
|
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(callsite))</div>
|
|
973
973
|
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div>
|
|
974
974
|
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">// skip function as parameter</span></div>
|
|
975
975
|
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
@@ -978,7 +978,7 @@ Private Attributes</h2></td></tr>
|
|
|
978
978
|
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div>
|
|
979
979
|
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div>
|
|
980
980
|
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div>
|
|
981
|
-
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(it
|
|
981
|
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *callBase = SVFUtil::dyn_cast<CallBase>(it))</div>
|
|
982
982
|
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div>
|
|
983
983
|
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">/*</span></div>
|
|
984
984
|
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> * propagate from callsite to callee</span></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.895",
|
|
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": {
|
|
@@ -207,9 +207,9 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
207
207
|
}
|
|
208
208
|
if (const auto *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(curValue))
|
|
209
209
|
insertInferSite(gepInst);
|
|
210
|
-
for (const auto &it: curValue->
|
|
210
|
+
for (const auto &it: curValue->users())
|
|
211
211
|
{
|
|
212
|
-
if (const auto *loadInst = SVFUtil::dyn_cast<LoadInst>(it
|
|
212
|
+
if (const auto *loadInst = SVFUtil::dyn_cast<LoadInst>(it))
|
|
213
213
|
{
|
|
214
214
|
/*
|
|
215
215
|
* infer based on load, e.g.,
|
|
@@ -219,7 +219,7 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
219
219
|
*/
|
|
220
220
|
insertInferSite(loadInst);
|
|
221
221
|
}
|
|
222
|
-
else if (const auto *storeInst = SVFUtil::dyn_cast<StoreInst>(it
|
|
222
|
+
else if (const auto *storeInst = SVFUtil::dyn_cast<StoreInst>(it))
|
|
223
223
|
{
|
|
224
224
|
if (storeInst->getPointerOperand() == curValue)
|
|
225
225
|
{
|
|
@@ -233,7 +233,7 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
233
233
|
}
|
|
234
234
|
else
|
|
235
235
|
{
|
|
236
|
-
for (const auto &nit: storeInst->getPointerOperand()->
|
|
236
|
+
for (const auto &nit: storeInst->getPointerOperand()->users())
|
|
237
237
|
{
|
|
238
238
|
/*
|
|
239
239
|
* propagate across store (value operand) and load
|
|
@@ -242,8 +242,8 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
242
242
|
%q = load i8*, i8** %p
|
|
243
243
|
..infer based on %q..
|
|
244
244
|
*/
|
|
245
|
-
if (SVFUtil::isa<LoadInst>(nit
|
|
246
|
-
insertInferSitesOrPushWorklist(nit
|
|
245
|
+
if (SVFUtil::isa<LoadInst>(nit))
|
|
246
|
+
insertInferSitesOrPushWorklist(nit);
|
|
247
247
|
}
|
|
248
248
|
/*
|
|
249
249
|
* infer based on store (value operand) <- gep (result element)
|
|
@@ -263,18 +263,18 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
263
263
|
const Value *gepBase = gepInst->getPointerOperand();
|
|
264
264
|
if (!SVFUtil::isa<LoadInst>(gepBase)) continue;
|
|
265
265
|
const auto *load = SVFUtil::dyn_cast<LoadInst>(gepBase);
|
|
266
|
-
for (const auto &loadUse: load->getPointerOperand()->
|
|
266
|
+
for (const auto &loadUse: load->getPointerOperand()->users())
|
|
267
267
|
{
|
|
268
|
-
if (loadUse
|
|
268
|
+
if (loadUse == load || !SVFUtil::isa<LoadInst>(loadUse))
|
|
269
269
|
continue;
|
|
270
|
-
for (const auto &gepUse: loadUse
|
|
270
|
+
for (const auto &gepUse: loadUse->users())
|
|
271
271
|
{
|
|
272
|
-
if (!SVFUtil::isa<GetElementPtrInst>(gepUse
|
|
273
|
-
for (const auto &loadUse2: gepUse
|
|
272
|
+
if (!SVFUtil::isa<GetElementPtrInst>(gepUse)) continue;
|
|
273
|
+
for (const auto &loadUse2: gepUse->users())
|
|
274
274
|
{
|
|
275
|
-
if (SVFUtil::isa<LoadInst>(loadUse2
|
|
275
|
+
if (SVFUtil::isa<LoadInst>(loadUse2))
|
|
276
276
|
{
|
|
277
|
-
insertInferSitesOrPushWorklist(loadUse2
|
|
277
|
+
insertInferSitesOrPushWorklist(loadUse2);
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
}
|
|
@@ -284,7 +284,7 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
}
|
|
287
|
-
else if (const auto *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it
|
|
287
|
+
else if (const auto *gepInst = SVFUtil::dyn_cast<GetElementPtrInst>(it))
|
|
288
288
|
{
|
|
289
289
|
/*
|
|
290
290
|
* infer based on gep (pointer operand)
|
|
@@ -295,17 +295,17 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
295
295
|
if (gepInst->getPointerOperand() == curValue)
|
|
296
296
|
insertInferSite(gepInst);
|
|
297
297
|
}
|
|
298
|
-
else if (const auto *bitcast = SVFUtil::dyn_cast<BitCastInst>(it
|
|
298
|
+
else if (const auto *bitcast = SVFUtil::dyn_cast<BitCastInst>(it))
|
|
299
299
|
{
|
|
300
300
|
// continue on bitcast
|
|
301
301
|
insertInferSitesOrPushWorklist(bitcast);
|
|
302
302
|
}
|
|
303
|
-
else if (const auto *phiNode = SVFUtil::dyn_cast<PHINode>(it
|
|
303
|
+
else if (const auto *phiNode = SVFUtil::dyn_cast<PHINode>(it))
|
|
304
304
|
{
|
|
305
305
|
// continue on bitcast
|
|
306
306
|
insertInferSitesOrPushWorklist(phiNode);
|
|
307
307
|
}
|
|
308
|
-
else if (const auto *retInst = SVFUtil::dyn_cast<ReturnInst>(it
|
|
308
|
+
else if (const auto *retInst = SVFUtil::dyn_cast<ReturnInst>(it))
|
|
309
309
|
{
|
|
310
310
|
/*
|
|
311
311
|
* propagate from return to caller
|
|
@@ -318,9 +318,9 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
318
318
|
%call = call i8* @malloc_wrapper()
|
|
319
319
|
..infer based on %call..
|
|
320
320
|
*/
|
|
321
|
-
for (const auto &callsite: retInst->getFunction()->
|
|
321
|
+
for (const auto &callsite: retInst->getFunction()->users())
|
|
322
322
|
{
|
|
323
|
-
if (const auto *callBase = SVFUtil::dyn_cast<CallBase>(callsite
|
|
323
|
+
if (const auto *callBase = SVFUtil::dyn_cast<CallBase>(callsite))
|
|
324
324
|
{
|
|
325
325
|
// skip function as parameter
|
|
326
326
|
// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)
|
|
@@ -329,7 +329,7 @@ const Type *ObjTypeInference::fwInferObjType(const Value *var)
|
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
|
-
else if (const auto *callBase = SVFUtil::dyn_cast<CallBase>(it
|
|
332
|
+
else if (const auto *callBase = SVFUtil::dyn_cast<CallBase>(it))
|
|
333
333
|
{
|
|
334
334
|
/*
|
|
335
335
|
* propagate from callsite to callee
|
|
@@ -449,9 +449,9 @@ Set<const Value *> &ObjTypeInference::bwfindAllocOfVar(const Value *var)
|
|
|
449
449
|
}
|
|
450
450
|
else if (const auto *loadInst = SVFUtil::dyn_cast<LoadInst>(curValue))
|
|
451
451
|
{
|
|
452
|
-
for (const auto &use: loadInst->getPointerOperand()->
|
|
452
|
+
for (const auto &use: loadInst->getPointerOperand()->users())
|
|
453
453
|
{
|
|
454
|
-
if (const StoreInst *storeInst = SVFUtil::dyn_cast<StoreInst>(use
|
|
454
|
+
if (const StoreInst *storeInst = SVFUtil::dyn_cast<StoreInst>(use))
|
|
455
455
|
{
|
|
456
456
|
if (storeInst->getPointerOperand() == loadInst->getPointerOperand())
|
|
457
457
|
{
|
|
@@ -462,9 +462,9 @@ Set<const Value *> &ObjTypeInference::bwfindAllocOfVar(const Value *var)
|
|
|
462
462
|
}
|
|
463
463
|
else if (const auto *argument = SVFUtil::dyn_cast<Argument>(curValue))
|
|
464
464
|
{
|
|
465
|
-
for (const auto &use: argument->getParent()->
|
|
465
|
+
for (const auto &use: argument->getParent()->users())
|
|
466
466
|
{
|
|
467
|
-
if (const CallBase *callBase = SVFUtil::dyn_cast<CallBase>(use
|
|
467
|
+
if (const CallBase *callBase = SVFUtil::dyn_cast<CallBase>(use))
|
|
468
468
|
{
|
|
469
469
|
// skip function as parameter
|
|
470
470
|
// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)
|