svf-tools 1.0.326 → 1.0.327

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 (104) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +4 -4
  2. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +7 -7
  3. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +13 -12
  5. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +4 -4
  6. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
  7. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +21 -21
  9. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  10. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +4 -4
  11. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  14. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
  17. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  20. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +16 -16
  21. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +15 -15
  22. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +8 -8
  27. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/SVFModule_8h_source.html +26 -26
  30. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +9 -9
  31. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +3 -3
  32. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +32 -31
  33. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +4 -4
  34. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +4 -4
  38. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  39. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  40. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +50 -49
  41. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +62 -32
  42. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +4 -4
  43. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +4 -4
  44. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +2 -2
  45. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +14 -14
  46. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
  47. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
  48. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +4 -4
  49. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  50. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  51. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  52. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
  53. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
  54. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
  55. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +12 -12
  56. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
  57. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +8 -8
  58. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +4 -4
  59. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  61. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +2 -2
  62. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +11 -11
  64. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +51 -51
  65. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +11 -11
  66. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  67. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI-members.html +63 -62
  68. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +99 -69
  69. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +7 -7
  70. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +7 -7
  71. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  72. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
  73. package/SVF-doxygen/html/html/functions_d.html +4 -0
  74. package/SVF-doxygen/html/html/functions_func_d.html +4 -0
  75. package/SVF-doxygen/html/html/functions_l.html +3 -3
  76. package/SVF-doxygen/html/html/functions_n.html +4 -4
  77. package/SVF-doxygen/html/html/functions_o.html +14 -14
  78. package/SVF-doxygen/html/html/functions_p.html +6 -6
  79. package/SVF-doxygen/html/html/functions_r.html +1 -1
  80. package/SVF-doxygen/html/html/functions_s.html +6 -4
  81. package/SVF-doxygen/html/html/functions_t.html +6 -4
  82. package/SVF-doxygen/html/html/functions_v.html +3 -3
  83. package/SVF-doxygen/html/html/search/all_10.js +3 -3
  84. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  85. package/SVF-doxygen/html/html/search/all_13.js +5 -5
  86. package/SVF-doxygen/html/html/search/all_14.js +5 -5
  87. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  88. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  89. package/SVF-doxygen/html/html/search/all_4.js +2 -1
  90. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  91. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  92. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  93. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  94. package/SVF-doxygen/html/html/search/all_f.js +2 -2
  95. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  96. package/SVF-doxygen/html/html/search/functions_3.js +2 -1
  97. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  98. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  99. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  100. package/include/Util/ExtAPI.h +9 -0
  101. package/include/Util/SVFModule.h +2 -7
  102. package/include/Util/ThreadAPI.h +9 -0
  103. package/lib/Util/NodeIDAllocator.cpp +1 -0
  104. package/package.json +1 -1
