svf-tools 1.0.564 → 1.0.565

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +1 -2
  2. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +11 -10
  3. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +10 -9
  4. package/SVF-doxygen/html/html/CFLGrammar_8txt.html +37 -37
  5. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -2
  6. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -2
  7. package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
  8. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -2
  9. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -2
  10. package/SVF-doxygen/html/html/PEGGrammar_8txt.html +37 -138
  11. package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
  12. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +1 -2
  13. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
  14. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  15. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  16. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  17. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  18. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  19. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +12 -11
  20. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +63 -28
  21. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
  22. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +7 -10
  23. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +12 -12
  24. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -2
  25. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  26. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +2 -3
  27. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
  28. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +1 -1
  29. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  30. package/SVF-doxygen/html/html/functions_b.html +12 -9
  31. package/SVF-doxygen/html/html/functions_func_b.html +5 -2
  32. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  33. package/SVF-doxygen/html/html/functions_i.html +3 -3
  34. package/SVF-doxygen/html/html/functions_l.html +6 -6
  35. package/SVF-doxygen/html/html/functions_o.html +3 -3
  36. package/SVF-doxygen/html/html/functions_p.html +14 -14
  37. package/SVF-doxygen/html/html/functions_s.html +7 -7
  38. package/SVF-doxygen/html/html/functions_w.html +11 -11
  39. package/SVF-doxygen/html/html/globals_a.html +0 -1
  40. package/SVF-doxygen/html/html/globals_c.html +5 -6
  41. package/SVF-doxygen/html/html/globals_e.html +0 -1
  42. package/SVF-doxygen/html/html/globals_f.html +2 -3
  43. package/SVF-doxygen/html/html/globals_func.html +3 -0
  44. package/SVF-doxygen/html/html/globals_g.html +5 -7
  45. package/SVF-doxygen/html/html/globals_m.html +3 -6
  46. package/SVF-doxygen/html/html/globals_vars.html +10 -19
  47. package/SVF-doxygen/html/html/namespaceSVF.html +2 -2
  48. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  49. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +4 -4
  50. package/SVF-doxygen/html/html/search/all_1.js +1 -1
  51. package/SVF-doxygen/html/html/search/all_10.js +6 -6
  52. package/SVF-doxygen/html/html/search/all_11.js +1 -1
  53. package/SVF-doxygen/html/html/search/all_12.js +8 -8
  54. package/SVF-doxygen/html/html/search/all_13.js +4 -4
  55. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  56. package/SVF-doxygen/html/html/search/all_2.js +1 -0
  57. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  58. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  59. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  60. package/SVF-doxygen/html/html/search/all_7.js +4 -4
  61. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  62. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  63. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  64. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  65. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  66. package/SVF-doxygen/html/html/search/functions_1.js +1 -0
  67. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  68. package/SVF-doxygen/html/html/search/functions_5.js +1 -0
  69. package/SVF-doxygen/html/html/search/variables_1.js +1 -1
  70. package/SVF-doxygen/html/html/search/variables_13.js +2 -2
  71. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  72. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  73. package/SVF-doxygen/html/html/search/variables_6.js +2 -2
  74. package/SVF-doxygen/html/html/search/variables_7.js +4 -4
  75. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  76. package/include/CFL/CFGNormalizer.h +3 -1
  77. package/include/CFL/PEGGrammar.txt +5 -18
  78. package/lib/CFL/CFGNormalizer.cpp +57 -6
  79. package/package.json +1 -1
@@ -209,7 +209,7 @@ Public Member Functions</h2></td></tr>
209
209
  <tr class="memitem:a25b38896aef06dad19532f7678291b37"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFLAlias.html#a25b38896aef06dad19532f7678291b37">onTheFlyCallGraphSolve</a> (const <a class="el" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a> &amp;callsites, <a class="el" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> &amp;newEdges)</td></tr>
210
210
  <tr class="memdesc:a25b38896aef06dad19532f7678291b37"><td class="mdescLeft">&#160;</td><td class="mdescRight">On the fly call graph construction. <a href="#a25b38896aef06dad19532f7678291b37">More...</a><br /></td></tr>
211
211
  <tr class="separator:a25b38896aef06dad19532f7678291b37"><td class="memSeparator" colspan="2">&#160;</td></tr>
212
- <tr class="memitem:abfab36c0d5edbdfb94e617bed61ba875"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFLAlias.html#abfab36c0d5edbdfb94e617bed61ba875">connectCaller2CalleeParams</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs, const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
212
+ <tr class="memitem:abfab36c0d5edbdfb94e617bed61ba875"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFLAlias.html#abfab36c0d5edbdfb94e617bed61ba875">connectCaller2CalleeParams</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs, const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
213
213
  <tr class="memdesc:abfab36c0d5edbdfb94e617bed61ba875"><td class="mdescLeft">&#160;</td><td class="mdescRight">Connect formal and actual parameters for indirect callsites. <a href="#abfab36c0d5edbdfb94e617bed61ba875">More...</a><br /></td></tr>
