svf-tools 1.0.862 → 1.0.863
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/ObjTypeInference_8cpp_source.html +230 -230
- package/SVF-doxygen/html/ObjTypeInference_8h_source.html +8 -8
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInference-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +226 -226
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +2 -2
- package/SVF-doxygen/html/functions_func_s.html +2 -2
- package/SVF-doxygen/html/functions_s.html +2 -2
- package/SVF-doxygen/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/search/functions_12.js +1 -1
- package/package.json +1 -1
- package/svf-llvm/include/SVF-LLVM/ObjTypeInference.h +1 -1
- package/svf-llvm/lib/ObjTypeInference.cpp +11 -13
|
@@ -118,9 +118,9 @@ Public Member Functions</h2></td></tr>
|
|
|
118
118
|
<tr class="separator:a172d2e9ab858fc7cd145721e175c4deb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
119
119
|
<tr class="memitem:a172f97ff9c9a7c90dbec6329c89775ad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ObjTypeInference.html#a172f97ff9c9a7c90dbec6329c89775ad">getLLVMCtx</a> ()</td></tr>
|
|
120
120
|
<tr class="separator:a172f97ff9c9a7c90dbec6329c89775ad"><td class="memSeparator" colspan="2"> </td></tr>
|
|
121
|
-
<tr class="memitem:
|
|
122
|
-
<tr class="memdesc:
|
|
123
|
-
<tr class="separator:
|
|
121
|
+
<tr class="memitem:a205fa59a7250270b216f47df78ef2319"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">selectLargestSizedType</a> (<a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * > &objTys)</td></tr>
|
|
122
|
+
<tr class="memdesc:a205fa59a7250270b216f47df78ef2319"><td class="mdescLeft"> </td><td class="mdescRight">Select the largest (conservative) type from all types. <a href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">More...</a><br /></td></tr>
|
|
123
|
+
<tr class="separator:a205fa59a7250270b216f47df78ef2319"><td class="memSeparator" colspan="2"> </td></tr>
|
|
124
124
|
<tr class="memitem:a5eae038a7bffb0549ca75cd9c850ff1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a> (const <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *objTy)</td></tr>
|
|
125
125
|
<tr class="separator:a5eae038a7bffb0549ca75cd9c850ff1e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
126
126
|
<tr class="memitem:a72da2d7f06e8fee67dc5b3c451fa5dee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">getArgPosInCall</a> (const <a class="el" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase, const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg)</td></tr>
|
|
@@ -331,127 +331,127 @@ Private Attributes</h2></td></tr>
|
|
|
331
331
|
</dl>
|
|
332
332
|
<dl class="section return"><dt>Returns</dt><dd></dd></dl>
|
|
333
333
|
|
|
334
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
335
|
-
<div class="fragment"><div class="line"><a name="
|
|
336
|
-
<div class="line"><a name="
|
|
337
|
-
<div class="line"><a name="
|
|
338
|
-
<div class="line"><a name="
|
|
339
|
-
<div class="line"><a name="
|
|
340
|
-
<div class="line"><a name="
|
|
341
|
-
<div class="line"><a name="
|
|
342
|
-
<div class="line"><a name="
|
|
343
|
-
<div class="line"><a name="
|
|
344
|
-
<div class="line"><a name="
|
|
345
|
-
<div class="line"><a name="
|
|
346
|
-
<div class="line"><a name="
|
|
347
|
-
<div class="line"><a name="
|
|
348
|
-
<div class="line"><a name="
|
|
349
|
-
<div class="line"><a name="
|
|
350
|
-
<div class="line"><a name="
|
|
351
|
-
<div class="line"><a name="
|
|
352
|
-
<div class="line"><a name="
|
|
353
|
-
<div class="line"><a name="
|
|
354
|
-
<div class="line"><a name="
|
|
355
|
-
<div class="line"><a name="
|
|
356
|
-
<div class="line"><a name="
|
|
357
|
-
<div class="line"><a name="
|
|
358
|
-
<div class="line"><a name="
|
|
359
|
-
<div class="line"><a name="
|
|
360
|
-
<div class="line"><a name="
|
|
361
|
-
<div class="line"><a name="
|
|
362
|
-
<div class="line"><a name="
|
|
363
|
-
<div class="line"><a name="
|
|
364
|
-
<div class="line"><a name="
|
|
365
|
-
<div class="line"><a name="
|
|
366
|
-
<div class="line"><a name="
|
|
367
|
-
<div class="line"><a name="
|
|
368
|
-
<div class="line"><a name="
|
|
369
|
-
<div class="line"><a name="
|
|
370
|
-
<div class="line"><a name="
|
|
371
|
-
<div class="line"><a name="
|
|
372
|
-
<div class="line"><a name="
|
|
373
|
-
<div class="line"><a name="
|
|
374
|
-
<div class="line"><a name="
|
|
375
|
-
<div class="line"><a name="
|
|
376
|
-
<div class="line"><a name="
|
|
377
|
-
<div class="line"><a name="
|
|
378
|
-
<div class="line"><a name="
|
|
379
|
-
<div class="line"><a name="
|
|
380
|
-
<div class="line"><a name="
|
|
381
|
-
<div class="line"><a name="
|
|
382
|
-
<div class="line"><a name="
|
|
383
|
-
<div class="line"><a name="
|
|
384
|
-
<div class="line"><a name="
|
|
385
|
-
<div class="line"><a name="
|
|
386
|
-
<div class="line"><a name="
|
|
387
|
-
<div class="line"><a name="
|
|
388
|
-
<div class="line"><a name="
|
|
389
|
-
<div class="line"><a name="
|
|
390
|
-
<div class="line"><a name="
|
|
391
|
-
<div class="line"><a name="
|
|
392
|
-
<div class="line"><a name="
|
|
393
|
-
<div class="line"><a name="
|
|
394
|
-
<div class="line"><a name="
|
|
395
|
-
<div class="line"><a name="
|
|
396
|
-
<div class="line"><a name="
|
|
397
|
-
<div class="line"><a name="
|
|
398
|
-
<div class="line"><a name="
|
|
399
|
-
<div class="line"><a name="
|
|
400
|
-
<div class="line"><a name="
|
|
401
|
-
<div class="line"><a name="
|
|
402
|
-
<div class="line"><a name="
|
|
403
|
-
<div class="line"><a name="
|
|
404
|
-
<div class="line"><a name="
|
|
405
|
-
<div class="line"><a name="
|
|
406
|
-
<div class="line"><a name="
|
|
407
|
-
<div class="line"><a name="
|
|
408
|
-
<div class="line"><a name="
|
|
409
|
-
<div class="line"><a name="
|
|
410
|
-
<div class="line"><a name="
|
|
411
|
-
<div class="line"><a name="
|
|
412
|
-
<div class="line"><a name="
|
|
413
|
-
<div class="line"><a name="
|
|
414
|
-
<div class="line"><a name="
|
|
415
|
-
<div class="line"><a name="
|
|
416
|
-
<div class="line"><a name="
|
|
417
|
-
<div class="line"><a name="
|
|
418
|
-
<div class="line"><a name="
|
|
419
|
-
<div class="line"><a name="
|
|
420
|
-
<div class="line"><a name="
|
|
421
|
-
<div class="line"><a name="
|
|
422
|
-
<div class="line"><a name="
|
|
423
|
-
<div class="line"><a name="
|
|
424
|
-
<div class="line"><a name="
|
|
425
|
-
<div class="line"><a name="
|
|
426
|
-
<div class="line"><a name="
|
|
427
|
-
<div class="line"><a name="
|
|
428
|
-
<div class="line"><a name="
|
|
429
|
-
<div class="line"><a name="
|
|
430
|
-
<div class="line"><a name="
|
|
431
|
-
<div class="line"><a name="
|
|
432
|
-
<div class="line"><a name="
|
|
433
|
-
<div class="line"><a name="
|
|
434
|
-
<div class="line"><a name="
|
|
435
|
-
<div class="line"><a name="
|
|
436
|
-
<div class="line"><a name="
|
|
437
|
-
<div class="line"><a name="
|
|
438
|
-
<div class="line"><a name="
|
|
439
|
-
<div class="line"><a name="
|
|
440
|
-
<div class="line"><a name="
|
|
441
|
-
<div class="line"><a name="
|
|
442
|
-
<div class="line"><a name="
|
|
443
|
-
<div class="line"><a name="
|
|
444
|
-
<div class="line"><a name="
|
|
445
|
-
<div class="line"><a name="
|
|
446
|
-
<div class="line"><a name="
|
|
447
|
-
<div class="line"><a name="
|
|
448
|
-
<div class="line"><a name="
|
|
449
|
-
<div class="line"><a name="
|
|
450
|
-
<div class="line"><a name="
|
|
451
|
-
<div class="line"><a name="
|
|
452
|
-
<div class="line"><a name="
|
|
453
|
-
<div class="line"><a name="
|
|
454
|
-
<div class="line"><a name="
|
|
334
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00376">376</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
335
|
+
<div class="fragment"><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div>
|
|
336
|
+
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  </div>
|
|
337
|
+
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="comment">// consult cache</span></div>
|
|
338
|
+
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">auto</span> tIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.find(startValue);</div>
|
|
339
|
+
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">if</span> (tIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end())</div>
|
|
340
|
+
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  {</div>
|
|
341
|
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="ObjTypeInference_8cpp.html#a482b3cc567fd28e9a30e7594c100149f">WARN_IFNOT</a>(!tIt->second.empty(), <span class="stringliteral">"empty type:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(startValue));</div>
|
|
342
|
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> !tIt->second.empty() ? tIt->second : <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a>({startValue});</div>
|
|
343
|
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div>
|
|
344
|
+
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  </div>
|
|
345
|
+
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="comment">// simulate the call stack, the second element indicates whether we should update sources for current value</span></div>
|
|
346
|
+
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="classSVF_1_1FILOWorkList.html">FILOWorkList<ValueBoolPair></a> workList;</div>
|
|
347
|
+
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<ValueBoolPair></a> visited;</div>
|
|
348
|
+
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  workList.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>({startValue, <span class="keyword">false</span>});</div>
|
|
349
|
+
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">while</span> (!workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
|
|
350
|
+
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div>
|
|
351
|
+
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keyword">auto</span> curPair = workList.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
|
|
352
|
+
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">if</span> (visited.count(curPair)) <span class="keywordflow">continue</span>;</div>
|
|
353
|
+
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  visited.insert(curPair);</div>
|
|
354
|
+
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *curValue = curPair.first;</div>
|
|
355
|
+
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordtype">bool</span> canUpdate = curPair.second;</div>
|
|
356
|
+
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  </div>
|
|
357
|
+
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> sources;</div>
|
|
358
|
+
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">auto</span> insertAllocs = [&sources, &canUpdate](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *source)</div>
|
|
359
|
+
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div>
|
|
360
|
+
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">if</span> (canUpdate) sources.insert(source);</div>
|
|
361
|
+
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  };</div>
|
|
362
|
+
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">auto</span> insertAllocsOrPushWorklist = [<span class="keyword">this</span>, &sources, &workList, &canUpdate](<span class="keyword">const</span> <span class="keyword">auto</span> &pUser)</div>
|
|
363
|
+
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  {</div>
|
|
364
|
+
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keyword">auto</span> vIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.find(pUser);</div>
|
|
365
|
+
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
366
|
+
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  {</div>
|
|
367
|
+
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end())</div>
|
|
368
|
+
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div>
|
|
369
|
+
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  sources.insert(vIt->second.begin(), vIt->second.end());</div>
|
|
370
|
+
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div>
|
|
371
|
+
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  }</div>
|
|
372
|
+
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">else</span></div>
|
|
373
|
+
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  {</div>
|
|
374
|
+
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">if</span> (vIt == <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.end()) workList.push({pUser, <span class="keyword">false</span>});</div>
|
|
375
|
+
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  }</div>
|
|
376
|
+
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  };</div>
|
|
377
|
+
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  </div>
|
|
378
|
+
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">if</span> (!canUpdate && !<a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>.count(curValue))</div>
|
|
379
|
+
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  {</div>
|
|
380
|
+
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  workList.push({curValue, <span class="keyword">true</span>});</div>
|
|
381
|
+
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div>
|
|
382
|
+
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  </div>
|
|
383
|
+
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInference.html#af8113e432377917c1a0de9ab100aaafe">isAllocation</a>(curValue))</div>
|
|
384
|
+
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  {</div>
|
|
385
|
+
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  insertAllocs(curValue);</div>
|
|
386
|
+
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div>
|
|
387
|
+
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a> *bitCastInst = SVFUtil::dyn_cast<BitCastInst>(curValue))</div>
|
|
388
|
+
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  {</div>
|
|
389
|
+
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *prevVal = bitCastInst->getOperand(0);</div>
|
|
390
|
+
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  insertAllocsOrPushWorklist(prevVal);</div>
|
|
391
|
+
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  }</div>
|
|
392
|
+
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> *phiNode = SVFUtil::dyn_cast<PHINode>(curValue))</div>
|
|
393
|
+
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  {</div>
|
|
394
|
+
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < phiNode->getNumOperands(); ++i)</div>
|
|
395
|
+
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div>
|
|
396
|
+
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  insertAllocsOrPushWorklist(phiNode->getOperand(i));</div>
|
|
397
|
+
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div>
|
|
398
|
+
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div>
|
|
399
|
+
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> *loadInst = SVFUtil::dyn_cast<LoadInst>(curValue))</div>
|
|
400
|
+
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  {</div>
|
|
401
|
+
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: loadInst->getPointerOperand()->uses())</div>
|
|
402
|
+
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  {</div>
|
|
403
|
+
<div class="line"><a name="l00445"></a><span class="lineno"> 445</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.getUser()))</div>
|
|
404
|
+
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div>
|
|
405
|
+
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">if</span> (storeInst->getPointerOperand() == loadInst->getPointerOperand())</div>
|
|
406
|
+
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  {</div>
|
|
407
|
+
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  insertAllocsOrPushWorklist(storeInst->getValueOperand());</div>
|
|
408
|
+
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div>
|
|
409
|
+
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div>
|
|
410
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div>
|
|
411
|
+
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  }</div>
|
|
412
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a> *argument = SVFUtil::dyn_cast<Argument>(curValue))</div>
|
|
413
|
+
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  {</div>
|
|
414
|
+
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &use: argument->getParent()->uses())</div>
|
|
415
|
+
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  {</div>
|
|
416
|
+
<div class="line"><a name="l00458"></a><span class="lineno"> 458</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.getUser()))</div>
|
|
417
|
+
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div>
|
|
418
|
+
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">// skip function as parameter</span></div>
|
|
419
|
+
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// e.g., call void @foo(%struct.ssl_ctx_st* %9, i32 (i8*, i32, i32, i8*)* @passwd_callback)</span></div>
|
|
420
|
+
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> (callBase->getCalledFunction() != argument->getParent()) <span class="keywordflow">continue</span>;</div>
|
|
421
|
+
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = argument->getParent()->isVarArg() ? 0 : argument->getArgNo();</div>
|
|
422
|
+
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  insertAllocsOrPushWorklist(callBase->getArgOperand(pos));</div>
|
|
423
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div>
|
|
424
|
+
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div>
|
|
425
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  }</div>
|
|
426
|
+
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">else</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>(curValue))</div>
|
|
427
|
+
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  {</div>
|
|
428
|
+
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!callBase->doesNotReturn(), <span class="stringliteral">"callbase does not return:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(callBase));</div>
|
|
429
|
+
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = callBase->getCalledFunction())</div>
|
|
430
|
+
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  {</div>
|
|
431
|
+
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">if</span> (!callee->isDeclaration())</div>
|
|
432
|
+
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  {</div>
|
|
433
|
+
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFunc = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
|
|
434
|
+
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *pValue = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#aaf9b679407f12b93afc53c157d37b444">getLLVMValue</a>(svfFunc-><a class="code" href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">getExitBB</a>()-><a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>());</div>
|
|
435
|
+
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> *retInst = SVFUtil::dyn_cast<ReturnInst>(pValue);</div>
|
|
436
|
+
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(retInst && retInst->getReturnValue(), <span class="stringliteral">"not return inst?"</span>);</div>
|
|
437
|
+
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  insertAllocsOrPushWorklist(retInst->getReturnValue());</div>
|
|
438
|
+
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div>
|
|
439
|
+
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  }</div>
|
|
440
|
+
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  }</div>
|
|
441
|
+
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
442
|
+
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  {</div>
|
|
443
|
+
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(sources);</div>
|
|
444
|
+
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div>
|
|
445
|
+
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div>
|
|
446
|
+
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> srcs = <a class="code" href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">_valueToAllocs</a>[startValue];</div>
|
|
447
|
+
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">if</span> (srcs.empty())</div>
|
|
448
|
+
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  {</div>
|
|
449
|
+
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  srcs = {startValue};</div>
|
|
450
|
+
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">"Using default type, trace ID is "</span> + std::to_string(traceId) + <span class="stringliteral">":"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(startValue));</div>
|
|
451
|
+
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</div>
|
|
452
|
+
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(!srcs.empty(), <span class="stringliteral">"sources cannot be empty"</span>);</div>
|
|
453
|
+
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">return</span> srcs;</div>
|
|
454
|
+
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
|
|
455
455
|
</div><!-- fragment -->
|
|
456
456
|
</div>
|
|
457
457
|
</div>
|
|
@@ -550,7 +550,7 @@ Private Attributes</h2></td></tr>
|
|
|
550
550
|
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">auto</span> vIt = <a class="code" href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">_valueToInferSites</a>.find(pUser);</div>
|
|
551
551
|
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
552
552
|
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  {</div>
|
|
553
|
-
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">_valueToInferSites</a>.end()
|
|
553
|
+
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (vIt != <a class="code" href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">_valueToInferSites</a>.end())</div>
|
|
554
554
|
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div>
|
|
555
555
|
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  infersites.insert(vIt->second.begin(), vIt->second.end());</div>
|
|
556
556
|
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div>
|
|
@@ -721,23 +721,21 @@ Private Attributes</h2></td></tr>
|
|
|
721
721
|
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (canUpdate)</div>
|
|
722
722
|
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div>
|
|
723
723
|
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Type *></a> types;</div>
|
|
724
|
-
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> 
|
|
725
|
-
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> 
|
|
726
|
-
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> 
|
|
727
|
-
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> 
|
|
728
|
-
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> 
|
|
729
|
-
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> 
|
|
730
|
-
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> 
|
|
731
|
-
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> 
|
|
732
|
-
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> 
|
|
733
|
-
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> 
|
|
734
|
-
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> 
|
|
735
|
-
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> 
|
|
736
|
-
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> 
|
|
737
|
-
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> 
|
|
738
|
-
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> 
|
|
739
|
-
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
|
|
740
|
-
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
|
|
724
|
+
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  std::transform(infersites.begin(), infersites.end(), std::inserter(types, types.begin()),</div>
|
|
725
|
+
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="ObjTypeInference_8cpp.html#a19b8626948c43f4ce19dbc69742d309e">infersiteToType</a>);</div>
|
|
726
|
+
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="classSVF_1_1ObjTypeInference.html#a0e34e7ea20e9ff7650f89750c53f4671">_valueToInferSites</a>[curValue] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVFUtil::move</a>(infersites);</div>
|
|
727
|
+
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">_valueToType</a>[curValue] = <a class="code" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">selectLargestSizedType</a>(types);</div>
|
|
728
|
+
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  }</div>
|
|
729
|
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div>
|
|
730
|
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">_valueToType</a>[startValue];</div>
|
|
731
|
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <span class="keyword">nullptr</span>)</div>
|
|
732
|
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  {</div>
|
|
733
|
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1ObjTypeInference.html#aee4383a13cda421acb034ea147e33a6d">defaultType</a>(startValue);</div>
|
|
734
|
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="ObjTypeInference_8cpp.html#ac48ef12f2a6f605d6fa5d31e7623a826">WARN_MSG</a>(<span class="stringliteral">"Using default type, trace ID is "</span> + std::to_string(traceId) + <span class="stringliteral">":"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(startValue));</div>
|
|
735
|
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div>
|
|
736
|
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="stringliteral">"type cannot be a null ptr"</span>);</div>
|
|
737
|
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
|
|
738
|
+
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
|
|
741
739
|
</div><!-- fragment -->
|
|
742
740
|
</div>
|
|
743
741
|
</div>
|
|
@@ -767,13 +765,13 @@ Private Attributes</h2></td></tr>
|
|
|
767
765
|
</table>
|
|
768
766
|
</div><div class="memdoc">
|
|
769
767
|
|
|
770
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
771
|
-
<div class="fragment"><div class="line"><a name="
|
|
772
|
-
<div class="line"><a name="
|
|
773
|
-
<div class="line"><a name="
|
|
774
|
-
<div class="line"><a name="
|
|
775
|
-
<div class="line"><a name="
|
|
776
|
-
<div class="line"><a name="
|
|
768
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00546">546</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
769
|
+
<div class="fragment"><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> {</div>
|
|
770
|
+
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  assert(callBase->hasArgument(arg) && <span class="stringliteral">"callInst does not have argument arg?"</span>);</div>
|
|
771
|
+
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keyword">auto</span> it = std::find(callBase->arg_begin(), callBase->arg_end(), arg);</div>
|
|
772
|
+
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  assert(it != callBase->arg_end() && <span class="stringliteral">"Didn't find argument?"</span>);</div>
|
|
773
|
+
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span> std::distance(callBase->arg_begin(), it);</div>
|
|
774
|
+
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> }</div>
|
|
777
775
|
</div><!-- fragment -->
|
|
778
776
|
</div>
|
|
779
777
|
</div>
|
|
@@ -832,7 +830,7 @@ Private Attributes</h2></td></tr>
|
|
|
832
830
|
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div>
|
|
833
831
|
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  types.insert(<a class="code" href="classSVF_1_1ObjTypeInference.html#abf0978f7128506f7d19996f184fe8154">fwInferObjType</a>(source));</div>
|
|
834
832
|
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div>
|
|
835
|
-
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *largestTy = <a class="code" href="classSVF_1_1ObjTypeInference.html#
|
|
833
|
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *largestTy = <a class="code" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">selectLargestSizedType</a>(types);</div>
|
|
836
834
|
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="ObjTypeInference_8cpp.html#a7165377d2fbd76a86ed0ec5218712c78">ABORT_IFNOT</a>(largestTy, <span class="stringliteral">"return type cannot be null"</span>);</div>
|
|
837
835
|
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> largestTy;</div>
|
|
838
836
|
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
|
|
@@ -895,10 +893,10 @@ Private Attributes</h2></td></tr>
|
|
|
895
893
|
</table>
|
|
896
894
|
</div><div class="memdoc">
|
|
897
895
|
|
|
898
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
899
|
-
<div class="fragment"><div class="line"><a name="
|
|
900
|
-
<div class="line"><a name="
|
|
901
|
-
<div class="line"><a name="
|
|
896
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00498">498</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
897
|
+
<div class="fragment"><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> {</div>
|
|
898
|
+
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aca11801ed6ef6ff8d2a1e85bc0fc5794">LLVMUtil::isObject</a>(val);</div>
|
|
899
|
+
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
|
|
902
900
|
</div><!-- fragment -->
|
|
903
901
|
</div>
|
|
904
902
|
</div>
|
|
@@ -919,18 +917,18 @@ Private Attributes</h2></td></tr>
|
|
|
919
917
|
</div><div class="memdoc">
|
|
920
918
|
<p>For an C++ class, it can have variant elements depending on the vtable size, Hence we only handle non-cpp-class object, the type of the cpp class is treated as default PointerType</p>
|
|
921
919
|
|
|
922
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
923
|
-
<div class="fragment"><div class="line"><a name="
|
|
924
|
-
<div class="line"><a name="
|
|
925
|
-
<div class="line"><a name="
|
|
926
|
-
<div class="line"><a name="
|
|
927
|
-
<div class="line"><a name="
|
|
928
|
-
<div class="line"><a name="
|
|
929
|
-
<div class="line"><a name="
|
|
930
|
-
<div class="line"><a name="
|
|
931
|
-
<div class="line"><a name="
|
|
932
|
-
<div class="line"><a name="
|
|
933
|
-
<div class="line"><a name="
|
|
920
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00571">571</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
921
|
+
<div class="fragment"><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> {</div>
|
|
922
|
+
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
|
|
923
|
+
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ArrayType>(objTy))</div>
|
|
924
|
+
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(objTy);</div>
|
|
925
|
+
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *st = SVFUtil::dyn_cast<StructType>(objTy))</div>
|
|
926
|
+
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div>
|
|
927
|
+
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1cppUtil.html#a4e1785295e2695fae72758d8bbe4f7ac">classTyHasVTable</a>(st))</div>
|
|
928
|
+
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  num = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(st);</div>
|
|
929
|
+
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  }</div>
|
|
930
|
+
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">return</span> num;</div>
|
|
931
|
+
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> }</div>
|
|
934
932
|
</div><!-- fragment -->
|
|
935
933
|
</div>
|
|
936
934
|
</div>
|
|
@@ -966,14 +964,14 @@ Private Attributes</h2></td></tr>
|
|
|
966
964
|
</div><!-- fragment -->
|
|
967
965
|
</div>
|
|
968
966
|
</div>
|
|
969
|
-
<a id="
|
|
970
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
967
|
+
<a id="a205fa59a7250270b216f47df78ef2319"></a>
|
|
968
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a205fa59a7250270b216f47df78ef2319">◆ </a></span>selectLargestSizedType()</h2>
|
|
971
969
|
|
|
972
970
|
<div class="memitem">
|
|
973
971
|
<div class="memproto">
|
|
974
972
|
<table class="memname">
|
|
975
973
|
<tr>
|
|
976
|
-
<td class="memname">const <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * ObjTypeInference::
|
|
974
|
+
<td class="memname">const <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * ObjTypeInference::selectLargestSizedType </td>
|
|
977
975
|
<td>(</td>
|
|
978
976
|
<td class="paramtype"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * > & </td>
|
|
979
977
|
<td class="paramname"><em>objTys</em></td><td>)</td>
|
|
@@ -984,21 +982,21 @@ Private Attributes</h2></td></tr>
|
|
|
984
982
|
|
|
985
983
|
<p>Select the largest (conservative) type from all types. </p>
|
|
986
984
|
|
|
987
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
988
|
-
<div class="fragment"><div class="line"><a name="
|
|
989
|
-
<div class="line"><a name="
|
|
990
|
-
<div class="line"><a name="
|
|
991
|
-
<div class="line"><a name="
|
|
992
|
-
<div class="line"><a name="
|
|
993
|
-
<div class="line"><a name="
|
|
994
|
-
<div class="line"><a name="
|
|
995
|
-
<div class="line"><a name="
|
|
996
|
-
<div class="line"><a name="
|
|
997
|
-
<div class="line"><a name="
|
|
998
|
-
<div class="line"><a name="
|
|
999
|
-
<div class="line"><a name="
|
|
1000
|
-
<div class="line"><a name="
|
|
1001
|
-
<div class="line"><a name="
|
|
985
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00555">555</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
986
|
+
<div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div>
|
|
987
|
+
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">if</span> (objTys.empty()) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
988
|
+
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="comment">// map type size to types from with key in descending order</span></div>
|
|
989
|
+
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<u32_t, OrderedSet<const Type *></a>, std::greater<int>> typeSzToTypes;</div>
|
|
990
|
+
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *ty: objTys)</div>
|
|
991
|
+
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  {</div>
|
|
992
|
+
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  typeSzToTypes[<a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(ty)].insert(ty);</div>
|
|
993
|
+
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  }</div>
|
|
994
|
+
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  assert(!typeSzToTypes.empty() && <span class="stringliteral">"typeSzToTypes cannot be empty"</span>);</div>
|
|
995
|
+
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet<const Type *></a> largestTypes;</div>
|
|
996
|
+
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  std::tie(std::ignore, largestTypes) = *typeSzToTypes.begin();</div>
|
|
997
|
+
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  assert(!largestTypes.empty() && <span class="stringliteral">"largest element cannot be empty"</span>);</div>
|
|
998
|
+
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">return</span> *largestTypes.begin();</div>
|
|
999
|
+
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
|
|
1002
1000
|
</div><!-- fragment -->
|
|
1003
1001
|
</div>
|
|
1004
1002
|
</div>
|
|
@@ -1034,19 +1032,19 @@ Private Attributes</h2></td></tr>
|
|
|
1034
1032
|
</table>
|
|
1035
1033
|
</div><div class="memdoc">
|
|
1036
1034
|
|
|
1037
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
1038
|
-
<div class="fragment"><div class="line"><a name="
|
|
1039
|
-
<div class="line"><a name="
|
|
1040
|
-
<div class="line"><a name="
|
|
1041
|
-
<div class="line"><a name="
|
|
1042
|
-
<div class="line"><a name="
|
|
1043
|
-
<div class="line"><a name="
|
|
1044
|
-
<div class="line"><a name="
|
|
1045
|
-
<div class="line"><a name="
|
|
1046
|
-
<div class="line"><a name="
|
|
1047
|
-
<div class="line"><a name="
|
|
1048
|
-
<div class="line"><a name="
|
|
1049
|
-
<div class="line"><a name="
|
|
1035
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00532">532</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
1036
|
+
<div class="fragment"><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div>
|
|
1037
|
+
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor">#if TYPE_DEBUG</span></div>
|
|
1038
|
+
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *oTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(oPTy);</div>
|
|
1039
|
+
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> iTyNum = <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(iTy);</div>
|
|
1040
|
+
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5b55fce942ab6d7995541f3fe0503f8">getNumOfElements</a>(oTy) > iTyNum)</div>
|
|
1041
|
+
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  {</div>
|
|
1042
|
+
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">"original type is:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(oTy));</div>
|
|
1043
|
+
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <a class="code" href="ObjTypeInference_8cpp.html#aa73dde570491da218d3ef11359f16955">ERR_MSG</a>(<span class="stringliteral">"infered type is:"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(iTy));</div>
|
|
1044
|
+
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <a class="code" href="ObjTypeInference_8cpp.html#a54176d0866e198769367b0dc65e049b5">ABORT_MSG</a>(<span class="stringliteral">"wrong type, trace ID is "</span> + std::to_string(traceId) + <span class="stringliteral">":"</span> + <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(val));</div>
|
|
1045
|
+
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  }</div>
|
|
1046
|
+
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor">#endif</span></div>
|
|
1047
|
+
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div>
|
|
1050
1048
|
</div><!-- fragment -->
|
|
1051
1049
|
</div>
|
|
1052
1050
|
</div>
|
|
@@ -1074,30 +1072,30 @@ Private Attributes</h2></td></tr>
|
|
|
1074
1072
|
</dd>
|
|
1075
1073
|
</dl>
|
|
1076
1074
|
|
|
1077
|
-
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#
|
|
1078
|
-
<div class="fragment"><div class="line"><a name="
|
|
1079
|
-
<div class="line"><a name="
|
|
1080
|
-
<div class="line"><a name="
|
|
1081
|
-
<div class="line"><a name="
|
|
1082
|
-
<div class="line"><a name="
|
|
1083
|
-
<div class="line"><a name="
|
|
1084
|
-
<div class="line"><a name="
|
|
1085
|
-
<div class="line"><a name="
|
|
1086
|
-
<div class="line"><a name="
|
|
1087
|
-
<div class="line"><a name="
|
|
1088
|
-
<div class="line"><a name="
|
|
1089
|
-
<div class="line"><a name="
|
|
1090
|
-
<div class="line"><a name="
|
|
1091
|
-
<div class="line"><a name="
|
|
1092
|
-
<div class="line"><a name="
|
|
1093
|
-
<div class="line"><a name="
|
|
1094
|
-
<div class="line"><a name="
|
|
1095
|
-
<div class="line"><a name="
|
|
1096
|
-
<div class="line"><a name="
|
|
1097
|
-
<div class="line"><a name="
|
|
1098
|
-
<div class="line"><a name="
|
|
1099
|
-
<div class="line"><a name="
|
|
1100
|
-
<div class="line"><a name="
|
|
1075
|
+
<p class="definition">Definition at line <a class="el" href="ObjTypeInference_8cpp_source.html#l00507">507</a> of file <a class="el" href="ObjTypeInference_8cpp_source.html">ObjTypeInference.cpp</a>.</p>
|
|
1076
|
+
<div class="fragment"><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> {</div>
|
|
1077
|
+
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = cs->getCalledFunction())</div>
|
|
1078
|
+
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  {</div>
|
|
1079
|
+
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">if</span> (func->getName().find(<a class="code" href="ObjTypeInference_8cpp.html#a5f334de99eb942058f27a1025c346f70">TYPEMALLOC</a>) != std::string::npos)</div>
|
|
1080
|
+
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  {</div>
|
|
1081
|
+
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *objType = <a class="code" href="classSVF_1_1ObjTypeInference.html#abf0978f7128506f7d19996f184fe8154">fwInferObjType</a>(cs);</div>
|
|
1082
|
+
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *pInt =</div>
|
|
1083
|
+
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  SVFUtil::dyn_cast<llvm::ConstantInt>(cs->getOperand(1));</div>
|
|
1084
|
+
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  assert(pInt && <span class="stringliteral">"the second argument is a integer"</span>);</div>
|
|
1085
|
+
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> iTyNum = <a class="code" href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">objTyToNumFields</a>(objType);</div>
|
|
1086
|
+
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">if</span> (iTyNum >= pInt->getZExtValue())</div>
|
|
1087
|
+
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVFUtil::sucMsg</a>(<span class="stringliteral">"\t SUCCESS :"</span>) << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs)</div>
|
|
1088
|
+
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">" TYPE: "</span>)</div>
|
|
1089
|
+
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) << <span class="stringliteral">"\n"</span>;</div>
|
|
1090
|
+
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">else</span></div>
|
|
1091
|
+
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div>
|
|
1092
|
+
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVFUtil::errMsg</a>(<span class="stringliteral">"\t FAILURE :"</span>) << <span class="stringliteral">":"</span> << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a86c0a0cb4ada72bd4f42c77558e6a350">dumpValueAndDbgInfo</a>(cs) << <span class="stringliteral">" TYPE: "</span></div>
|
|
1093
|
+
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  << <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6e8682537cf5bed808df439bd7e1add9">dumpType</a>(objType) << <span class="stringliteral">"\n"</span>;</div>
|
|
1094
|
+
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  abort();</div>
|
|
1095
|
+
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div>
|
|
1096
|
+
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  }</div>
|
|
1097
|
+
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div>
|
|
1098
|
+
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div>
|
|
1101
1099
|
</div><!-- fragment -->
|
|
1102
1100
|
</div>
|
|
1103
1101
|
</div>
|
|
@@ -1194,6 +1192,7 @@ Private Attributes</h2></td></tr>
|
|
|
1194
1192
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a50fc24901350df9db890ba16a9b87e33"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00202">LLVMModule.h:202</a></div></div>
|
|
1195
1193
|
<div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
|
|
1196
1194
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2064cb70c76f399ce115f2621adea35"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVF::SVFUtil::isHeapAllocExtCallViaRet</a></div><div class="ttdeci">bool isHeapAllocExtCallViaRet(const CallSite cs)</div><div class="ttdoc">interfaces to be used externally</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00442">SVFUtil.h:442</a></div></div>
|
|
1195
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a205fa59a7250270b216f47df78ef2319"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference::selectLargestSizedType</a></div><div class="ttdeci">const Type * selectLargestSizedType(Set< const Type * > &objTys)</div><div class="ttdoc">Select the largest (conservative) type from all types.</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00555">ObjTypeInference.cpp:555</a></div></div>
|
|
1197
1196
|
<div class="ttc" id="anamespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
|
|
1198
1197
|
<div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00144">BasicTypes.h:144</a></div></div>
|
|
1199
1198
|
<div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
|
|
@@ -1207,19 +1206,20 @@ Private Attributes</h2></td></tr>
|
|
|
1207
1206
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac1a9d20d62066ec4e181fad223669e32"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">SVF::LLVMModuleSet::getContext</a></div><div class="ttdeci">LLVMContext & getContext() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00332">LLVMModule.h:332</a></div></div>
|
|
1208
1207
|
<div class="ttc" id="acJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
|
|
1209
1208
|
<div class="ttc" id="anamespaceSVF_html_ac8d4990439af7a2ecca7e15383119674"><div class="ttname"><a href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">SVF::PHINode</a></div><div class="ttdeci">llvm::PHINode PHINode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00163">BasicTypes.h:163</a></div></div>
|
|
1210
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a5eae038a7bffb0549ca75cd9c850ff1e"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">SVF::ObjTypeInference::objTyToNumFields</a></div><div class="ttdeci">u32_t objTyToNumFields(const Type *objTy)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
1209
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a5eae038a7bffb0549ca75cd9c850ff1e"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a5eae038a7bffb0549ca75cd9c850ff1e">SVF::ObjTypeInference::objTyToNumFields</a></div><div class="ttdeci">u32_t objTyToNumFields(const Type *objTy)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00571">ObjTypeInference.cpp:571</a></div></div>
|
|
1211
1210
|
<div class="ttc" id="anamespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00092">BasicTypes.h:92</a></div></div>
|
|
1212
1211
|
<div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
|
|
1213
1212
|
<div class="ttc" id="aclassSVF_1_1FILOWorkList_html_afcf3fcda18e8d3e2bad70a51376c0ce1"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">SVF::FILOWorkList::push</a></div><div class="ttdeci">bool push(const Data &data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00257">WorkList.h:257</a></div></div>
|
|
1214
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af8113e432377917c1a0de9ab100aaafe"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af8113e432377917c1a0de9ab100aaafe">SVF::ObjTypeInference::isAllocation</a></div><div class="ttdeci">bool isAllocation(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
1215
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_aff3be73b7348c0e4dece6a9b5b1bd1f1"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#aff3be73b7348c0e4dece6a9b5b1bd1f1">SVF::ObjTypeInference::selectLargestType</a></div><div class="ttdeci">const Type * selectLargestType(Set< const Type * > &objTys)</div><div class="ttdoc">Select the largest (conservative) type from all types.</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00557">ObjTypeInference.cpp:557</a></div></div>
|
|
1213
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_af8113e432377917c1a0de9ab100aaafe"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#af8113e432377917c1a0de9ab100aaafe">SVF::ObjTypeInference::isAllocation</a></div><div class="ttdeci">bool isAllocation(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00498">ObjTypeInference.cpp:498</a></div></div>
|
|
1216
1214
|
<div class="ttc" id="anamespaceSVF_html_ac4e93e1fec646ff222940a663843921b"><div class="ttname"><a href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">SVF::GetElementPtrInst</a></div><div class="ttdeci">llvm::GetElementPtrInst GetElementPtrInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00160">BasicTypes.h:160</a></div></div>
|
|
1217
1215
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a18edeb47fb7734eb17ba3a84181cbc16"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a18edeb47fb7734eb17ba3a84181cbc16">SVF::ObjTypeInference::_valueToAllocs</a></div><div class="ttdeci">ValueToSources _valueToAllocs</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00055">ObjTypeInference.h:55</a></div></div>
|
|
1216
|
+
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a72502f7f536418621485e90ab98c2016"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVF::SVFUtil::move</a></div><div class="ttdeci">constexpr std::remove_reference< T >::type && move(T &&t) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00621">SVFUtil.h:621</a></div></div>
|
|
1218
1217
|
<div class="ttc" id="aclassSVF_1_1SVFFunction_html_ac4c28c8d205d354f3a982119f29f2aac"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4c28c8d205d354f3a982119f29f2aac">SVF::SVFFunction::getExitBB</a></div><div class="ttdeci">const SVFBasicBlock * getExitBB() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00193">SVFValue.cpp:193</a></div></div>
|
|
1219
1218
|
<div class="ttc" id="anamespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
|
|
1220
1219
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_aee4383a13cda421acb034ea147e33a6d"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#aee4383a13cda421acb034ea147e33a6d">SVF::ObjTypeInference::defaultType</a></div><div class="ttdeci">const Type * defaultType(const Value *val)</div><div class="ttdoc">Default type.</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00112">ObjTypeInference.cpp:112</a></div></div>
|
|
1221
1220
|
<div class="ttc" id="anamespaceSVF_html_afc50da46a6ea7c2cf61683bbec4d7c8d"><div class="ttname"><a href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">SVF::BitCastInst</a></div><div class="ttdeci">llvm::BitCastInst BitCastInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00151">BasicTypes.h:151</a></div></div>
|
|
1222
|
-
<div class="ttc" id="
|
|
1221
|
+
<div class="ttc" id="anamespaceSVF_html_a4f21e91ff8eaea5207afe5c60dbd78d7"><div class="ttname"><a href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">SVF::OrderedSet</a></div><div class="ttdeci">std::set< Key, Compare, Allocator > OrderedSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00106">SVFType.h:106</a></div></div>
|
|
1222
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a707f0575f3d70e62a78f08c961ec7dae"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a707f0575f3d70e62a78f08c961ec7dae">SVF::ObjTypeInference::bwfindAllocations</a></div><div class="ttdeci">Set< const Value * > bwfindAllocations(const Value *startValue)</div><div class="ttdoc">Backward collect all possible allocation sites (stack, static, heap) starting from a value.</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00376">ObjTypeInference.cpp:376</a></div></div>
|
|
1223
1223
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
|
|
1224
1224
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a05dc00b2bd9a8176aae31b6cfffe725d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a05dc00b2bd9a8176aae31b6cfffe725d">SVF::SVFUtil::sucMsg</a></div><div class="ttdeci">std::string sucMsg(const std::string &msg)</div><div class="ttdoc">Returns successful message by converting a string into green string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00053">SVFUtil.cpp:53</a></div></div>
|
|
1225
1225
|
<div class="ttc" id="aObjTypeInference_8cpp_html_a5f334de99eb942058f27a1025c346f70"><div class="ttname"><a href="ObjTypeInference_8cpp.html#a5f334de99eb942058f27a1025c346f70">TYPEMALLOC</a></div><div class="ttdeci">const std::string TYPEMALLOC</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00079">ObjTypeInference.cpp:79</a></div></div>
|
|
@@ -1231,7 +1231,7 @@ Private Attributes</h2></td></tr>
|
|
|
1231
1231
|
<div class="ttc" id="aclassSVF_1_1FILOWorkList_html_a3fd9acb6d09fd142bfd402fdf8cac93b"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">SVF::FILOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00272">WorkList.h:272</a></div></div>
|
|
1232
1232
|
<div class="ttc" id="aclassSVF_1_1FILOWorkList_html"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00229">WorkList.h:229</a></div></div>
|
|
1233
1233
|
<div class="ttc" id="aclassSVF_1_1Options_html_aaab923c093730b1670a54f09340b1bd5"><div class="ttname"><a href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const Option< u32_t > MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
|
|
1234
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a72da2d7f06e8fee67dc5b3c451fa5dee"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">SVF::ObjTypeInference::getArgPosInCall</a></div><div class="ttdeci">u32_t getArgPosInCall(const CallBase *callBase, const Value *arg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
1234
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a72da2d7f06e8fee67dc5b3c451fa5dee"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a72da2d7f06e8fee67dc5b3c451fa5dee">SVF::ObjTypeInference::getArgPosInCall</a></div><div class="ttdeci">u32_t getArgPosInCall(const CallBase *callBase, const Value *arg)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00546">ObjTypeInference.cpp:546</a></div></div>
|
|
1235
1235
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_ad9ceac3c884a08ce0ae4fef4b488a7c5"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#ad9ceac3c884a08ce0ae4fef4b488a7c5">SVF::ObjTypeInference::_valueToType</a></div><div class="ttdeci">ValueToType _valueToType</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8h_source.html#l00054">ObjTypeInference.h:54</a></div></div>
|
|
1236
1236
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a172f97ff9c9a7c90dbec6329c89775ad"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a172f97ff9c9a7c90dbec6329c89775ad">SVF::ObjTypeInference::getLLVMCtx</a></div><div class="ttdeci">LLVMContext & getLLVMCtx()</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00123">ObjTypeInference.cpp:123</a></div></div>
|
|
1237
1237
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00099">LLVMUtil.h:99</a></div></div>
|