svf-tools 1.0.404 → 1.0.405

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 (154) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +2 -2
  3. package/SVF-doxygen/html/html/CHG_8h_source.html +5 -6
  4. package/SVF-doxygen/html/html/CPPUtil_8cpp.html +3 -3
  5. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/html/CSC_8cpp_source.html +4 -4
  7. package/SVF-doxygen/html/html/CSC_8h_source.html +3 -3
  8. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -2
  9. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +4 -4
  10. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  11. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  12. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +5 -5
  14. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
  15. package/SVF-doxygen/html/html/ICFG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  17. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -2
  18. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/LocationSet_8h_source.html +7 -7
  20. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  21. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +3 -3
  24. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -5
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +5 -5
  26. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +4 -4
  27. package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
  28. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +6 -6
  29. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +5 -5
  30. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +1 -2
  31. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -3
  33. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  34. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  35. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  36. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +10 -10
  38. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +2 -2
  39. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +16 -16
  40. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +2 -2
  41. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
  42. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +4 -4
  43. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +24 -24
  44. package/SVF-doxygen/html/html/classSVF_1_1CSC-members.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +11 -11
  46. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +3 -3
  48. package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +1 -2
  49. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +2 -2
  50. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +12 -12
  52. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +2 -2
  53. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +15 -15
  54. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +11 -11
  56. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
  57. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
  58. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  59. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
  61. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +2 -2
  62. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +3 -3
  63. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +23 -23
  64. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +5 -5
  65. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +48 -48
  66. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +8 -8
  68. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
  69. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile-members.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +8 -8
  71. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +16 -16
  73. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +2 -2
  74. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +30 -30
  75. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  76. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +9 -9
  78. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  79. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  80. package/SVF-doxygen/html/html/functions_a.html +6 -6
  81. package/SVF-doxygen/html/html/functions_b.html +1 -1
  82. package/SVF-doxygen/html/html/functions_f.html +2 -2
  83. package/SVF-doxygen/html/html/functions_func.html +6 -6
  84. package/SVF-doxygen/html/html/functions_func_f.html +1 -1
  85. package/SVF-doxygen/html/html/functions_func_g.html +9 -9
  86. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  87. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  88. package/SVF-doxygen/html/html/functions_func_v.html +1 -1
  89. package/SVF-doxygen/html/html/functions_g.html +9 -9
  90. package/SVF-doxygen/html/html/functions_i.html +1 -1
  91. package/SVF-doxygen/html/html/functions_l.html +1 -1
  92. package/SVF-doxygen/html/html/functions_n.html +1 -1
  93. package/SVF-doxygen/html/html/functions_s.html +3 -3
  94. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  95. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  96. package/SVF-doxygen/html/html/functions_v.html +3 -3
  97. package/SVF-doxygen/html/html/functions_vars_b.html +1 -1
  98. package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
  99. package/SVF-doxygen/html/html/functions_vars_v.html +2 -2
  100. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +2 -2
  101. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +2 -2
  102. package/SVF-doxygen/html/html/search/all_1.js +4 -4
  103. package/SVF-doxygen/html/html/search/all_13.js +3 -3
  104. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  105. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  106. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  107. package/SVF-doxygen/html/html/search/all_7.js +5 -5
  108. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  109. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  110. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  111. package/SVF-doxygen/html/html/search/functions_0.js +4 -4
  112. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  113. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  114. package/SVF-doxygen/html/html/search/functions_5.js +1 -1
  115. package/SVF-doxygen/html/html/search/functions_6.js +5 -5
  116. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  117. package/SVF-doxygen/html/html/search/functions_a.js +1 -1
  118. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  119. package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
  120. package/SVF-doxygen/html/html/search/variables_16.js +2 -2
  121. package/SVF-doxygen/html/html/search/variables_2.js +1 -1
  122. package/SVF-doxygen/html/html/search/variables_6.js +1 -1
  123. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +2 -2
  124. package/include/Graphs/CHG.h +6 -6
  125. package/include/Graphs/ConsGEdge.h +1 -1
  126. package/include/Graphs/ICFG.h +1 -1
  127. package/include/Graphs/ICFGEdge.h +3 -3
  128. package/include/MemoryModel/LocationSet.h +5 -5
  129. package/include/MemoryModel/PAGBuilderFromFile.h +1 -1
  130. package/include/MemoryModel/SVFIR.h +1 -1
  131. package/include/MemoryModel/SVFStatements.h +4 -4
  132. package/include/MemoryModel/SVFVariables.h +2 -2
  133. package/include/MemoryModel/SymbolTableInfo.h +1 -1
  134. package/include/SVF-FE/SVFIRBuilder.h +2 -2
  135. package/include/Util/IRAnnotator.h +2 -2
  136. package/include/WPA/AndersenSFR.h +1 -1
  137. package/include/WPA/CSC.h +1 -1
  138. package/lib/Graphs/ICFG.cpp +1 -1
  139. package/lib/MTA/MHP.cpp +2 -2
  140. package/lib/MemoryModel/LocationSet.cpp +3 -3
  141. package/lib/MemoryModel/PAGBuilderFromFile.cpp +2 -2
  142. package/lib/MemoryModel/SVFIR.cpp +1 -1
  143. package/lib/MemoryModel/SymbolTableInfo.cpp +3 -3
  144. package/lib/SVF-FE/CPPUtil.cpp +4 -4
  145. package/lib/SVF-FE/ICFGBuilder.cpp +1 -1
  146. package/lib/SVF-FE/LLVMUtil.cpp +1 -1
  147. package/lib/SVF-FE/SVFIRBuilder.cpp +9 -9
  148. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
  149. package/lib/Util/Conditions.cpp +1 -1
  150. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  151. package/lib/WPA/AndersenSFR.cpp +6 -6
  152. package/lib/WPA/CSC.cpp +5 -5
  153. package/lib/WPA/TypeAnalysis.cpp +3 -3
  154. package/package.json +1 -1