214
214
  <tr class="separator:abfab36c0d5edbdfb94e617bed61ba875"><td class="memSeparator" colspan="2">&#160;</td></tr>
215
215
  <tr class="memitem:a40841c2b47cf690af5c13ba7662d0863"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CFLAlias.html#a40841c2b47cf690af5c13ba7662d0863">heapAllocatorViaIndCall</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs)</td></tr>
@@ -89,13 +89,13 @@ Public Member Functions</h2></td></tr>
89
89
  <tr class="separator:aa5c672ac426ad4085d64d97f8cb14ace"><td class="memSeparator" colspan="2">&#160;</td></tr>
90
90
  <tr class="memitem:a648e97899c16a5634fc8369aef8a031f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a> (const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *V)</td></tr>
91
91
  <tr class="separator:a648e97899c16a5634fc8369aef8a031f"><td class="memSeparator" colspan="2">&#160;</td></tr>
92
- <tr class="memitem:a51a07b2bd7cccf7c9ab24eb87db17216"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a51a07b2bd7cccf7c9ab24eb87db17216">buildCHGNodes</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
92
+ <tr class="memitem:a51a07b2bd7cccf7c9ab24eb87db17216"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a51a07b2bd7cccf7c9ab24eb87db17216">buildCHGNodes</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
93
93
  <tr class="separator:a51a07b2bd7cccf7c9ab24eb87db17216"><td class="memSeparator" colspan="2">&#160;</td></tr>
94
- <tr class="memitem:a7420a3a4858ebe861aaa47d76f49ab1f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">buildCHGEdges</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
94
+ <tr class="memitem:a7420a3a4858ebe861aaa47d76f49ab1f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">buildCHGEdges</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
95
95
  <tr class="separator:a7420a3a4858ebe861aaa47d76f49ab1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
96
96
  <tr class="memitem:ad9f1c51ba6dc279f22aa671f29257a50"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#ad9f1c51ba6dc279f22aa671f29257a50">buildInternalMaps</a> ()</td></tr>
97
97
  <tr class="separator:ad9f1c51ba6dc279f22aa671f29257a50"><td class="memSeparator" colspan="2">&#160;</td></tr>
98
- <tr class="memitem:a443b021eb2b08b92164515750385b058"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">readInheritanceMetadataFromModule</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;<a class="el" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>)</td></tr>
98
+ <tr class="memitem:a443b021eb2b08b92164515750385b058"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">readInheritanceMetadataFromModule</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M)</td></tr>
99
99
  <tr class="separator:a443b021eb2b08b92164515750385b058"><td class="memSeparator" colspan="2">&#160;</td></tr>
100
100
  <tr class="memitem:a8e915f257224b1d8e40d0e4c9b5e1df0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1CHNode.html">CHNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a8e915f257224b1d8e40d0e4c9b5e1df0">createNode</a> (const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> <a class="el" href="cJSON_8cpp.html#acc128f98d9ceca227038c771308eff39">name</a>)</td></tr>
101
101
  <tr class="separator:a8e915f257224b1d8e40d0e4c9b5e1df0"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -107,7 +107,7 @@ Public Member Functions</h2></td></tr>
107
107
  <tr class="separator:ae7832c277f0ff86f3ae750aac6063adb"><td class="memSeparator" colspan="2">&#160;</td></tr>
108
108
  <tr class="memitem:a444dba7f18bee07a6cad51f88bb63e30"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a444dba7f18bee07a6cad51f88bb63e30">getInstancesAndDescendants</a> (const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> className)</td></tr>
109
109
  <tr class="separator:a444dba7f18bee07a6cad51f88bb63e30"><td class="memSeparator" colspan="2">&#160;</td></tr>
110
- <tr class="memitem:a2828eb6b2bd86d6f279967c34da8e7e4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">analyzeVTables</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;<a class="el" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>)</td></tr>
110
+ <tr class="memitem:a2828eb6b2bd86d6f279967c34da8e7e4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">analyzeVTables</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M)</td></tr>
111
111
  <tr class="separator:a2828eb6b2bd86d6f279967c34da8e7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
112
112
  <tr class="memitem:aa677ac2c640ee7fc0dab1d4fe508ead8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CHGBuilder.html#aa677ac2c640ee7fc0dab1d4fe508ead8">buildVirtualFunctionToIDMap</a> ()</td></tr>
113
113
  <tr class="separator:aa677ac2c640ee7fc0dab1d4fe508ead8"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -243,7 +243,7 @@ Private Attributes</h2></td></tr>
243
243
  </div><div class="memdoc">
244
244
 
245
245
  <p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00369">369</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