@@ -66,14 +66,15 @@ $(function() {
66
66
  <div class="title">ExtAPI.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="ExtAPI_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* [ExtAPI.h] Info about external llvm::Functions</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * v. 005, 2008-08-15</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright 2008 Andrey Petrov</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * - apetrov87@gmail.com, apetrov@cs.utexas.edu</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * obtaining a copy of this software and associated documentation</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * files (the &quot;Software&quot;), to deal in the Software without</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * restriction, including without limitation the rights to use, copy,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * modify, merge, publish, distribute, sublicense, and/or sell copies</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * included in all copies or substantial portions of the Software.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * Modified by Yulei Sui 2013</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#ifndef __ExtAPI_H</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define __ExtAPI_H</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html"> 45</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">//External Function types</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">//Assume a call in the form LHS= F(arg0, arg1, arg2, arg3).</span></div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094"> 50</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef"> 52</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a>= 0, <span class="comment">//no effect on pointers</span></div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4"> 53</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a>, <span class="comment">//returns a ptr to a newly allocated object</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c"> 54</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>, <span class="comment">//like L_A0 if arg0 is a non-null ptr, else ALLOC</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73"> 55</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>, <span class="comment">//free memory arg0 and all pointers passing into free function</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0"> 56</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>, <span class="comment">//like ALLOC but only allocates non-struct data</span></div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0"> 57</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">EFT_STAT</a>, <span class="comment">//retval points to an unknown static var X</span></div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22"> 58</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>, <span class="comment">//ret -&gt; X -&gt; Y (X, Y - external static vars)</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"> 59</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">EFT_L_A0</a>, <span class="comment">//copies arg0, arg1, or arg2 into LHS</span></div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab"> 60</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>,</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d"> 61</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>,</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c"> 62</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>,</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f"> 63</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">EFT_L_A0__A0R_A1</a>, <span class="comment">//stores arg1 into *arg0 and returns arg0 (currently only for memset)</span></div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48"> 64</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">EFT_L_A0__A0R_A1R</a>, <span class="comment">//copies the data that arg1 points to into the location</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35"> 65</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35">EFT_L_A1__FunPtr</a>, <span class="comment">//obtain the address of a symbol based on the arg1 (char*) and parse a function to LHS (e.g., void *dlsym(void *handle, char *funname);)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// arg0 points to; note that several fields may be</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// copied at once if both point to structs.</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Returns arg0.</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002"> 69</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002">EFT_A1R_A0R</a>, <span class="comment">//copies *arg0 into *arg1, with non-ptr return</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573"> 70</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573">EFT_A3R_A1R_NS</a>, <span class="comment">//copies *arg1 into *arg3 (non-struct copy only)</span></div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482"> 71</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">EFT_A1R_A0</a>, <span class="comment">//stores arg0 into *arg1</span></div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a"> 72</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">EFT_A2R_A1</a>, <span class="comment">//stores arg1 into *arg2</span></div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d"> 73</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">EFT_A4R_A1</a>, <span class="comment">//stores arg1 into *arg4</span></div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4"> 74</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4">EFT_L_A0__A2R_A0</a>, <span class="comment">//stores arg0 into *arg2 and returns it</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be"> 75</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be">EFT_L_A0__A1_A0</a>, <span class="comment">//store arg1 into arg0&#39;s base and returns arg0</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899"> 76</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>, <span class="comment">//stores a pointer to an allocated object in *arg0</span></div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097"> 77</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>, <span class="comment">//as above, into *arg1, etc.</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14"> 78</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>,</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2"> 79</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>,</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be"> 80</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>,</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b"> 81</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598"> 82</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598">EFT_STD_RB_TREE_INCREMENT</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21"> 83</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">EFT_STD_LIST_HOOK</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af"> 85</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">CPP_EFT_A0R_A1</a>, <span class="comment">//stores arg1 into *arg0</span></div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054"> 86</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">CPP_EFT_A0R_A1R</a>, <span class="comment">//copies *arg1 into *arg0</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed"> 87</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">CPP_EFT_A1R</a>, <span class="comment">//load arg1</span></div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a"> 88</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">EFT_CXA_BEGIN_CATCH</a>, <span class="comment">//__cxa_begin_catch</span></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9"> 89</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">CPP_EFT_DYNAMIC_CAST</a>, <span class="comment">// dynamic_cast</span></div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9"> 90</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">EFT_OTHER</a> <span class="comment">//not found in the list</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; };</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">//Each Function name is mapped to its extf_t</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// (hash_map and map are much slower).</span></div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca"> 96</a></span>&#160; llvm::StringMap&lt;extf_t&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">//A cache of is_ext results for all SVFFunction*&#39;s (hash_map is fastest).</span></div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a329882c608e9a6b10a758bcd1ca7a0b5"> 98</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, bool&gt;</a> <a class="code" href="classSVF_1_1ExtAPI.html#a329882c608e9a6b10a758bcd1ca7a0b5">isext_cache</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">init</a>(); <span class="comment">//fill in the map (see ExtAPI.cpp)</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#af1c46b41e0088411a186228f760a99f3"> 102</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#af1c46b41e0088411a186228f760a99f3">ExtAPI</a>()</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">init</a>();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; isext_cache.clear();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// Singleton pattern here to enable instance of SVFIR can only be created once.</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618"> 109</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a>* <a class="code" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618">extAPI</a>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a86508e03ca1c2e37fc9414cb2335c3ec"> 114</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a>* <a class="code" href="classSVF_1_1ExtAPI.html#a86508e03ca1c2e37fc9414cb2335c3ec">getExtAPI</a>()</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (extAPI == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; extAPI = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ExtAPI.html#af1c46b41e0088411a186228f760a99f3">ExtAPI</a>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618">extAPI</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">//Return the extf_t of (F).</span></div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1"> 124</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; std::string funName = F-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span>(F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a7b4c6c7143d012802ea5ee962bec2deb">isIntrinsic</a>())</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; funName = <span class="stringliteral">&quot;llvm.&quot;</span> + F-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().split(<span class="charliteral">&#39;.&#39;</span>).second.split(<span class="charliteral">&#39;.&#39;</span>).first.str();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; llvm::StringMap&lt;extf_t&gt;::const_iterator it= info.find(funName);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(it == info.end() || !F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">isDeclaration</a>())</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">EFT_OTHER</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">//Does (F) have a static var X (unavailable to us) that its return points to?</span></div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#ae439994d7a92c4cb3bf5c9fa80fa31e8"> 140</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ae439994d7a92c4cb3bf5c9fa80fa31e8">has_static</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">EFT_STAT</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">//Assuming hasStatic(F), does (F) have a second static Y where X -&gt; Y?</span></div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aab5731ba773144c7cbb5609e9b807eae"> 146</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#aab5731ba773144c7cbb5609e9b807eae">has_static2</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F) == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">//Does (F) allocate a new object and return it?</span></div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a9ac1ce8f2796d1e70005c6999c9772de"> 151</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a9ac1ce8f2796d1e70005c6999c9772de">is_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">//Does (F) allocate a new object and assign it to one of its arguments?</span></div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#add48f7a9bcb7227727969e944ffe3fc8"> 157</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#add48f7a9bcb7227727969e944ffe3fc8">is_arg_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> t&gt;=<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a> &amp;&amp; t&lt;=<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">//Get the position of argument which holds the new object</span></div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a090df490c65fab16ec9fa5431e13361e"> 163</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classSVF_1_1ExtAPI.html#a090df490c65fab16ec9fa5431e13361e">get_alloc_arg_pos</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">switch</span>(t)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>:</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>:</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>:</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> 2;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>:</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> 4;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>:</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> 11;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Not an alloc call via argument.&quot;</span>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">//Does (F) allocate only non-struct objects?</span></div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a235ef40373e36583004eb6d289ce63f9"> 184</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a235ef40373e36583004eb6d289ce63f9">no_struct_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F) == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">//Does (F) not free/release any memory?</span></div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#af09ae44b9311d3dfd9eafd41da8c31be"> 189</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#af09ae44b9311d3dfd9eafd41da8c31be">is_dealloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">return</span> t == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">//Does (F) not do anything with the known pointers?</span></div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a82439c0d4f80b2d3a4da3a4d090c69dc"> 195</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a82439c0d4f80b2d3a4da3a4d090c69dc">is_noop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> t == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a> || t == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">//Does (F) reallocate a new object?</span></div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a070e7da81158d8948a4dbc06a0ec3cfe"> 201</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a070e7da81158d8948a4dbc06a0ec3cfe">is_realloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">//Should (F) be considered &quot;external&quot; (either not defined in the program</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// or a user-defined version of a known alloc or no-op)?</span></div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#ad1481f542d0a4bf67052ee897b165847"> 208</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ad1481f542d0a4bf67052ee897b165847">is_ext</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">//Check the cache first; everything below is slower.</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, bool&gt;::iterator</a> i_iec= isext_cache.find(F);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span>(i_iec != isext_cache.end())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> i_iec-&gt;second;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordtype">bool</span> res;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span>(F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">isDeclaration</a>() || F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a7b4c6c7143d012802ea5ee962bec2deb">isIntrinsic</a>())</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; res= 1;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; res= t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>;</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; isext_cache[F]= res;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;};</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">SVF::ExtAPI::EFT_L_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00059">ExtAPI.h:59</a></div></div>
69
+ <a href="ExtAPI_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* [ExtAPI.h] Info about external llvm::Functions</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * v. 005, 2008-08-15</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright 2008 Andrey Petrov</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * - apetrov87@gmail.com, apetrov@cs.utexas.edu</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * Permission is hereby granted, free of charge, to any person</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * obtaining a copy of this software and associated documentation</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * files (the &quot;Software&quot;), to deal in the Software without</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * restriction, including without limitation the rights to use, copy,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * modify, merge, publish, distribute, sublicense, and/or sell copies</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * included in all copies or substantial portions of the Software.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * Modified by Yulei Sui 2013</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#ifndef __ExtAPI_H</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define __ExtAPI_H</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html"> 45</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">//External Function types</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">//Assume a call in the form LHS= F(arg0, arg1, arg2, arg3).</span></div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094"> 50</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef"> 52</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a>= 0, <span class="comment">//no effect on pointers</span></div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4"> 53</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a>, <span class="comment">//returns a ptr to a newly allocated object</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c"> 54</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>, <span class="comment">//like L_A0 if arg0 is a non-null ptr, else ALLOC</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73"> 55</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>, <span class="comment">//free memory arg0 and all pointers passing into free function</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0"> 56</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>, <span class="comment">//like ALLOC but only allocates non-struct data</span></div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0"> 57</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">EFT_STAT</a>, <span class="comment">//retval points to an unknown static var X</span></div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22"> 58</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>, <span class="comment">//ret -&gt; X -&gt; Y (X, Y - external static vars)</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"> 59</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">EFT_L_A0</a>, <span class="comment">//copies arg0, arg1, or arg2 into LHS</span></div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab"> 60</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>,</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d"> 61</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>,</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c"> 62</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>,</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f"> 63</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">EFT_L_A0__A0R_A1</a>, <span class="comment">//stores arg1 into *arg0 and returns arg0 (currently only for memset)</span></div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48"> 64</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">EFT_L_A0__A0R_A1R</a>, <span class="comment">//copies the data that arg1 points to into the location</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35"> 65</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35">EFT_L_A1__FunPtr</a>, <span class="comment">//obtain the address of a symbol based on the arg1 (char*) and parse a function to LHS (e.g., void *dlsym(void *handle, char *funname);)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// arg0 points to; note that several fields may be</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// copied at once if both point to structs.</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Returns arg0.</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002"> 69</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002">EFT_A1R_A0R</a>, <span class="comment">//copies *arg0 into *arg1, with non-ptr return</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573"> 70</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573">EFT_A3R_A1R_NS</a>, <span class="comment">//copies *arg1 into *arg3 (non-struct copy only)</span></div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482"> 71</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">EFT_A1R_A0</a>, <span class="comment">//stores arg0 into *arg1</span></div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a"> 72</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">EFT_A2R_A1</a>, <span class="comment">//stores arg1 into *arg2</span></div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d"> 73</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">EFT_A4R_A1</a>, <span class="comment">//stores arg1 into *arg4</span></div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4"> 74</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4">EFT_L_A0__A2R_A0</a>, <span class="comment">//stores arg0 into *arg2 and returns it</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be"> 75</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be">EFT_L_A0__A1_A0</a>, <span class="comment">//store arg1 into arg0&#39;s base and returns arg0</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899"> 76</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>, <span class="comment">//stores a pointer to an allocated object in *arg0</span></div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097"> 77</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>, <span class="comment">//as above, into *arg1, etc.</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14"> 78</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>,</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2"> 79</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>,</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be"> 80</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>,</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b"> 81</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598"> 82</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598">EFT_STD_RB_TREE_INCREMENT</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21"> 83</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">EFT_STD_LIST_HOOK</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af"> 85</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">CPP_EFT_A0R_A1</a>, <span class="comment">//stores arg1 into *arg0</span></div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054"> 86</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">CPP_EFT_A0R_A1R</a>, <span class="comment">//copies *arg1 into *arg0</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed"> 87</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">CPP_EFT_A1R</a>, <span class="comment">//load arg1</span></div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a"> 88</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">EFT_CXA_BEGIN_CATCH</a>, <span class="comment">//__cxa_begin_catch</span></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9"> 89</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">CPP_EFT_DYNAMIC_CAST</a>, <span class="comment">// dynamic_cast</span></div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9"> 90</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">EFT_OTHER</a> <span class="comment">//not found in the list</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; };</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">//Each Function name is mapped to its extf_t</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// (hash_map and map are much slower).</span></div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca"> 96</a></span>&#160; llvm::StringMap&lt;extf_t&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">//A cache of is_ext results for all SVFFunction*&#39;s (hash_map is fastest).</span></div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a329882c608e9a6b10a758bcd1ca7a0b5"> 98</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, bool&gt;</a> <a class="code" href="classSVF_1_1ExtAPI.html#a329882c608e9a6b10a758bcd1ca7a0b5">isext_cache</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">init</a>(); <span class="comment">//fill in the map (see ExtAPI.cpp)</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#af1c46b41e0088411a186228f760a99f3"> 102</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#af1c46b41e0088411a186228f760a99f3">ExtAPI</a>()</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">init</a>();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; isext_cache.clear();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// Singleton pattern here to enable instance of SVFIR can only be created once.</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618"> 109</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a>* <a class="code" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618">extAPI</a>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a86508e03ca1c2e37fc9414cb2335c3ec"> 114</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a>* <a class="code" href="classSVF_1_1ExtAPI.html#a86508e03ca1c2e37fc9414cb2335c3ec">getExtAPI</a>()</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (extAPI == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; extAPI = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ExtAPI.html#af1c46b41e0088411a186228f760a99f3">ExtAPI</a>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618">extAPI</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aa2c730747837106e68a67681455c0657"> 123</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#aa2c730747837106e68a67681455c0657">destory</a>()</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; { </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (extAPI != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1ExtAPI.html#abe666dfdd9b3dea5ea89a5ed9ca4c618">extAPI</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; extAPI = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">//Return the extf_t of (F).</span></div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1"> 133</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; std::string funName = F-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().str();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span>(F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a7b4c6c7143d012802ea5ee962bec2deb">isIntrinsic</a>())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; funName = <span class="stringliteral">&quot;llvm.&quot;</span> + F-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>().split(<span class="charliteral">&#39;.&#39;</span>).second.split(<span class="charliteral">&#39;.&#39;</span>).first.str();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; llvm::StringMap&lt;extf_t&gt;::const_iterator it= info.find(funName);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span>(it == info.end() || !F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">isDeclaration</a>())</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">EFT_OTHER</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">//Does (F) have a static var X (unavailable to us) that its return points to?</span></div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#ae439994d7a92c4cb3bf5c9fa80fa31e8"> 149</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ae439994d7a92c4cb3bf5c9fa80fa31e8">has_static</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">EFT_STAT</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">//Assuming hasStatic(F), does (F) have a second static Y where X -&gt; Y?</span></div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aab5731ba773144c7cbb5609e9b807eae"> 155</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#aab5731ba773144c7cbb5609e9b807eae">has_static2</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F) == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">//Does (F) allocate a new object and return it?</span></div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a9ac1ce8f2796d1e70005c6999c9772de"> 160</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a9ac1ce8f2796d1e70005c6999c9772de">is_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">//Does (F) allocate a new object and assign it to one of its arguments?</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#add48f7a9bcb7227727969e944ffe3fc8"> 166</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#add48f7a9bcb7227727969e944ffe3fc8">is_arg_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> t&gt;=<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a> &amp;&amp; t&lt;=<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">//Get the position of argument which holds the new object</span></div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a090df490c65fab16ec9fa5431e13361e"> 172</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classSVF_1_1ExtAPI.html#a090df490c65fab16ec9fa5431e13361e">get_alloc_arg_pos</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">switch</span>(t)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>:</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>:</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>:</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">return</span> 2;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>:</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">return</span> 4;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>:</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">return</span> 11;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Not an alloc call via argument.&quot;</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">//Does (F) allocate only non-struct objects?</span></div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a235ef40373e36583004eb6d289ce63f9"> 193</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a235ef40373e36583004eb6d289ce63f9">no_struct_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F) == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">//Does (F) not free/release any memory?</span></div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#af09ae44b9311d3dfd9eafd41da8c31be"> 198</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#af09ae44b9311d3dfd9eafd41da8c31be">is_dealloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">return</span> t == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">//Does (F) not do anything with the known pointers?</span></div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a82439c0d4f80b2d3a4da3a4d090c69dc"> 204</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a82439c0d4f80b2d3a4da3a4d090c69dc">is_noop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> t == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a> || t == <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">//Does (F) reallocate a new object?</span></div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a070e7da81158d8948a4dbc06a0ec3cfe"> 210</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a070e7da81158d8948a4dbc06a0ec3cfe">is_realloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)<span class="keyword"> const</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">//Should (F) be considered &quot;external&quot; (either not defined in the program</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// or a user-defined version of a known alloc or no-op)?</span></div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#ad1481f542d0a4bf67052ee897b165847"> 217</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ad1481f542d0a4bf67052ee897b165847">is_ext</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">//Check the cache first; everything below is slower.</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, bool&gt;::iterator</a> i_iec= isext_cache.find(F);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span>(i_iec != isext_cache.end())</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> i_iec-&gt;second;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordtype">bool</span> res;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span>(F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">isDeclaration</a>() || F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a7b4c6c7143d012802ea5ee962bec2deb">isIntrinsic</a>())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; res= 1;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> t= <a class="code" href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">get_type</a>(F);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; res= t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a> || t==<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; isext_cache[F]= res;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</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;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">SVF::ExtAPI::EFT_L_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00059">ExtAPI.h:59</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">SVF::ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00081">ExtAPI.h:81</a></div></div>
71
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_aa2c730747837106e68a67681455c0657"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aa2c730747837106e68a67681455c0657">SVF::ExtAPI::destory</a></div><div class="ttdeci">static void destory()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00123">ExtAPI.h:123</a></div></div>
71
72
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">SVF::ExtAPI::EFT_A4R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00073">ExtAPI.h:73</a></div></div>
72
73
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">SVF::ExtAPI::EFT_ALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00053">ExtAPI.h:53</a></div></div>
73
74
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
74
75
  <div class="ttc" id="classSVF_1_1SVFFunction_html_ab672f0255ec8e42d5e414bc8c72b7c76"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">SVF::SVFFunction::isDeclaration</a></div><div class="ttdeci">bool isDeclaration() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00255">BasicTypes.h:255</a></div></div>
75
76
  <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="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
76
- <div class="ttc" id="classSVF_1_1ExtAPI_html_aab5731ba773144c7cbb5609e9b807eae"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aab5731ba773144c7cbb5609e9b807eae">SVF::ExtAPI::has_static2</a></div><div class="ttdeci">bool has_static2(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00146">ExtAPI.h:146</a></div></div>
77
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_aab5731ba773144c7cbb5609e9b807eae"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aab5731ba773144c7cbb5609e9b807eae">SVF::ExtAPI::has_static2</a></div><div class="ttdeci">bool has_static2(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00155">ExtAPI.h:155</a></div></div>
77
78
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">SVF::ExtAPI::EFT_STD_LIST_HOOK</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00083">ExtAPI.h:83</a></div></div>
78
79
  <div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
79
80
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">SVF::ExtAPI::CPP_EFT_A0R_A1R</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00086">ExtAPI.h:86</a></div></div>
@@ -85,20 +86,20 @@ $(function() {
85
86
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">SVF::ExtAPI::EFT_STAT</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00057">ExtAPI.h:57</a></div></div>
86
87
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">SVF::ExtAPI::EFT_NOSTRUCT_ALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00056">ExtAPI.h:56</a></div></div>
87
88
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">SVF::ExtAPI::EFT_NOOP</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00052">ExtAPI.h:52</a></div></div>
88
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a82439c0d4f80b2d3a4da3a4d090c69dc"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a82439c0d4f80b2d3a4da3a4d090c69dc">SVF::ExtAPI::is_noop</a></div><div class="ttdeci">bool is_noop(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00195">ExtAPI.h:195</a></div></div>
89
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a82439c0d4f80b2d3a4da3a4d090c69dc"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a82439c0d4f80b2d3a4da3a4d090c69dc">SVF::ExtAPI::is_noop</a></div><div class="ttdeci">bool is_noop(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00204">ExtAPI.h:204</a></div></div>
89
90
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">SVF::ExtAPI::CPP_EFT_A0R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00085">ExtAPI.h:85</a></div></div>
90
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a235ef40373e36583004eb6d289ce63f9"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a235ef40373e36583004eb6d289ce63f9">SVF::ExtAPI::no_struct_alloc</a></div><div class="ttdeci">bool no_struct_alloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00184">ExtAPI.h:184</a></div></div>
91
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a235ef40373e36583004eb6d289ce63f9"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a235ef40373e36583004eb6d289ce63f9">SVF::ExtAPI::no_struct_alloc</a></div><div class="ttdeci">bool no_struct_alloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00193">ExtAPI.h:193</a></div></div>
91
92
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">SVF::ExtAPI::EFT_A2R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00078">ExtAPI.h:78</a></div></div>
92
- <div class="ttc" id="classSVF_1_1ExtAPI_html_add48f7a9bcb7227727969e944ffe3fc8"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#add48f7a9bcb7227727969e944ffe3fc8">SVF::ExtAPI::is_arg_alloc</a></div><div class="ttdeci">bool is_arg_alloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00157">ExtAPI.h:157</a></div></div>
93
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ad1481f542d0a4bf67052ee897b165847"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ad1481f542d0a4bf67052ee897b165847">SVF::ExtAPI::is_ext</a></div><div class="ttdeci">bool is_ext(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00208">ExtAPI.h:208</a></div></div>
93
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_add48f7a9bcb7227727969e944ffe3fc8"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#add48f7a9bcb7227727969e944ffe3fc8">SVF::ExtAPI::is_arg_alloc</a></div><div class="ttdeci">bool is_arg_alloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00166">ExtAPI.h:166</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ad1481f542d0a4bf67052ee897b165847"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ad1481f542d0a4bf67052ee897b165847">SVF::ExtAPI::is_ext</a></div><div class="ttdeci">bool is_ext(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00217">ExtAPI.h:217</a></div></div>
94
95
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">SVF::ExtAPI::CPP_EFT_DYNAMIC_CAST</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00089">ExtAPI.h:89</a></div></div>
95
96
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">SVF::ExtAPI::extf_t</a></div><div class="ttdeci">extf_t</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00050">ExtAPI.h:50</a></div></div>
96
97
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">SVF::ExtAPI::EFT_L_A0__A0R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00063">ExtAPI.h:63</a></div></div>
97
98
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">SVF::ExtAPI::EFT_L_A2</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00061">ExtAPI.h:61</a></div></div>
98
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a090df490c65fab16ec9fa5431e13361e"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a090df490c65fab16ec9fa5431e13361e">SVF::ExtAPI::get_alloc_arg_pos</a></div><div class="ttdeci">int get_alloc_arg_pos(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00163">ExtAPI.h:163</a></div></div>
99
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a090df490c65fab16ec9fa5431e13361e"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a090df490c65fab16ec9fa5431e13361e">SVF::ExtAPI::get_alloc_arg_pos</a></div><div class="ttdeci">int get_alloc_arg_pos(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00172">ExtAPI.h:172</a></div></div>
99
100
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">SVF::ExtAPI::CPP_EFT_A1R</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00087">ExtAPI.h:87</a></div></div>
100
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a9ac1ce8f2796d1e70005c6999c9772de"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a9ac1ce8f2796d1e70005c6999c9772de">SVF::ExtAPI::is_alloc</a></div><div class="ttdeci">bool is_alloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00151">ExtAPI.h:151</a></div></div>
101
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ae439994d7a92c4cb3bf5c9fa80fa31e8"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ae439994d7a92c4cb3bf5c9fa80fa31e8">SVF::ExtAPI::has_static</a></div><div class="ttdeci">bool has_static(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00140">ExtAPI.h:140</a></div></div>
101
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a9ac1ce8f2796d1e70005c6999c9772de"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a9ac1ce8f2796d1e70005c6999c9772de">SVF::ExtAPI::is_alloc</a></div><div class="ttdeci">bool is_alloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00160">ExtAPI.h:160</a></div></div>
102
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ae439994d7a92c4cb3bf5c9fa80fa31e8"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ae439994d7a92c4cb3bf5c9fa80fa31e8">SVF::ExtAPI::has_static</a></div><div class="ttdeci">bool has_static(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00149">ExtAPI.h:149</a></div></div>
102
103
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">SVF::ExtAPI::EFT_REALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00054">ExtAPI.h:54</a></div></div>
103
104
  <div class="ttc" id="classSVF_1_1ExtAPI_html_ac8af2b917fcc71c0a1a66b8cb0cc55ba"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">SVF::ExtAPI::init</a></div><div class="ttdeci">void init()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00849">ExtAPI.cpp:849</a></div></div>
104
105
  <div class="ttc" id="BasicTypes_8h_html"><div class="ttname"><a href="BasicTypes_8h.html">BasicTypes.h</a></div></div>
@@ -114,14 +115,14 @@ $(function() {
114
115
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">SVF::ExtAPI::EFT_A2R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00072">ExtAPI.h:72</a></div></div>
115
116
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a86508e03ca1c2e37fc9414cb2335c3ec"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a86508e03ca1c2e37fc9414cb2335c3ec">SVF::ExtAPI::getExtAPI</a></div><div class="ttdeci">static ExtAPI * getExtAPI()</div><div class="ttdoc">Singleton design here to make sure we only have one instance during whole analysis. </div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00114">ExtAPI.h:114</a></div></div>
116
117
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
117
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a070e7da81158d8948a4dbc06a0ec3cfe"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a070e7da81158d8948a4dbc06a0ec3cfe">SVF::ExtAPI::is_realloc</a></div><div class="ttdeci">bool is_realloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00201">ExtAPI.h:201</a></div></div>
118
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a070e7da81158d8948a4dbc06a0ec3cfe"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a070e7da81158d8948a4dbc06a0ec3cfe">SVF::ExtAPI::is_realloc</a></div><div class="ttdeci">bool is_realloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00210">ExtAPI.h:210</a></div></div>
118
119
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">SVF::ExtAPI::EFT_STAT2</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00058">ExtAPI.h:58</a></div></div>
119
120
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">SVF::ExtAPI::EFT_A1R_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00071">ExtAPI.h:71</a></div></div>
120
121
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">SVF::ExtAPI::EFT_A4R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00079">ExtAPI.h:79</a></div></div>
121
122
  <div class="ttc" id="classSVF_1_1SVFFunction_html_a7b4c6c7143d012802ea5ee962bec2deb"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a7b4c6c7143d012802ea5ee962bec2deb">SVF::SVFFunction::isIntrinsic</a></div><div class="ttdeci">bool isIntrinsic() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00260">BasicTypes.h:260</a></div></div>
122
123
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">SVF::ExtAPI::EFT_L_A0__A0R_A1R</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00064">ExtAPI.h:64</a></div></div>
123
- <div class="ttc" id="classSVF_1_1ExtAPI_html_af09ae44b9311d3dfd9eafd41da8c31be"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#af09ae44b9311d3dfd9eafd41da8c31be">SVF::ExtAPI::is_dealloc</a></div><div class="ttdeci">bool is_dealloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00189">ExtAPI.h:189</a></div></div>
124
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a90b433cf855adcf34c6ef7f7e5be62b1"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">SVF::ExtAPI::get_type</a></div><div class="ttdeci">extf_t get_type(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00124">ExtAPI.h:124</a></div></div>
124
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_af09ae44b9311d3dfd9eafd41da8c31be"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#af09ae44b9311d3dfd9eafd41da8c31be">SVF::ExtAPI::is_dealloc</a></div><div class="ttdeci">bool is_dealloc(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00198">ExtAPI.h:198</a></div></div>
125
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a90b433cf855adcf34c6ef7f7e5be62b1"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a90b433cf855adcf34c6ef7f7e5be62b1">SVF::ExtAPI::get_type</a></div><div class="ttdeci">extf_t get_type(const SVFFunction *F) const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00133">ExtAPI.h:133</a></div></div>
125
126
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">SVF::ExtAPI::EFT_A0R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00076">ExtAPI.h:76</a></div></div>
126
127
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">SVF::ExtAPI::EFT_OTHER</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00090">ExtAPI.h:90</a></div></div>
127
128
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a21b103f723d914a95fd0eef28551a3ca"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">SVF::ExtAPI::info</a></div><div class="ttdeci">llvm::StringMap&lt; extf_t &gt; info</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00096">ExtAPI.h:96</a></div></div>
@@ -85,7 +85,7 @@ $(function() {
85
85
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a1886b4964efa92cfff761493d12768b8"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">SVF::FlowSensitive::updateConnectedNodes</a></div><div class="ttdeci">virtual void updateConnectedNodes(const SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Update nodes connected during updating call graph. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00726">FlowSensitive.cpp:726</a></div></div>
86
86
  <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00119">SVFBasicTypes.h:119</a></div></div>
87
87
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_aa401cc90de4e1c6842f08a43a28c5aa1"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">SVF::FlowSensitive::processCopy</a></div><div class="ttdeci">virtual bool processCopy(const CopySVFGNode *copy)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00435">FlowSensitive.cpp:435</a></div></div>
88
- <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_acbbc5c04c79846fe1cc46a3bd5a65aba"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">SVF::NodeIDAllocator::Clusterer::evaluate</a></div><div class="ttdeci">static void evaluate(const std::vector&lt; NodeID &gt; &amp;nodeMap, const Map&lt; PointsTo, unsigned &gt; pointsToSets, Map&lt; std::string, std::string &gt; &amp;stats, bool accountForOcc)</div><div class="ttdoc">Fills in *NumWords statistics in stats.. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00561">NodeIDAllocator.cpp:561</a></div></div>
88
+ <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_acbbc5c04c79846fe1cc46a3bd5a65aba"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">SVF::NodeIDAllocator::Clusterer::evaluate</a></div><div class="ttdeci">static void evaluate(const std::vector&lt; NodeID &gt; &amp;nodeMap, const Map&lt; PointsTo, unsigned &gt; pointsToSets, Map&lt; std::string, std::string &gt; &amp;stats, bool accountForOcc)</div><div class="ttdoc">Fills in *NumWords statistics in stats.. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00562">NodeIDAllocator.cpp:562</a></div></div>
89
89
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a023d0b492deaba40c593332cf1b2e3f6"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6">SVF::FlowSensitive::printCTirAliasStats</a></div><div class="ttdeci">virtual void printCTirAliasStats(void)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00823">FlowSensitive.cpp:823</a></div></div>
90
90
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
91
91
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a16f594356ea565eb1fed2acea516a16b"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">SVF::FlowSensitive::processNode</a></div><div class="ttdeci">virtual void processNode(NodeID nodeId)</div><div class="ttdoc">Handle various constraints. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00191">FlowSensitive.cpp:191</a></div></div>
@@ -109,7 +109,7 @@ $(function() {
109
109
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
110
110
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a9d81537ec20196315a9a2541477ec5bf"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf">SVF::FlowSensitive::updateCallGraph</a></div><div class="ttdeci">bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdoc">Update call graph. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00653">FlowSensitive.cpp:653</a></div></div>
111
111
  <div class="ttc" id="classSVF_1_1DirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1DirectSVFGEdge.html">SVF::DirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00141">VFGEdge.h:141</a></div></div>
112
- <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map&lt; std::string, std::string &gt; &amp;stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00679">NodeIDAllocator.cpp:679</a></div></div>
112
+ <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map&lt; std::string, std::string &gt; &amp;stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00680">NodeIDAllocator.cpp:680</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_ad6243c1317503bed39411dab47c83da7"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">SVF::FlowSensitive::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00048">FlowSensitive.cpp:48</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1PTData_html"><div class="ttname"><a href="classSVF_1_1PTData.html">SVF::PTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00040">AbstractPointsToDS.h:40</a></div></div>
@@ -119,7 +119,7 @@ $(function() {
119
119
  <div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00127">PointsTo.h:127</a></div></div>
120
120
  <div class="ttc" id="TypeBasedHeapCloning_8h_html"><div class="ttname"><a href="TypeBasedHeapCloning_8h.html">TypeBasedHeapCloning.h</a></div></div>
121
121
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; SVFVar, SVFStmt &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
122
- <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a33d502a0bd49307cd824e34b73157b9b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">SVF::NodeIDAllocator::Clusterer::cluster</a></div><div class="ttdeci">static std::vector&lt; NodeID &gt; cluster(BVDataPTAImpl *pta, const std::vector&lt; std::pair&lt; NodeID, unsigned &gt;&gt; keys, std::vector&lt; std::pair&lt; hclust_fast_methods, std::vector&lt; NodeID &gt;&gt;&gt; &amp;candidates, std::string evalSubtitle=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00175">NodeIDAllocator.cpp:175</a></div></div>
122
+ <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a33d502a0bd49307cd824e34b73157b9b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">SVF::NodeIDAllocator::Clusterer::cluster</a></div><div class="ttdeci">static std::vector&lt; NodeID &gt; cluster(BVDataPTAImpl *pta, const std::vector&lt; std::pair&lt; NodeID, unsigned &gt;&gt; keys, std::vector&lt; std::pair&lt; hclust_fast_methods, std::vector&lt; NodeID &gt;&gt;&gt; &amp;candidates, std::string evalSubtitle=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00176">NodeIDAllocator.cpp:176</a></div></div>
123
123
  <div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
124
124
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a5f8a1493f7550a3f7a295e25d87bce12"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12">SVF::FlowSensitive::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdoc">SCC detection. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00179">FlowSensitive.cpp:179</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1PHIVFGNode_html_a2e00f6d582aa4ac9aa116cc6d5c79369"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">SVF::PHIVFGNode::opVerBegin</a></div><div class="ttdeci">OPVers::const_iterator opVerBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00663">VFGNode.h:663</a></div></div>
@@ -189,7 +189,7 @@ $(function() {
189
189
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and SVFIR etc. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00111">PointerAnalysis.cpp:111</a></div></div>
190
190
  <div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
191
191
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a94dc671f524ed3ed00f5a54b13f18e18"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">SVF::FlowSensitive::countAliases</a></div><div class="ttdeci">virtual void countAliases(Set&lt; std::pair&lt; NodeID, NodeID &gt;&gt; cmp, unsigned *mayAliases, unsigned *noAliases)</div><div class="ttdoc">Fills may/noAliases for the location/pointer pairs in cmp. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00888">FlowSensitive.cpp:888</a></div></div>
192
- <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a36b25188130f4c21d145c950a70d616f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">SVF::NodeIDAllocator::Clusterer::getReverseNodeMapping</a></div><div class="ttdeci">static std::vector&lt; NodeID &gt; getReverseNodeMapping(const std::vector&lt; NodeID &gt; &amp;nodeMapping)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00386">NodeIDAllocator.cpp:386</a></div></div>
192
+ <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a36b25188130f4c21d145c950a70d616f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">SVF::NodeIDAllocator::Clusterer::getReverseNodeMapping</a></div><div class="ttdeci">static std::vector&lt; NodeID &gt; getReverseNodeMapping(const std::vector&lt; NodeID &gt; &amp;nodeMapping)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00387">NodeIDAllocator.cpp:387</a></div></div>
193
193
  <div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html_a30aca718d25924f1babdf348bb0ace71"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">SVF::IndirectSVFGEdge::getPointsTo</a></div><div class="ttdeci">const NodeBS &amp; getPointsTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00061">SVFGEdge.h:61</a></div></div>
194
194
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a3abffe1434386b1ce349fbed0cfe0967"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">SVF::FlowSensitive::propagateFromFRToAR</a></div><div class="ttdeci">virtual bool propagateFromFRToAR(const FormalRetSVFGNode *fr, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00344">FlowSensitive.cpp:344</a></div></div>
195
195
  <div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>