@@ -66,11 +66,10 @@ $(function() {
66
66
  <div class="title">CHG.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="CHG_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">//===----- CHG.h -- Class hirachary graph ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</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;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * CHG.h (previously CHA.h)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Apr 13, 2016</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Xiaokang Fan</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * Created on: Aug 24, 2019</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * Author: Mohamad Barbar</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 CHA_H_</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define CHA_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="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="GenericGraph_8h.html">Graphs/GenericGraph.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WorkList_8h.html">Util/WorkList.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</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;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const GlobalValue*&gt;</a> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7"> 47</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFFunction*&gt;</a> <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html"> 50</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</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"> 52</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#aeb7e79b36c74bcded008fe227952c335"> 53</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aeb7e79b36c74bcded008fe227952c335">~CommonCHGraph</a>() { };</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8"> 54</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">CHGKind</a></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c"> 56</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c">Standard</a>,</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8ae9e3edea0bae930aa9af04699fca9506"> 57</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8ae9e3edea0bae930aa9af04699fca9506">DI</a></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; };</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#a0ce9117288d9e0b498f128217fda0cca">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> VFunSet &amp;<a class="code" href="classSVF_1_1CommonCHGraph.html#abe9232b9cada361e0434f7c4390a7864">getCSVFsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> VTableSet &amp;<a class="code" href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">getCSVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">getVFnsFromVtbls</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> VTableSet &amp;vtbls, VFunSet &amp;virtualFunctions) = 0;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b"> 66</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">CHGKind</a> <a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">kind</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071"> 72</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">CHGKind</a> <a class="code" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">kind</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a"> 76</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge&lt;CHNode&gt;</a> <a class="code" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a">GenericCHEdgeTy</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html"> 77</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHEdge.html">CHEdge</a>: <span class="keyword">public</span> GenericCHEdgeTy</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676"> 80</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"> 82</a></span>&#160; INHERITANCE = 0x1, <span class="comment">// inheritance relation</span></div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4"> 83</a></span>&#160; INSTANTCE = 0x2 <span class="comment">// template-instance relation</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; } <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017"> 86</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;CHNode,CHEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017">CHEdgeSetTy</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee"> 88</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee">CHEdge</a>(<a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *s, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *d, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> et, <a class="code" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k = 0):</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; GenericCHEdgeTy(s,d,k)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; edgeType = et;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</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"><a class="line" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525"> 94</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525">getEdgeType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> edgeType;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8"> 100</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>;</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"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d"> 103</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d">GenericCHNodeTy</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html"> 104</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</a>: <span class="keyword">public</span> GenericCHNodeTy</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4"> 107</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4ab530567d5ba09c9c579aef964aef8f81"> 109</a></span>&#160; PURE_ABSTRACT = 0x1, <span class="comment">// pure virtual abstract class</span></div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4afd6d851b22e741690f0736b4858d81a5"> 110</a></span>&#160; MULTI_INHERITANCE = 0x2, <span class="comment">// multi inheritance class</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4a330331556c568fcd60c9df6df2c1281d"> 111</a></span>&#160; TEMPLATE = 0x04 <span class="comment">// template class</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; } <a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31"> 114</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const SVFFunction*&gt; <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">FuncVector</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"><a class="line" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145"> 116</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145">CHNode</a> (<span class="keyword">const</span> std::string name, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0, <a class="code" href="classSVF_1_1GenericNode.html#a3f20339b5295e11beb0f9adb95c7aa5b">GNodeK</a> k = 0):</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; GenericCHNodeTy(i, k), vtable(nullptr), className(name), flags(0)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</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"><a class="line" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e"> 120</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e">~CHNode</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_1CHNode.html#af6e71c1a932464b1b615fc177f5af089"> 123</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> className;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f"> 129</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f">setFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)</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; flags |= mask;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7"> 133</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7">hasFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)<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; <span class="keywordflow">return</span> (flags &amp; mask) == mask;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</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"><a class="line" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024"> 141</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>()</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; setFlag(PURE_ABSTRACT);</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"><a class="line" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440"> 145</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>()</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; setFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438"> 149</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438">setTemplate</a>()</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; setFlag(TEMPLATE);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39"> 153</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> hasFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430"> 157</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">isMultiInheritance</a>()<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; <span class="keywordflow">return</span> hasFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749"> 161</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">isTemplate</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> hasFlag(TEMPLATE);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9"> 167</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(FuncVector vfuncvec)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; virtualFunctionVectors.push_back(vfuncvec);</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"><a class="line" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af"> 171</a></span>&#160; <span class="keyword">const</span> std::vector&lt;FuncVector&gt; &amp;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> virtualFunctionVectors;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">void</span> getVirtualFunctions(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx, FuncVector &amp;virtualFunctions) <span class="keyword">const</span>;</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"><a class="line" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c"> 177</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *<a class="code" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c">getVTable</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> vtable;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</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"><a class="line" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e"> 182</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; vtable = vtbl;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1"> 188</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* <a class="code" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1">vtable</a>;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397"> 189</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397">className</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72"> 190</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72">flags</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> * virtual functions inherited from different classes are separately stored</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"> * to model different vtables inherited from different fathers.</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"> * Example:</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> * class C: public A, public B</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> * vtableC = {Af1, Af2, ..., inttoptr, Bg1, Bg2, ...} (&quot;inttoptr&quot;</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> * instruction works as the delimiter for separating virtual functions</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> * inherited from different classes)</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> * virtualFunctionVectors = {{Af1, Af2, ...}, {Bg1, Bg2, ...}}</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90"> 203</a></span>&#160; std::vector&lt;FuncVector&gt; <a class="code" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90">virtualFunctionVectors</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;};</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd"> 207</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd">GenericCHGraphTy</a>;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html"> 208</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>, <span class="keyword">public</span> GenericCHGraphTy</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"><a class="line" href="classSVF_1_1CHGraph.html#af776f260ae050aa392e32f2a03f23733"> 210</a></span>&#160;<span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1CHGBuilder.html">CHGBuilder</a>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b"> 213</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHNodeSetTy</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12"> 214</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">WorkList</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b"> 215</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b">NameToCHNodesMap</a>;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff"> 216</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff">CallSiteToCHNodesMap</a>;</div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac"> 217</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VTableSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac">CallSiteToVTableSetMap</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74"> 218</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VFunSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74">CallSiteToVFunSetMap</a>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22"> 220</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22a331376f6d22d2346039db7a9c9a311c2"> 222</a></span>&#160; CONSTRUCTOR = 0x1, <span class="comment">// connect node based on constructor</span></div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22adfb68ad45ad216277b580d9a45926dc7"> 223</a></span>&#160; DESTRUCTOR = 0x2 <span class="comment">// connect node based on destructor</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; } <a class="code" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22">RELATIONTYPE</a>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442"> 226</a></span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442">CHGraph</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule): svfMod(svfModule), classNum(0), vfID(0), buildingCHGTime(0)</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; this-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">kind</a> = <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c">Standard</a>;</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; ~<a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>() <span class="keyword">override</span> = <span class="keywordflow">default</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; <span class="keywordtype">void</span> addEdge(<span class="keyword">const</span> std::string className,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">const</span> std::string baseClassName,</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEdge::CHEDGETYPE</a> edgeType);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *getNode(<span class="keyword">const</span> std::string name) <span class="keyword">const</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">getVFnsFromVtbls</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> VTableSet &amp;vtbls, VFunSet &amp;virtualFunctions) <span class="keyword">override</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">void</span> dump(<span class="keyword">const</span> std::string&amp; filename);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">void</span> view();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">void</span> printCH();</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"><a class="line" href="classSVF_1_1CHGraph.html#a913889c72bb8d6637ab7cef4c34613c5"> 241</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> <a class="code" href="classSVF_1_1CHGraph.html#a913889c72bb8d6637ab7cef4c34613c5">getVirtualFunctionID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* vfn)<span class="keyword"> const</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s64_t&gt;::const_iterator</a> it =</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; virtualFunctionToIDMap.find(vfn);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (it != virtualFunctionToIDMap.end())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a32f56db316a2a70940cf24435cff4965"> 250</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1CHGraph.html#a32f56db316a2a70940cf24435cff4965">getVirtualFunctionBasedonID</a>(<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s64_t&gt;::const_iterator</a> it, eit;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">for</span> (it = virtualFunctionToIDMap.begin(), eit =</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; virtualFunctionToIDMap.end(); it != eit; ++it)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == <span class="keywordtype">id</span>)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee"> 262</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee">addInstances</a>(<span class="keyword">const</span> std::string templateName, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>* node)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; NameToCHNodesMap::iterator it = templateNameToInstancesMap.find(</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; templateName);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (it != templateNameToInstancesMap.end())</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; it-&gt;second.insert(node);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; templateNameToInstancesMap[templateName].insert(node);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715"> 271</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">getDescendants</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> classNameToDescendantsMap[className];</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f"> 275</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">getInstances</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> templateNameToInstancesMap[className];</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79"> 280</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> it != csToCHAVtblsMap.end();</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39"> 285</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> it != csToCHAVFnsMap.end();</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148"> 290</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> VTableSet &amp;<a class="code" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148">getCSVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVtblsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vtabls based on CHA.&quot;</span>);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31"> 296</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> VFunSet &amp;<a class="code" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31">getCSVFsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVFnsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vfns based on CHA.&quot;</span>);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6"> 303</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> chg-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>() == <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c">Standard</a>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5"> 310</a></span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* <a class="code" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">svfMod</a>;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0"> 311</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">classNum</a>;</div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ac3be8c8dfee16d7508b73b6f2270eb2d"> 312</a></span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> <a class="code" href="classSVF_1_1CHGraph.html#ac3be8c8dfee16d7508b73b6f2270eb2d">vfID</a>;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836"> 313</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a>;</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650"> 314</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNode *&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">classNameToNodeMap</a>;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006"> 315</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006">classNameToDescendantsMap</a>;</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9"> 316</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">classNameToAncestorsMap</a>;</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045"> 317</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8"> 318</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8">templateNameToInstancesMap</a>;</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986"> 319</a></span>&#160; CallSiteToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af3484748d0dd2567542acd3be18d3c4a"> 321</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, s64_t&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#af3484748d0dd2567542acd3be18d3c4a">virtualFunctionToIDMap</a>;</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333"> 322</a></span>&#160; CallSiteToVTableSetMap <a class="code" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333">csToCHAVtblsMap</a>;</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474"> 323</a></span>&#160; CallSiteToVFunSetMap <a class="code" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">csToCHAVFnsMap</a>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;};</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="namespacellvm.html"> 328</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment"> * GraphTraits specializations for generic graph algorithms.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html"> 334</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;<a class="code" href="namespaceSVF.html">SVF</a>::CHNode*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;{</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;};</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html"> 340</a></span>&#160;<span class="keyword">struct </span>GraphTraits&lt;Inverse&lt;SVF::CHNode*&gt; &gt; : <span class="keyword">public</span> GraphTraits&lt;Inverse&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt; &gt;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;{</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;};</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html"> 344</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;SVF::CHGraph*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;{</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a"> 346</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CHNode.html">SVF::CHNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a">NodeRef</a>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;};</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* CHA_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1CHGraph_html_adb99b732d20cfc8cc0f078cda6753bc0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">SVF::CHGraph::classNum</a></div><div class="ttdeci">u32_t classNum</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00311">CHG.h:311</a></div></div>
69
+ <a href="CHG_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">//===----- CHG.h -- Class hirachary graph ---------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</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;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * CHG.h (previously CHA.h)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Apr 13, 2016</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Xiaokang Fan</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * Created on: Aug 24, 2019</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * Author: Mohamad Barbar</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 CHA_H_</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define CHA_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="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="GenericGraph_8h.html">Graphs/GenericGraph.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WorkList_8h.html">Util/WorkList.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</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;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const GlobalValue*&gt;</a> <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7"> 47</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFFunction*&gt;</a> <a class="code" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html"> 50</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</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"> 52</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#aeb7e79b36c74bcded008fe227952c335"> 53</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aeb7e79b36c74bcded008fe227952c335">~CommonCHGraph</a>() { };</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8"> 54</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">CHGKind</a></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c"> 56</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c">Standard</a>,</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8ae9e3edea0bae930aa9af04699fca9506"> 57</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8ae9e3edea0bae930aa9af04699fca9506">DI</a></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; };</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#a0ce9117288d9e0b498f128217fda0cca">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> VFunSet &amp;<a class="code" href="classSVF_1_1CommonCHGraph.html#abe9232b9cada361e0434f7c4390a7864">getCSVFsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> VTableSet &amp;<a class="code" href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">getCSVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) = 0;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">getVFnsFromVtbls</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> VTableSet &amp;vtbls, VFunSet &amp;virtualFunctions) = 0;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b"> 66</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">CHGKind</a> <a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">kind</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071"> 72</a></span>&#160; <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">CHGKind</a> <a class="code" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">kind</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a"> 76</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericEdge.html">GenericEdge&lt;CHNode&gt;</a> <a class="code" href="namespaceSVF.html#a7cb629496a70d2dd22634405652e573a">GenericCHEdgeTy</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html"> 77</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHEdge.html">CHEdge</a>: <span class="keyword">public</span> GenericCHEdgeTy</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676"> 80</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a78df5157ac61c49a724af5aa03d36d0c"> 82</a></span>&#160; INHERITANCE = 0x1, <span class="comment">// inheritance relation</span></div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676a8721eaefd547d6ba5229463d644815f4"> 83</a></span>&#160; INSTANTCE = 0x2 <span class="comment">// template-instance relation</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; } <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017"> 86</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;CHNode,CHEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017">CHEdgeSetTy</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee"> 88</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee">CHEdge</a>(<a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *s, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *d, <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> et, <a class="code" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k = 0):</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; GenericCHEdgeTy(s,d,k)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; edgeType = et;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</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"><a class="line" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525"> 94</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525">getEdgeType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> edgeType;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8"> 100</a></span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEDGETYPE</a> <a class="code" href="classSVF_1_1CHEdge.html#a58ac14decda4041e773d723475f5c1c8">edgeType</a>;</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"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d"> 103</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html">GenericNode&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#a838ed37e84836101711c25a760eec57d">GenericCHNodeTy</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html"> 104</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHNode.html">CHNode</a>: <span class="keyword">public</span> GenericCHNodeTy</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4"> 107</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4ab530567d5ba09c9c579aef964aef8f81"> 109</a></span>&#160; PURE_ABSTRACT = 0x1, <span class="comment">// pure virtual abstract class</span></div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4afd6d851b22e741690f0736b4858d81a5"> 110</a></span>&#160; MULTI_INHERITANCE = 0x2, <span class="comment">// multi inheritance class</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4a330331556c568fcd60c9df6df2c1281d"> 111</a></span>&#160; TEMPLATE = 0x04 <span class="comment">// template class</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; } <a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31"> 114</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const SVFFunction*&gt; <a class="code" href="classSVF_1_1CHNode.html#aa4af6538c9994ec54a7b82691f846a31">FuncVector</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"><a class="line" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145"> 116</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#a1f2c496e378d01841e4dc164942dc145">CHNode</a> (<span class="keyword">const</span> std::string name, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0, <a class="code" href="classSVF_1_1GenericNode.html#a3f20339b5295e11beb0f9adb95c7aa5b">GNodeK</a> k = 0):</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; GenericCHNodeTy(i, k), vtable(nullptr), className(name), flags(0)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</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"><a class="line" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e"> 120</a></span>&#160; <a class="code" href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e">~CHNode</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_1CHNode.html#af6e71c1a932464b1b615fc177f5af089"> 123</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> className;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f"> 129</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#ab3755d804852b8a98bdf8cd0171f3a2f">setFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)</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; flags |= mask;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7"> 133</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7">hasFlag</a>(<a class="code" href="classSVF_1_1CHNode.html#a7111a3971f9f03e32bfd291a783d43b4">CLASSATTR</a> mask)<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; <span class="keywordflow">return</span> (flags &amp; mask) == mask;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</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"><a class="line" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024"> 141</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">setPureAbstract</a>()</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; setFlag(PURE_ABSTRACT);</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"><a class="line" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440"> 145</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">setMultiInheritance</a>()</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; setFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438"> 149</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a00343177422c8d84d707432d0c483438">setTemplate</a>()</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; setFlag(TEMPLATE);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39"> 153</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">isPureAbstract</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> hasFlag(PURE_ABSTRACT);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430"> 157</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#a224a394537fae62e64cf62a0d4fdd430">isMultiInheritance</a>()<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; <span class="keywordflow">return</span> hasFlag(MULTI_INHERITANCE);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749"> 161</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">isTemplate</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> hasFlag(TEMPLATE);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9"> 167</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">addVirtualFunctionVector</a>(FuncVector vfuncvec)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; virtualFunctionVectors.push_back(vfuncvec);</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"><a class="line" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af"> 171</a></span>&#160; <span class="keyword">const</span> std::vector&lt;FuncVector&gt; &amp;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> virtualFunctionVectors;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">void</span> getVirtualFunctions(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx, FuncVector &amp;virtualFunctions) <span class="keyword">const</span>;</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"><a class="line" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c"> 177</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *<a class="code" href="classSVF_1_1CHNode.html#a600b63dac83e526c933c141d4e2bcc0c">getVTable</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> vtable;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</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"><a class="line" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e"> 182</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHNode.html#a2c31580f1cf43fbdd01a07b6f9f6b04e">setVTable</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; vtable = vtbl;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1"> 188</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* <a class="code" href="classSVF_1_1CHNode.html#a08a717043e8b8c3d87742f0ecd3a3cc1">vtable</a>;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397"> 189</a></span>&#160; std::string <a class="code" href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397">className</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72"> 190</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1CHNode.html#a6844c89f715979709dc52d4854373e72">flags</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> * virtual functions inherited from different classes are separately stored</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"> * to model different vtables inherited from different fathers.</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"> * Example:</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> * class C: public A, public B</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> * vtableC = {Af1, Af2, ..., inttoptr, Bg1, Bg2, ...} (&quot;inttoptr&quot;</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> * instruction works as the delimiter for separating virtual functions</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> * inherited from different classes)</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> * virtualFunctionVectors = {{Af1, Af2, ...}, {Bg1, Bg2, ...}}</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90"> 203</a></span>&#160; std::vector&lt;FuncVector&gt; <a class="code" href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90">virtualFunctionVectors</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;};</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd"> 207</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph&lt;CHNode,CHEdge&gt;</a> <a class="code" href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd">GenericCHGraphTy</a>;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html"> 208</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a>, <span class="keyword">public</span> GenericCHGraphTy</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"><a class="line" href="classSVF_1_1CHGraph.html#af776f260ae050aa392e32f2a03f23733"> 210</a></span>&#160;<span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1CHGBuilder.html">CHGBuilder</a>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b"> 213</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHNodeSetTy</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12"> 214</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const CHNode*&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">WorkList</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b"> 215</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b">NameToCHNodesMap</a>;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff"> 216</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, CHNodeSetTy&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a3740a239432a5c7237109aa72aa28eff">CallSiteToCHNodesMap</a>;</div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac"> 217</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VTableSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aefdf6c5fe8a26efce200e8225d463cac">CallSiteToVTableSetMap</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74"> 218</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CallSite, VFunSet&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74">CallSiteToVFunSetMap</a>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22"> 220</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">enum</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22a331376f6d22d2346039db7a9c9a311c2"> 222</a></span>&#160; CONSTRUCTOR = 0x1, <span class="comment">// connect node based on constructor</span></div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22adfb68ad45ad216277b580d9a45926dc7"> 223</a></span>&#160; DESTRUCTOR = 0x2 <span class="comment">// connect node based on destructor</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; } <a class="code" href="classSVF_1_1CHGraph.html#a2a1da7f262a2f11653fb583154a93a22">RELATIONTYPE</a>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442"> 226</a></span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442">CHGraph</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule): svfMod(svfModule), classNum(0), vfID(0), buildingCHGTime(0)</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; this-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">kind</a> = <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c">Standard</a>;</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; ~<a class="code" href="classSVF_1_1CHGraph.html">CHGraph</a>() <span class="keyword">override</span> = <span class="keywordflow">default</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; <span class="keywordtype">void</span> addEdge(<span class="keyword">const</span> std::string className,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">const</span> std::string baseClassName,</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1CHEdge.html#a26280c3b724551036f7e3ba2b5922676">CHEdge::CHEDGETYPE</a> edgeType);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *getNode(<span class="keyword">const</span> std::string name) <span class="keyword">const</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">getVFnsFromVtbls</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> VTableSet &amp;vtbls, VFunSet &amp;virtualFunctions) <span class="keyword">override</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">void</span> dump(<span class="keyword">const</span> std::string&amp; filename);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">void</span> view();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">void</span> printCH();</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"><a class="line" href="classSVF_1_1CHGraph.html#a7151563857b7b6bdf8195aa571df7516"> 241</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#a7151563857b7b6bdf8195aa571df7516">getVirtualFunctionID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* vfn)<span class="keyword"> const</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, u32_t&gt;::const_iterator</a> it =</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; virtualFunctionToIDMap.find(vfn);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (it != virtualFunctionToIDMap.end())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a7b678b4362a93e969f11b110b85d35ca"> 250</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1CHGraph.html#a7b678b4362a93e969f11b110b85d35ca">getVirtualFunctionBasedonID</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, u32_t&gt;::const_iterator</a> it, eit;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">for</span> (it = virtualFunctionToIDMap.begin(), eit =</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; virtualFunctionToIDMap.end(); it != eit; ++it)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == <span class="keywordtype">id</span>)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee"> 262</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CHGraph.html#a5ee7e559425045f3af5c35ea6d6f03ee">addInstances</a>(<span class="keyword">const</span> std::string templateName, <a class="code" href="classSVF_1_1CHNode.html">CHNode</a>* node)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; NameToCHNodesMap::iterator it = templateNameToInstancesMap.find(</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; templateName);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (it != templateNameToInstancesMap.end())</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; it-&gt;second.insert(node);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; templateNameToInstancesMap[templateName].insert(node);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715"> 271</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a26f89a9b269cad3fc894110d25598715">getDescendants</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> classNameToDescendantsMap[className];</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f"> 275</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CHNodeSetTy &amp;<a class="code" href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">getInstances</a>(<span class="keyword">const</span> std::string className)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> templateNameToInstancesMap[className];</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79"> 280</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#acd4907aa926a4c7fdc3964700d721f79">csHasVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> it != csToCHAVtblsMap.end();</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39"> 285</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#a885a81b08477e6ccdd7df98d249b8c39">csHasVFnsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> it != csToCHAVFnsMap.end();</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148"> 290</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> VTableSet &amp;<a class="code" href="classSVF_1_1CHGraph.html#a9878df891d2e20d09b65096060d2c148">getCSVtblsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; CallSiteToVTableSetMap::const_iterator it = csToCHAVtblsMap.find(cs);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVtblsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vtabls based on CHA.&quot;</span>);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31"> 296</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> VFunSet &amp;<a class="code" href="classSVF_1_1CHGraph.html#a1c0ca4e6a466ad317daf00a6c7de8e31">getCSVFsBasedonCHA</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> override</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; CallSiteToVFunSetMap::const_iterator it = csToCHAVFnsMap.find(cs);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != csToCHAVFnsMap.end() &amp;&amp; <span class="stringliteral">&quot;cs does not have vfns based on CHA.&quot;</span>);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6"> 303</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CHGraph.html#ae7e9f1a3c524d80c77b2a75f877dc2d6">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> chg-&gt;<a class="code" href="classSVF_1_1CommonCHGraph.html#adf2a02fff9d7dd9fc9d92121e5e28f8b">getKind</a>() == <a class="code" href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8afa3f4c3017fb95011bfdc11b147eae0c">Standard</a>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5"> 310</a></span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* <a class="code" href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">svfMod</a>;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0"> 311</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">classNum</a>;</div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab2d60bc836482fb98142da6151a91270"> 312</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CHGraph.html#ab2d60bc836482fb98142da6151a91270">vfID</a>;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836"> 313</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1CHGraph.html#ab5bd2348e4418fcb2f3b18227fccd836">buildingCHGTime</a>;</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650"> 314</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, CHNode *&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">classNameToNodeMap</a>;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006"> 315</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#ac08f846413b6aed26a1bf39eb865b006">classNameToDescendantsMap</a>;</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9"> 316</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a083f726d74208c2d8107a75e0d6b3ca9">classNameToAncestorsMap</a>;</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045"> 317</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#aaec4bdde66e4a7a63ea3f3c6ec0bd045">classNameToInstAndDescsMap</a>;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8"> 318</a></span>&#160; NameToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8">templateNameToInstancesMap</a>;</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986"> 319</a></span>&#160; CallSiteToCHNodesMap <a class="code" href="classSVF_1_1CHGraph.html#a7ef9982d89a4932883bd58bc49ad9986">csToClassesMap</a>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a70a2bab82563a910d32a9169030596c0"> 321</a></span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, u32_t&gt;</a> <a class="code" href="classSVF_1_1CHGraph.html#a70a2bab82563a910d32a9169030596c0">virtualFunctionToIDMap</a>;</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333"> 322</a></span>&#160; CallSiteToVTableSetMap <a class="code" href="classSVF_1_1CHGraph.html#af3ed2bee5d76e5a848b250950c3be333">csToCHAVtblsMap</a>;</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474"> 323</a></span>&#160; CallSiteToVFunSetMap <a class="code" href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">csToCHAVFnsMap</a>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;};</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="namespacellvm.html"> 328</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment"> * GraphTraits specializations for generic graph algorithms.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html"> 334</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;<a class="code" href="namespaceSVF.html">SVF</a>::CHNode*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;{</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;};</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html"> 340</a></span>&#160;<span class="keyword">struct </span>GraphTraits&lt;Inverse&lt;SVF::CHNode*&gt; &gt; : <span class="keyword">public</span> GraphTraits&lt;Inverse&lt;SVF::GenericNode&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt; &gt;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;{</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;};</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html"> 344</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;SVF::CHGraph*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::CHNode,SVF::CHEdge&gt;* &gt;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;{</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a"> 346</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CHNode.html">SVF::CHNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html#aea2a657d278919364d2911d92b3e6f5a">NodeRef</a>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;};</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* CHA_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1CHGraph_html_adb99b732d20cfc8cc0f078cda6753bc0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#adb99b732d20cfc8cc0f078cda6753bc0">SVF::CHGraph::classNum</a></div><div class="ttdeci">u32_t classNum</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00311">CHG.h:311</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1CHGraph_html_acd022005e2191bc3bcb265805abee4f8"><div class="ttname"><a href="classSVF_1_1CHGraph.html#acd022005e2191bc3bcb265805abee4f8">SVF::CHGraph::templateNameToInstancesMap</a></div><div class="ttdeci">NameToCHNodesMap templateNameToInstancesMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00318">CHG.h:318</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1CHEdge_html_ae2b90913c6c5a30df2b285d31c694525"><div class="ttname"><a href="classSVF_1_1CHEdge.html#ae2b90913c6c5a30df2b285d31c694525">SVF::CHEdge::getEdgeType</a></div><div class="ttdeci">CHEDGETYPE getEdgeType() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00094">CHG.h:94</a></div></div>
72
72
  <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00328">CHG.h:328</a></div></div>
73
- <div class="ttc" id="classSVF_1_1CHGraph_html_af3484748d0dd2567542acd3be18d3c4a"><div class="ttname"><a href="classSVF_1_1CHGraph.html#af3484748d0dd2567542acd3be18d3c4a">SVF::CHGraph::virtualFunctionToIDMap</a></div><div class="ttdeci">Map&lt; const SVFFunction *, s64_t &gt; virtualFunctionToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00321">CHG.h:321</a></div></div>
74
73
  <div class="ttc" id="classSVF_1_1CommonCHGraph_html_a4d3f2b9ed7ae8e87baf69525e9115071"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#a4d3f2b9ed7ae8e87baf69525e9115071">SVF::CommonCHGraph::kind</a></div><div class="ttdeci">CHGKind kind</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00072">CHG.h:72</a></div></div>
75
74
  <div class="ttc" id="classSVF_1_1CHGraph_html_aedb20aca2fa11a070cfe28e14fd3552b"><div class="ttname"><a href="classSVF_1_1CHGraph.html#aedb20aca2fa11a070cfe28e14fd3552b">SVF::CHGraph::NameToCHNodesMap</a></div><div class="ttdeci">Map&lt; std::string, CHNodeSetTy &gt; NameToCHNodesMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00215">CHG.h:215</a></div></div>
76
75
  <div class="ttc" id="classSVF_1_1CHGraph_html_a62a3ccdbc55381d5f8d96dc23141f2e5"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a62a3ccdbc55381d5f8d96dc23141f2e5">SVF::CHGraph::svfMod</a></div><div class="ttdeci">SVFModule * svfMod</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00310">CHG.h:310</a></div></div>
@@ -117,14 +116,15 @@ $(function() {
117
116
  <div class="ttc" id="classSVF_1_1CHNode_html_a5d751a3a0d88c0de374bfeb526051440"><div class="ttname"><a href="classSVF_1_1CHNode.html#a5d751a3a0d88c0de374bfeb526051440">SVF::CHNode::setMultiInheritance</a></div><div class="ttdeci">void setMultiInheritance()</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00145">CHG.h:145</a></div></div>
118
117
  <div class="ttc" id="classSVF_1_1CHGraph_html_a894a69fa143d3f460d433646a0521b6f"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a894a69fa143d3f460d433646a0521b6f">SVF::CHGraph::getInstances</a></div><div class="ttdeci">const CHNodeSetTy &amp; getInstances(const std::string className)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00275">CHG.h:275</a></div></div>
119
118
  <div class="ttc" id="GenericGraph_8h_html"><div class="ttname"><a href="GenericGraph_8h.html">GenericGraph.h</a></div></div>
119
+ <div class="ttc" id="classSVF_1_1CHGraph_html_a70a2bab82563a910d32a9169030596c0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a70a2bab82563a910d32a9169030596c0">SVF::CHGraph::virtualFunctionToIDMap</a></div><div class="ttdeci">Map&lt; const SVFFunction *, u32_t &gt; virtualFunctionToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00321">CHG.h:321</a></div></div>
120
120
  <div class="ttc" id="classSVF_1_1GenericEdge_html_aab8892b73370c32b48621cd1d0cce614"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">SVF::GenericEdge::GEdgeFlag</a></div><div class="ttdeci">u64_t GEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00052">GenericGraph.h:52</a></div></div>
121
121
  <div class="ttc" id="classSVF_1_1CommonCHGraph_html_a6a1feb9e268fb56b0de3efc39cfc8db8"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#a6a1feb9e268fb56b0de3efc39cfc8db8">SVF::CommonCHGraph::CHGKind</a></div><div class="ttdeci">CHGKind</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00054">CHG.h:54</a></div></div>
122
122
  <div class="ttc" id="classSVF_1_1CHGraph_html_a5e6502c5baad99c70e1cf56c84ce9474"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a5e6502c5baad99c70e1cf56c84ce9474">SVF::CHGraph::csToCHAVFnsMap</a></div><div class="ttdeci">CallSiteToVFunSetMap csToCHAVFnsMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00323">CHG.h:323</a></div></div>
123
123
  <div class="ttc" id="classSVF_1_1CHEdge_html"><div class="ttname"><a href="classSVF_1_1CHEdge.html">SVF::CHEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00077">CHG.h:77</a></div></div>
124
124
  <div class="ttc" id="classSVF_1_1CHNode_html_a8c51571df92b5e152cc42e9aaf712dc9"><div class="ttname"><a href="classSVF_1_1CHNode.html#a8c51571df92b5e152cc42e9aaf712dc9">SVF::CHNode::addVirtualFunctionVector</a></div><div class="ttdeci">void addVirtualFunctionVector(FuncVector vfuncvec)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00167">CHG.h:167</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1CHNode_html_aff23fda93401c60422a4a5a08d77d749"><div class="ttname"><a href="classSVF_1_1CHNode.html#aff23fda93401c60422a4a5a08d77d749">SVF::CHNode::isTemplate</a></div><div class="ttdeci">bool isTemplate() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00161">CHG.h:161</a></div></div>
126
+ <div class="ttc" id="classSVF_1_1CHGraph_html_a7b678b4362a93e969f11b110b85d35ca"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7b678b4362a93e969f11b110b85d35ca">SVF::CHGraph::getVirtualFunctionBasedonID</a></div><div class="ttdeci">const SVFFunction * getVirtualFunctionBasedonID(u32_t id) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00250">CHG.h:250</a></div></div>
126
127
  <div class="ttc" id="namespaceSVF_html_a67f3f86344f028cacfbeb08caaf7bb0f"><div class="ttname"><a href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">SVF::GlobalValue</a></div><div class="ttdeci">llvm::GlobalValue GlobalValue</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
127
- <div class="ttc" id="classSVF_1_1CHGraph_html_ac3be8c8dfee16d7508b73b6f2270eb2d"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ac3be8c8dfee16d7508b73b6f2270eb2d">SVF::CHGraph::vfID</a></div><div class="ttdeci">s64_t vfID</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00312">CHG.h:312</a></div></div>
128
128
  <div class="ttc" id="classSVF_1_1CommonCHGraph_html_aff7363feebc20267dad7230666b583b1"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">SVF::CommonCHGraph::csHasVtblsBasedonCHA</a></div><div class="ttdeci">virtual bool csHasVtblsBasedonCHA(CallSite cs)=0</div></div>
129
129
  <div class="ttc" id="namespaceSVF_html_ad2b487757f1e1a1d81073120fc1d49c7"><div class="ttname"><a href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">SVF::VFunSet</a></div><div class="ttdeci">Set&lt; const SVFFunction * &gt; VFunSet</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00047">CHG.h:47</a></div></div>
130
130
  <div class="ttc" id="classSVF_1_1CHNode_html_ac7c18617b768a2988cf4eff7e849f397"><div class="ttname"><a href="classSVF_1_1CHNode.html#ac7c18617b768a2988cf4eff7e849f397">SVF::CHNode::className</a></div><div class="ttdeci">std::string className</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00189">CHG.h:189</a></div></div>
@@ -142,13 +142,11 @@ $(function() {
142
142
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00137">WorkList.h:137</a></div></div>
143
143
  <div class="ttc" id="classSVF_1_1CHGraph_html_aa040bc0a5653843419d24777343e1650"><div class="ttname"><a href="classSVF_1_1CHGraph.html#aa040bc0a5653843419d24777343e1650">SVF::CHGraph::classNameToNodeMap</a></div><div class="ttdeci">Map&lt; std::string, CHNode * &gt; classNameToNodeMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00314">CHG.h:314</a></div></div>
144
144
  <div class="ttc" id="classSVF_1_1CHGraph_html_afacd7d35dad4344a5c2551d951acb442"><div class="ttname"><a href="classSVF_1_1CHGraph.html#afacd7d35dad4344a5c2551d951acb442">SVF::CHGraph::CHGraph</a></div><div class="ttdeci">CHGraph(SVFModule *svfModule)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00226">CHG.h:226</a></div></div>
145
- <div class="ttc" id="classSVF_1_1CHGraph_html_a913889c72bb8d6637ab7cef4c34613c5"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a913889c72bb8d6637ab7cef4c34613c5">SVF::CHGraph::getVirtualFunctionID</a></div><div class="ttdeci">s64_t getVirtualFunctionID(const SVFFunction *vfn) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00241">CHG.h:241</a></div></div>
146
145
  <div class="ttc" id="classSVF_1_1CHNode_html_a9c81308b3eac1728c122fda39e260a90"><div class="ttname"><a href="classSVF_1_1CHNode.html#a9c81308b3eac1728c122fda39e260a90">SVF::CHNode::virtualFunctionVectors</a></div><div class="ttdeci">std::vector&lt; FuncVector &gt; virtualFunctionVectors</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00203">CHG.h:203</a></div></div>
147
146
  <div class="ttc" id="classSVF_1_1CHNode_html_aebcbd36a7efc0dbe9b3c3f680ef033e7"><div class="ttname"><a href="classSVF_1_1CHNode.html#aebcbd36a7efc0dbe9b3c3f680ef033e7">SVF::CHNode::hasFlag</a></div><div class="ttdeci">bool hasFlag(CLASSATTR mask) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00133">CHG.h:133</a></div></div>
148
147
  <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>
149
148
  <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00289">BasicTypes.h:289</a></div></div>
150
149
  <div class="ttc" id="classSVF_1_1CHGraph_html_a0397e5da88106dc8b4a1e207ae455e74"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a0397e5da88106dc8b4a1e207ae455e74">SVF::CHGraph::CallSiteToVFunSetMap</a></div><div class="ttdeci">Map&lt; CallSite, VFunSet &gt; CallSiteToVFunSetMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00218">CHG.h:218</a></div></div>
151
- <div class="ttc" id="classSVF_1_1CHGraph_html_a32f56db316a2a70940cf24435cff4965"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a32f56db316a2a70940cf24435cff4965">SVF::CHGraph::getVirtualFunctionBasedonID</a></div><div class="ttdeci">const SVFFunction * getVirtualFunctionBasedonID(s64_t id) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00250">CHG.h:250</a></div></div>
152
150
  <div class="ttc" id="namespaceSVF_html_aa8bd37e4ec2e98c805a14adbf590b9dd"><div class="ttname"><a href="namespaceSVF.html#aa8bd37e4ec2e98c805a14adbf590b9dd">SVF::GenericCHGraphTy</a></div><div class="ttdeci">GenericGraph&lt; CHNode, CHEdge &gt; GenericCHGraphTy</div><div class="ttdoc">class hierarchy graph </div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00207">CHG.h:207</a></div></div>
153
151
  <div class="ttc" id="classSVF_1_1CHNode_html_aff05589899b58112119af68df5d1997e"><div class="ttname"><a href="classSVF_1_1CHNode.html#aff05589899b58112119af68df5d1997e">SVF::CHNode::~CHNode</a></div><div class="ttdeci">~CHNode()</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00120">CHG.h:120</a></div></div>
154
152
  <div class="ttc" id="classSVF_1_1CHNode_html_abac89987927dadd53dd646eae540a024"><div class="ttname"><a href="classSVF_1_1CHNode.html#abac89987927dadd53dd646eae540a024">SVF::CHNode::setPureAbstract</a></div><div class="ttdeci">void setPureAbstract()</div><div class="ttdoc">Attribute. </div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00141">CHG.h:141</a></div></div>
@@ -157,10 +155,11 @@ $(function() {
157
155
  <div class="ttc" id="classSVF_1_1CHGraph_html_af1b638faf888898cdf168c25e008ab12"><div class="ttname"><a href="classSVF_1_1CHGraph.html#af1b638faf888898cdf168c25e008ab12">SVF::CHGraph::WorkList</a></div><div class="ttdeci">FIFOWorkList&lt; const CHNode * &gt; WorkList</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00214">CHG.h:214</a></div></div>
158
156
  <div class="ttc" id="classSVF_1_1GenericGraph_html"><div class="ttname"><a href="classSVF_1_1GenericGraph.html">SVF::GenericGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00327">GenericGraph.h:327</a></div></div>
159
157
  <div class="ttc" id="classSVF_1_1CommonCHGraph_html_a0ce9117288d9e0b498f128217fda0cca"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html#a0ce9117288d9e0b498f128217fda0cca">SVF::CommonCHGraph::csHasVFnsBasedonCHA</a></div><div class="ttdeci">virtual bool csHasVFnsBasedonCHA(CallSite cs)=0</div></div>
158
+ <div class="ttc" id="classSVF_1_1CHGraph_html_a7151563857b7b6bdf8195aa571df7516"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a7151563857b7b6bdf8195aa571df7516">SVF::CHGraph::getVirtualFunctionID</a></div><div class="ttdeci">u32_t getVirtualFunctionID(const SVFFunction *vfn) const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00241">CHG.h:241</a></div></div>
160
159
  <div class="ttc" id="classSVF_1_1CHEdge_html_ae2c206fb3c7e4d9deec7d8298caf5017"><div class="ttname"><a href="classSVF_1_1CHEdge.html#ae2c206fb3c7e4d9deec7d8298caf5017">SVF::CHEdge::CHEdgeSetTy</a></div><div class="ttdeci">GenericNode&lt; CHNode, CHEdge &gt;::GEdgeSetTy CHEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00086">CHG.h:86</a></div></div>
161
- <div class="ttc" id="namespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00080">SVFBasicTypes.h:80</a></div></div>
162
160
  <div class="ttc" id="classSVF_1_1CHEdge_html_af01c14c28db231b7bfae39344d1ae8ee"><div class="ttname"><a href="classSVF_1_1CHEdge.html#af01c14c28db231b7bfae39344d1ae8ee">SVF::CHEdge::CHEdge</a></div><div class="ttdeci">CHEdge(CHNode *s, CHNode *d, CHEDGETYPE et, GEdgeFlag k=0)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00088">CHG.h:88</a></div></div>
163
161
  <div class="ttc" id="classSVF_1_1CommonCHGraph_html"><div class="ttname"><a href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></div><div class="ttdoc">Common base for class hierarchy graph. Only implements what PointerAnalysis needs. </div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00050">CHG.h:50</a></div></div>
162
+ <div class="ttc" id="classSVF_1_1CHGraph_html_ab2d60bc836482fb98142da6151a91270"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ab2d60bc836482fb98142da6151a91270">SVF::CHGraph::vfID</a></div><div class="ttdeci">u32_t vfID</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00312">CHG.h:312</a></div></div>
164
163
  <div class="ttc" id="classSVF_1_1CHNode_html_a268ccdfb486cc2efa8581ee7a3b5af39"><div class="ttname"><a href="classSVF_1_1CHNode.html#a268ccdfb486cc2efa8581ee7a3b5af39">SVF::CHNode::isPureAbstract</a></div><div class="ttdeci">bool isPureAbstract() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00153">CHG.h:153</a></div></div>
165
164
  <div class="ttc" id="classSVF_1_1CHNode_html_af6e71c1a932464b1b615fc177f5af089"><div class="ttname"><a href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">SVF::CHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00123">CHG.h:123</a></div></div>
166
165
  <div class="ttc" id="classSVF_1_1CHGBuilder_html"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html">SVF::CHGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00034">CHGBuilder.h:34</a></div></div>