246
- <div class="fragment"><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">for</span> (Module::const_global_iterator I = <a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>.global_begin(),</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; E = <a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>.global_end(); I != E; ++I)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *globalvalue = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>&gt;(&amp;(*I));</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">isValVtbl</a>(globalvalue) &amp;&amp; globalvalue-&gt;getNumOperands() &gt; 0)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct =</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>&gt;(globalvalue-&gt;getOperand(0));</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; assert(vtblStruct &amp;&amp; <span class="stringliteral">&quot;Initializer of a vtable not a struct?&quot;</span>);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">string</span> vtblClassName = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">getClassNameFromVtblObj</a>(globalvalue);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(vtblClassName);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; assert(node &amp;&amp; <span class="stringliteral">&quot;node not found?&quot;</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(globalvalue);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ei = 0; ei &lt; vtblStruct-&gt;getNumOperands(); ++ei)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl =</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>&gt;(vtblStruct-&gt;getOperand(ei));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; assert(vtbl &amp;&amp; <span class="stringliteral">&quot;Element of initializer not an array?&quot;</span>);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"> * items in vtables can be classified into 3 categories:</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment"> * 1. i8* null</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment"> * 2. i8* inttoptr xxx</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment"> * 3. i8* bitcast xxx</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">bool</span> pure_abstract = <span class="keyword">true</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">while</span> (i &lt; vtbl-&gt;getNumOperands())</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> virtualFunctions;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordtype">bool</span> is_virtual = <span class="keyword">false</span>; <span class="comment">// virtual inheritance</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordtype">int</span> null_ptr_num = 0;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">for</span> (; i &lt; vtbl-&gt;getNumOperands(); ++i)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(vtbl-&gt;getOperand(i)))</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (i &gt; 0 &amp;&amp; !SVFUtil::isa&lt;ConstantPointerNull&gt;(vtbl-&gt;getOperand(i-1)))</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce =</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>&gt;(vtbl-&gt;getOperand(i-1));</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (ce-&gt;getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce-&gt;getOperand(0);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">string</span> bitcastValueName = bitcastValue-&gt;getName().str();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span> (bitcastValueName.compare(0, <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>.size(), <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>) == 0)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; is_virtual = <span class="keyword">true</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; null_ptr_num = 1;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">while</span> (i+null_ptr_num &lt; vtbl-&gt;getNumOperands())</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(vtbl-&gt;getOperand(i+null_ptr_num)))</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; null_ptr_num++;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce =</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>&gt;(vtbl-&gt;getOperand(i));</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; assert(ce != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;item in vtable not constantexp or null&quot;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = ce-&gt;getOpcode();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; assert(opcode == Instruction::IntToPtr ||</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; opcode == Instruction::BitCast);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; assert(ce-&gt;getNumOperands() == 1 &amp;&amp;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="stringliteral">&quot;inttptr or bitcast operand num not 1&quot;</span>);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (opcode == Instruction::IntToPtr)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>();</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; ++i;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (opcode == Instruction::BitCast)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce-&gt;getOperand(0);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordtype">string</span> bitcastValueName = bitcastValue-&gt;getName().str();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment"> * value in bitcast:</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment"> * _ZTIXXX</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"> * Function</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> * GlobalAlias (alias to other function)</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; assert(SVFUtil::isa&lt;Function&gt;(bitcastValue) ||</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; SVFUtil::isa&lt;GlobalValue&gt;(bitcastValue));</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* f = SVFUtil::dyn_cast&lt;Function&gt;(bitcastValue))</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(f);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (func-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>().compare(<a class="code" href="CHGBuilder_8cpp.html#a5b49460faf973332d3cbfc561c994c6c">pureVirtualFunName</a>) == 0)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; pure_abstract &amp;= <span class="keyword">true</span>;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; pure_abstract &amp;= <span class="keyword">false</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(func-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>());</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">if</span> (dname.className.size() &gt; 0 &amp;&amp;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; vtblClassName.compare(dname.className) != 0)</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(vtblClassName, dname.className, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a> *alias =</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; SVFUtil::dyn_cast&lt;GlobalAlias&gt;(bitcastValue))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *aliasValue = alias-&gt;getAliasee();</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* aliasFunc =</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; SVFUtil::dyn_cast&lt;Function&gt;(aliasValue))</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(aliasFunc);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *aliasconst =</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; SVFUtil::dyn_cast&lt;ConstantExpr&gt;(aliasValue))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> aliasopcode = aliasconst-&gt;getOpcode();</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; assert(aliasopcode == Instruction::BitCast &amp;&amp;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="stringliteral">&quot;aliased constantexpr in vtable not a bitcast&quot;</span>);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* aliasbitcastfunc =</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(aliasconst-&gt;getOperand(0));</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; assert(aliasbitcastfunc &amp;&amp;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="stringliteral">&quot;aliased bitcast in vtable not a function&quot;</span>);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(aliasbitcastfunc);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;alias not function or bitcast&quot;</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; pure_abstract &amp;= <span class="keyword">false</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bitcastValueName.compare(0, <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>.size(),</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>) == 0)</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; assert(<span class="stringliteral">&quot;what else can be in bitcast of a vtable?&quot;</span>);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (is_virtual &amp;&amp; virtualFunctions.size() &gt; 0)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; null_ptr_num; ++i)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = virtualFunctions[i];</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; virtualFunctions.insert(virtualFunctions.begin(), fun);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span> (virtualFunctions.size() &gt; 0)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(virtualFunctions);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span> (pure_abstract == <span class="keyword">true</span>)</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>();</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00064">BasicTypes.h:64</a></div></div>
246
+ <div class="fragment"><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">for</span> (Module::const_global_iterator I = M.global_begin(),</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; E = M.global_end(); I != E; ++I)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *globalvalue = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>&gt;(&amp;(*I));</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">isValVtbl</a>(globalvalue) &amp;&amp; globalvalue-&gt;getNumOperands() &gt; 0)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct =</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>&gt;(globalvalue-&gt;getOperand(0));</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; assert(vtblStruct &amp;&amp; <span class="stringliteral">&quot;Initializer of a vtable not a struct?&quot;</span>);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">string</span> vtblClassName = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad83c097f1c77cdf52fc219ef07ee0b1a">getClassNameFromVtblObj</a>(globalvalue);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">getNode</a>(vtblClassName);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; assert(node &amp;&amp; <span class="stringliteral">&quot;node not found?&quot;</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(globalvalue);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ei = 0; ei &lt; vtblStruct-&gt;getNumOperands(); ++ei)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl =</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>&gt;(vtblStruct-&gt;getOperand(ei));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; assert(vtbl &amp;&amp; <span class="stringliteral">&quot;Element of initializer not an array?&quot;</span>);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"> * items in vtables can be classified into 3 categories:</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment"> * 1. i8* null</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment"> * 2. i8* inttoptr xxx</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment"> * 3. i8* bitcast xxx</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">bool</span> pure_abstract = <span class="keyword">true</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">while</span> (i &lt; vtbl-&gt;getNumOperands())</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">CHNode::FuncVector</a> virtualFunctions;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordtype">bool</span> is_virtual = <span class="keyword">false</span>; <span class="comment">// virtual inheritance</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordtype">int</span> null_ptr_num = 0;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">for</span> (; i &lt; vtbl-&gt;getNumOperands(); ++i)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(vtbl-&gt;getOperand(i)))</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (i &gt; 0 &amp;&amp; !SVFUtil::isa&lt;ConstantPointerNull&gt;(vtbl-&gt;getOperand(i-1)))</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce =</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>&gt;(vtbl-&gt;getOperand(i-1));</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (ce-&gt;getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce-&gt;getOperand(0);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">string</span> bitcastValueName = bitcastValue-&gt;getName().str();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span> (bitcastValueName.compare(0, <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>.size(), <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>) == 0)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; is_virtual = <span class="keyword">true</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; null_ptr_num = 1;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">while</span> (i+null_ptr_num &lt; vtbl-&gt;getNumOperands())</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(vtbl-&gt;getOperand(i+null_ptr_num)))</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; null_ptr_num++;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce =</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>&gt;(vtbl-&gt;getOperand(i));</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; assert(ce != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;item in vtable not constantexp or null&quot;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = ce-&gt;getOpcode();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; assert(opcode == Instruction::IntToPtr ||</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; opcode == Instruction::BitCast);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; assert(ce-&gt;getNumOperands() == 1 &amp;&amp;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="stringliteral">&quot;inttptr or bitcast operand num not 1&quot;</span>);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (opcode == Instruction::IntToPtr)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>();</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; ++i;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (opcode == Instruction::BitCast)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *bitcastValue = ce-&gt;getOperand(0);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordtype">string</span> bitcastValueName = bitcastValue-&gt;getName().str();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment"> * value in bitcast:</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment"> * _ZTIXXX</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"> * Function</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> * GlobalAlias (alias to other function)</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; assert(SVFUtil::isa&lt;Function&gt;(bitcastValue) ||</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; SVFUtil::isa&lt;GlobalValue&gt;(bitcastValue));</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* f = SVFUtil::dyn_cast&lt;Function&gt;(bitcastValue))</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(f);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (func-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>().compare(<a class="code" href="CHGBuilder_8cpp.html#a5b49460faf973332d3cbfc561c994c6c">pureVirtualFunName</a>) == 0)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; pure_abstract &amp;= <span class="keyword">true</span>;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; pure_abstract &amp;= <span class="keyword">false</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(func-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>());</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">if</span> (dname.className.size() &gt; 0 &amp;&amp;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; vtblClassName.compare(dname.className) != 0)</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(vtblClassName, dname.className, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a> *alias =</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; SVFUtil::dyn_cast&lt;GlobalAlias&gt;(bitcastValue))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *aliasValue = alias-&gt;getAliasee();</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* aliasFunc =</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; SVFUtil::dyn_cast&lt;Function&gt;(aliasValue))</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(aliasFunc);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *aliasconst =</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; SVFUtil::dyn_cast&lt;ConstantExpr&gt;(aliasValue))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> aliasopcode = aliasconst-&gt;getOpcode();</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; assert(aliasopcode == Instruction::BitCast &amp;&amp;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="stringliteral">&quot;aliased constantexpr in vtable not a bitcast&quot;</span>);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* aliasbitcastfunc =</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(aliasconst-&gt;getOperand(0));</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; assert(aliasbitcastfunc &amp;&amp;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="stringliteral">&quot;aliased bitcast in vtable not a function&quot;</span>);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(aliasbitcastfunc);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a77753749b34b00c18d419057b4757a26">addFuncToFuncVector</a>(virtualFunctions, func);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;alias not function or bitcast&quot;</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; pure_abstract &amp;= <span class="keyword">false</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bitcastValueName.compare(0, <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>.size(),</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="CHGBuilder_8cpp.html#a4ecb39b2fb5510fb20341373b7ad5450">ztiLabel</a>) == 0)</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; assert(<span class="stringliteral">&quot;what else can be in bitcast of a vtable?&quot;</span>);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (is_virtual &amp;&amp; virtualFunctions.size() &gt; 0)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; null_ptr_num; ++i)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = virtualFunctions[i];</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; virtualFunctions.insert(virtualFunctions.begin(), fun);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span> (virtualFunctions.size() &gt; 0)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(virtualFunctions);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span> (pure_abstract == <span class="keyword">true</span>)</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; node-&gt;<a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>();</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00064">BasicTypes.h:64</a></div></div>
247
247
  <div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
248
248
  <div class="ttc" id="classSVF_1_1CHGraph_html_a7beec68a60036c93a741a7152e8198b6"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7beec68a60036c93a741a7152e8198b6">SVF::CHGraph::getNode</a></div><div class="ttdeci">CHNode * getNode(const std::string name) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00088">CHG.cpp:88</a></div></div>
249
249
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00125">BasicTypes.h:125</a></div></div>
@@ -271,7 +271,6 @@ Private Attributes</h2></td></tr>
271
271
  <div class="ttc" id="namespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00053">BasicTypes.h:53</a></div></div>
272
272
  <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00061">BasicTypes.h:61</a></div></div>
273
273
  <div class="ttc" id="CHGBuilder_8cpp_html_a5b49460faf973332d3cbfc561c994c6c"><div class="ttname"><a href="CHGBuilder_8cpp.html#a5b49460faf973332d3cbfc561c994c6c">pureVirtualFunName</a></div><div class="ttdeci">const string pureVirtualFunName</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00054">CHGBuilder.cpp:54</a></div></div>
274
- <div class="ttc" id="PEGGrammar_8txt_html_abd600039647a1e73c88e7161fa6eb989"><div class="ttname"><a href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a></div><div class="ttdeci">V M</div><div class="ttdef"><b>Definition:</b> <a href="PEGGrammar_8txt_source.html#l00010">PEGGrammar.txt:10</a></div></div>
275
274
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
276
275
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00114">LLVMModule.h:114</a></div></div>
277
276
  </div><!-- fragment -->
@@ -293,7 +292,7 @@ Private Attributes</h2></td></tr>
293
292
  </div><div class="memdoc">
294
293
 
295
294
  <p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00059">59</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
296
- <div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">double</span> timeStart, timeEnd;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; timeStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *<a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a> = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; assert(M &amp;&amp; <span class="stringliteral">&quot;module not found?&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;construct CHGraph From module &quot;</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; + M-&gt;getName().str() + <span class="stringliteral">&quot;...\n&quot;</span>));</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">readInheritanceMetadataFromModule</a>(*M);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (Module::const_global_iterator I = M-&gt;global_begin(), E = M-&gt;global_end(); I != E; ++I)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a>(&amp;(*I));</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> = M-&gt;begin(), E = M-&gt;end(); <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> != E; ++<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(&amp;(*<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> = M-&gt;begin(), E = M-&gt;end(); <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> != E; ++<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">buildCHGEdges</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(&amp;(*<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)));</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">analyzeVTables</a>(*M);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;build Internal Maps ...\n&quot;</span>));</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ad9f1c51ba6dc279f22aa671f29257a50">buildInternalMaps</a>();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; timeEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a> = (timeEnd - timeStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab13a47f6dd4eedfaa607d36448a1d456">Options::DumpCHA</a>)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a29351163649618332394fc72cc35212f">dump</a>(<span class="stringliteral">&quot;cha&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00041">BasicTypes.h:41</a></div></div>
295
+ <div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">double</span> timeStart, timeEnd;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; timeStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *M = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; assert(M &amp;&amp; <span class="stringliteral">&quot;module not found?&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;construct CHGraph From module &quot;</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; + M-&gt;getName().str() + <span class="stringliteral">&quot;...\n&quot;</span>));</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a443b021eb2b08b92164515750385b058">readInheritanceMetadataFromModule</a>(*M);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (Module::const_global_iterator I = M-&gt;global_begin(), E = M-&gt;global_end(); I != E; ++I)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a>(&amp;(*I));</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> = M-&gt;begin(), E = M-&gt;end(); <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> != E; ++<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">buildCHGNodes</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(&amp;(*<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> = M-&gt;begin(), E = M-&gt;end(); <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> != E; ++<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a7420a3a4858ebe861aaa47d76f49ab1f">buildCHGEdges</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(&amp;(*<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)));</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#a2828eb6b2bd86d6f279967c34da8e7e4">analyzeVTables</a>(*M);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;build Internal Maps ...\n&quot;</span>));</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ad9f1c51ba6dc279f22aa671f29257a50">buildInternalMaps</a>();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; timeEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a> = (timeEnd - timeStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab13a47f6dd4eedfaa607d36448a1d456">Options::DumpCHA</a>)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a29351163649618332394fc72cc35212f">dump</a>(<span class="stringliteral">&quot;cha&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00041">BasicTypes.h:41</a></div></div>
297
296
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
298
297
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a142e650415cb81011eb59dadd3cb0637"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">SVF::SVFUtil::getDefFunForMultipleModule</a></div><div class="ttdeci">const SVFFunction * getDefFunForMultipleModule(const Function *fun)</div><div class="ttdoc">Get the definition of a function across multiple modules. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00257">SVFUtil.h:257</a></div></div>
299
298
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
@@ -314,7 +313,6 @@ Private Attributes</h2></td></tr>
314
313
  <div class="ttc" id="CFLGrammar_8txt_html_a00967427d1c110ffcc82ea2a966f4564"><div class="ttname"><a href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a></div><div class="ttdeci">V Fbar V F</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00016">CFLGrammar.txt:16</a></div></div>
315
314
  <div class="ttc" id="classSVF_1_1CHGBuilder_html_a648e97899c16a5634fc8369aef8a031f"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#a648e97899c16a5634fc8369aef8a031f">SVF::CHGBuilder::buildCHGNodes</a></div><div class="ttdeci">void buildCHGNodes(const GlobalValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00091">CHGBuilder.cpp:91</a></div></div>
316
315
  <div class="ttc" id="classSVF_1_1Options_html_ab13a47f6dd4eedfaa607d36448a1d456"><div class="ttname"><a href="classSVF_1_1Options.html#ab13a47f6dd4eedfaa607d36448a1d456">SVF::Options::DumpCHA</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; DumpCHA</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00205">Options.h:205</a></div></div>
317
- <div class="ttc" id="PEGGrammar_8txt_html_abd600039647a1e73c88e7161fa6eb989"><div class="ttname"><a href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a></div><div class="ttdeci">V M</div><div class="ttdef"><b>Definition:</b> <a href="PEGGrammar_8txt_source.html#l00010">PEGGrammar.txt:10</a></div></div>
318
316
  <div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00155">SVFBasicTypes.h:155</a></div></div>
319
317
  </div><!-- fragment -->
320
318
  </div>
@@ -727,13 +725,12 @@ Private Attributes</h2></td></tr>
727
725
  </div><div class="memdoc">
728
726
 
729
727
  <p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00222">222</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
730
- <div class="fragment"><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">for</span> (Module::const_named_metadata_iterator mdit = <a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>.named_metadata_begin(),</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; mdeit = <a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>.named_metadata_end(); mdit != mdeit; ++mdit)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a> *md = &amp;*mdit;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">string</span> mdname = md-&gt;getName().str();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (mdname.compare(0, 15, <span class="stringliteral">&quot;__cxx_bases_of_&quot;</span>) != 0)</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">string</span> className = mdname.substr(15);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">for</span> (NamedMDNode::const_op_iterator opit = md-&gt;op_begin(),</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; opeit = md-&gt;op_end(); opit != opeit; ++opit)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *N = *opit;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a> &amp;mdstr = SVFUtil::cast&lt;MDString&gt;(N-&gt;getOperand(0));</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">string</span> baseName = mdstr.getString().str();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(className, baseName, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a28eec26ec8edaa5e96aecfeb01f6c0d4"><div class="ttname"><a href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">SVF::MDString</a></div><div class="ttdeci">llvm::MDString MDString</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00048">BasicTypes.h:48</a></div></div>
728
+ <div class="fragment"><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">for</span> (Module::const_named_metadata_iterator mdit = M.named_metadata_begin(),</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; mdeit = M.named_metadata_end(); mdit != mdeit; ++mdit)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a> *md = &amp;*mdit;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">string</span> mdname = md-&gt;getName().str();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (mdname.compare(0, 15, <span class="stringliteral">&quot;__cxx_bases_of_&quot;</span>) != 0)</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">string</span> className = mdname.substr(15);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">for</span> (NamedMDNode::const_op_iterator opit = md-&gt;op_begin(),</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; opeit = md-&gt;op_end(); opit != opeit; ++opit)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *N = *opit;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a> &amp;mdstr = SVFUtil::cast&lt;MDString&gt;(N-&gt;getOperand(0));</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">string</span> baseName = mdstr.getString().str();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">addEdge</a>(className, baseName, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">CHEdge::INHERITANCE</a>);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a28eec26ec8edaa5e96aecfeb01f6c0d4"><div class="ttname"><a href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">SVF::MDString</a></div><div class="ttdeci">llvm::MDString MDString</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00048">BasicTypes.h:48</a></div></div>
731
729
  <div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00040">CHGBuilder.h:40</a></div></div>
732
730
  <div class="ttc" id="classSVF_1_1CHEdge_html_a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"><div class="ttname"><a href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c">SVF::CHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00082">CHG.h:82</a></div></div>
733
731
  <div class="ttc" id="classSVF_1_1CHGraph_html_a3867db3e76f068bd8c4399b103dcd0b7"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a3867db3e76f068bd8c4399b103dcd0b7">SVF::CHGraph::addEdge</a></div><div class="ttdeci">void addEdge(const std::string className, const std::string baseClassName, CHEdge::CHEDGETYPE edgeType)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00073">CHG.cpp:73</a></div></div>
734
732
  <div class="ttc" id="namespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
735
733
  <div class="ttc" id="namespaceSVF_html_a3011dbac9102f044ad5f36a4ad3d4a71"><div class="ttname"><a href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">SVF::NamedMDNode</a></div><div class="ttdeci">llvm::NamedMDNode NamedMDNode</div><div class="ttdoc">LLVM metadata. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
736
- <div class="ttc" id="PEGGrammar_8txt_html_abd600039647a1e73c88e7161fa6eb989"><div class="ttname"><a href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a></div><div class="ttdeci">V M</div><div class="ttdef"><b>Definition:</b> <a href="PEGGrammar_8txt_source.html#l00010">PEGGrammar.txt:10</a></div></div>
737
734
  </div><!-- fragment -->
738
735
  </div>
739
736
  </div>
@@ -146,7 +146,7 @@ Public Member Functions</h2></td></tr>
146
146
  <tr class="separator:a1930d622cd47f7fd875e1964b65ec506"><td class="memSeparator" colspan="2">&#160;</td></tr>
147
147
  <tr class="memitem:aa98b80dc86d0549183ec69b44b391bd7"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#aa98b80dc86d0549183ec69b44b391bd7">extType_toString</a> (<a class="el" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
148
148
  <tr class="separator:aa98b80dc86d0549183ec69b44b391bd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
149
- <tr class="memitem:ac3e34227968d6a2835d63b1052da3c1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ac3e34227968d6a2835d63b1052da3c1a">get_name</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
149
+ <tr class="memitem:ac3e34227968d6a2835d63b1052da3c1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ac3e34227968d6a2835d63b1052da3c1a">get_name</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
150
150
  <tr class="separator:ac3e34227968d6a2835d63b1052da3c1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
151
151
  <tr class="memitem:a906a3728bbcfb7a43ac0938ffcb3df23"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a906a3728bbcfb7a43ac0938ffcb3df23">get_opArgs</a> (const <a class="el" href="structcJSON.html">cJSON</a> *value)</td></tr>
152
152
  <tr class="separator:a906a3728bbcfb7a43ac0938ffcb3df23"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -160,27 +160,27 @@ Public Member Functions</h2></td></tr>
160
160
  <tr class="separator:accdb0b7f3ae8d4028bd09f3d861aa2be"><td class="memSeparator" colspan="2">&#160;</td></tr>
161
161
  <tr class="memitem:a5ef7edb1664ab87f00418e7808d00258"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a5ef7edb1664ab87f00418e7808d00258">isOverwrittenAppFunction</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a> *callee)</td></tr>
162
162
  <tr class="separator:a5ef7edb1664ab87f00418e7808d00258"><td class="memSeparator" colspan="2">&#160;</td></tr>
163
- <tr class="memitem:ae20ea24cce02de87d89a2d0b773a2357"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ae20ea24cce02de87d89a2d0b773a2357">has_static</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
163
+ <tr class="memitem:ae20ea24cce02de87d89a2d0b773a2357"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ae20ea24cce02de87d89a2d0b773a2357">has_static</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
164
164
  <tr class="separator:ae20ea24cce02de87d89a2d0b773a2357"><td class="memSeparator" colspan="2">&#160;</td></tr>
165
- <tr class="memitem:ad3eefa086aa514e4d245a975ea3d45b5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ad3eefa086aa514e4d245a975ea3d45b5">has_static2</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
165
+ <tr class="memitem:ad3eefa086aa514e4d245a975ea3d45b5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ad3eefa086aa514e4d245a975ea3d45b5">has_static2</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
166
166
  <tr class="separator:ad3eefa086aa514e4d245a975ea3d45b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
167
- <tr class="memitem:a0d865c55681a3b4a9bb965fd0200029d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a0d865c55681a3b4a9bb965fd0200029d">is_alloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
167
+ <tr class="memitem:a0d865c55681a3b4a9bb965fd0200029d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a0d865c55681a3b4a9bb965fd0200029d">is_alloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
168
168
  <tr class="separator:a0d865c55681a3b4a9bb965fd0200029d"><td class="memSeparator" colspan="2">&#160;</td></tr>
169
- <tr class="memitem:a158e7da51d45b746e067dc40e912c477"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a158e7da51d45b746e067dc40e912c477">is_arg_alloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
169
+ <tr class="memitem:a158e7da51d45b746e067dc40e912c477"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a158e7da51d45b746e067dc40e912c477">is_arg_alloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
170
170
  <tr class="separator:a158e7da51d45b746e067dc40e912c477"><td class="memSeparator" colspan="2">&#160;</td></tr>
171
- <tr class="memitem:a68939c789d0530151a4e79e79317531a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a68939c789d0530151a4e79e79317531a">get_alloc_arg_pos</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
171
+ <tr class="memitem:a68939c789d0530151a4e79e79317531a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a68939c789d0530151a4e79e79317531a">get_alloc_arg_pos</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
172
172
  <tr class="separator:a68939c789d0530151a4e79e79317531a"><td class="memSeparator" colspan="2">&#160;</td></tr>
173
- <tr class="memitem:a934e293bd4050cb1ab5c19e8ad391ebe"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a934e293bd4050cb1ab5c19e8ad391ebe">no_struct_alloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
173
+ <tr class="memitem:a934e293bd4050cb1ab5c19e8ad391ebe"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a934e293bd4050cb1ab5c19e8ad391ebe">no_struct_alloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
174
174
  <tr class="separator:a934e293bd4050cb1ab5c19e8ad391ebe"><td class="memSeparator" colspan="2">&#160;</td></tr>
175
- <tr class="memitem:aeef27a358ba1815760c893bd2d2335b1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#aeef27a358ba1815760c893bd2d2335b1">is_dealloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
175
+ <tr class="memitem:aeef27a358ba1815760c893bd2d2335b1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#aeef27a358ba1815760c893bd2d2335b1">is_dealloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
176
176
  <tr class="separator:aeef27a358ba1815760c893bd2d2335b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
177
- <tr class="memitem:a82ebf71c5214f891f17e842e0b133b4f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a82ebf71c5214f891f17e842e0b133b4f">is_noop</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
177
+ <tr class="memitem:a82ebf71c5214f891f17e842e0b133b4f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a82ebf71c5214f891f17e842e0b133b4f">is_noop</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
178
178
  <tr class="separator:a82ebf71c5214f891f17e842e0b133b4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
179
- <tr class="memitem:ac6d6bdc51a6b75d6d5741cb751559fe4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ac6d6bdc51a6b75d6d5741cb751559fe4">is_realloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
179
+ <tr class="memitem:ac6d6bdc51a6b75d6d5741cb751559fe4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#ac6d6bdc51a6b75d6d5741cb751559fe4">is_realloc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
180
180
  <tr class="separator:ac6d6bdc51a6b75d6d5741cb751559fe4"><td class="memSeparator" colspan="2">&#160;</td></tr>
181
- <tr class="memitem:a5e8b816a3eb894f6b09403852df0d01b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a5e8b816a3eb894f6b09403852df0d01b">is_sameSignature</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
181
+ <tr class="memitem:a5e8b816a3eb894f6b09403852df0d01b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a5e8b816a3eb894f6b09403852df0d01b">is_sameSignature</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
182
182
  <tr class="separator:a5e8b816a3eb894f6b09403852df0d01b"><td class="memSeparator" colspan="2">&#160;</td></tr>
183
- <tr class="memitem:a21f45c806672255c044d39490990eae2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a21f45c806672255c044d39490990eae2">is_ext</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
183
+ <tr class="memitem:a21f45c806672255c044d39490990eae2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1ExtAPI.html#a21f45c806672255c044d39490990eae2">is_ext</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
184
184
  <tr class="separator:a21f45c806672255c044d39490990eae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
185
185
  </table><table class="memberdecls">
186
186
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>