svf-tools 1.0.528 → 1.0.531

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 (175) hide show
  1. package/CMakeLists.txt +1 -1
  2. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +10 -10
  3. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
  5. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +1 -1
  10. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +15 -15
  11. package/SVF-doxygen/html/html/DCHG_8h_source.html +6 -6
  12. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  13. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +3 -3
  14. package/SVF-doxygen/html/html/ExeState_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h.html +4 -4
  16. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
  17. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
  19. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +5 -5
  20. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +5 -5
  22. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  23. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +7 -7
  24. package/SVF-doxygen/html/html/LLVMUtil_8h.html +10 -10
  25. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  26. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  27. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +5 -5
  28. package/SVF-doxygen/html/html/MHP_8cpp.html +5 -5
  29. package/SVF-doxygen/html/html/MHP_8cpp_source.html +6 -6
  30. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  31. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +5 -5
  33. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +2 -2
  34. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  35. package/SVF-doxygen/html/html/MTA_8cpp_source.html +3 -3
  36. package/SVF-doxygen/html/html/MTA_8h_source.html +4 -4
  37. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  38. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
  39. package/SVF-doxygen/html/html/PointsTo_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +157 -1351
  41. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +76 -75
  42. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +24 -24
  43. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +34 -34
  44. package/SVF-doxygen/html/html/SVFLoop_8h_source.html +32 -32
  45. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +2 -2
  46. package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +2 -2
  47. package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
  48. package/SVF-doxygen/html/html/SymState_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +17 -17
  50. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
  51. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  52. package/SVF-doxygen/html/html/TCT_8h_source.html +2 -2
  53. package/SVF-doxygen/html/html/WPAPass_8h_source.html +2 -2
  54. package/SVF-doxygen/html/html/Z3Expr_8h_source.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  56. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +5 -5
  57. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +12 -12
  58. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  59. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +149 -149
  60. package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +12 -12
  61. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  62. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +5 -5
  63. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +18 -18
  64. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +5 -5
  65. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +10 -10
  66. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +2 -2
  67. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +7 -7
  68. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
  69. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +12 -12
  70. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
  71. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +10 -10
  72. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
  73. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -3
  74. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
  75. package/SVF-doxygen/html/html/classSVF_1_1PTASCEV.html +5 -5
  76. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  77. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +88 -88
  78. package/SVF-doxygen/html/html/classSVF_1_1SVFLoop.html +57 -57
  79. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +10 -10
  80. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +25 -25
  81. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  82. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
  83. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +2 -2
  84. package/SVF-doxygen/html/html/globals_a.html +0 -9
  85. package/SVF-doxygen/html/html/globals_b.html +4 -19
  86. package/SVF-doxygen/html/html/globals_c.html +8 -50
  87. package/SVF-doxygen/html/html/globals_d.html +0 -33
  88. package/SVF-doxygen/html/html/globals_e.html +0 -6
  89. package/SVF-doxygen/html/html/globals_f.html +2 -8
  90. package/SVF-doxygen/html/html/globals_g.html +0 -9
  91. package/SVF-doxygen/html/html/globals_i.html +4 -22
  92. package/SVF-doxygen/html/html/globals_l.html +2 -8
  93. package/SVF-doxygen/html/html/globals_m.html +1 -13
  94. package/SVF-doxygen/html/html/globals_p.html +0 -3
  95. package/SVF-doxygen/html/html/globals_r.html +4 -10
  96. package/SVF-doxygen/html/html/globals_s.html +0 -30
  97. package/SVF-doxygen/html/html/globals_type.html +1 -284
  98. package/SVF-doxygen/html/html/globals_u.html +0 -15
  99. package/SVF-doxygen/html/html/globals_v.html +2 -17
  100. package/SVF-doxygen/html/html/menudata.js +19 -34
  101. package/SVF-doxygen/html/html/namespaceSVF.html +1825 -475
  102. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +45 -45
  103. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +10 -10
  104. package/SVF-doxygen/html/html/namespacellvm.html +4 -8
  105. package/SVF-doxygen/html/html/namespacemembers.html +9 -0
  106. package/SVF-doxygen/html/html/namespacemembers_b.html +13 -0
  107. package/SVF-doxygen/html/html/namespacemembers_c.html +43 -1
  108. package/SVF-doxygen/html/html/namespacemembers_d.html +34 -1
  109. package/SVF-doxygen/html/html/namespacemembers_e.html +6 -0
  110. package/SVF-doxygen/html/html/namespacemembers_f.html +6 -0
  111. package/SVF-doxygen/html/html/namespacemembers_g.html +13 -4
  112. package/SVF-doxygen/html/html/namespacemembers_i.html +26 -8
  113. package/SVF-doxygen/html/html/namespacemembers_l.html +6 -0
  114. package/SVF-doxygen/html/html/namespacemembers_m.html +12 -0
  115. package/SVF-doxygen/html/html/namespacemembers_p.html +3 -0
  116. package/SVF-doxygen/html/html/namespacemembers_r.html +6 -0
  117. package/SVF-doxygen/html/html/namespacemembers_s.html +30 -0
  118. package/SVF-doxygen/html/html/namespacemembers_type.html +7 -436
  119. package/SVF-doxygen/html/html/namespacemembers_type_b.html +3 -0
  120. package/SVF-doxygen/html/html/namespacemembers_type_c.html +8 -8
  121. package/SVF-doxygen/html/html/namespacemembers_type_e.html +6 -0
  122. package/SVF-doxygen/html/html/namespacemembers_type_g.html +9 -0
  123. package/SVF-doxygen/html/html/namespacemembers_type_l.html +0 -3
  124. package/SVF-doxygen/html/html/namespacemembers_type_m.html +3 -0
  125. package/SVF-doxygen/html/html/namespacemembers_type_n.html +1 -1
  126. package/SVF-doxygen/html/html/namespacemembers_type_p.html +0 -6
  127. package/SVF-doxygen/html/html/namespacemembers_type_s.html +3 -18
  128. package/SVF-doxygen/html/html/namespacemembers_type_t.html +0 -3
  129. package/SVF-doxygen/html/html/namespacemembers_type_v.html +0 -6
  130. package/SVF-doxygen/html/html/namespacemembers_u.html +15 -0
  131. package/SVF-doxygen/html/html/namespacemembers_v.html +15 -0
  132. package/SVF-doxygen/html/html/search/all_1.js +3 -3
  133. package/SVF-doxygen/html/html/search/all_10.js +1 -1
  134. package/SVF-doxygen/html/html/search/all_11.js +2 -2
  135. package/SVF-doxygen/html/html/search/all_12.js +10 -10
  136. package/SVF-doxygen/html/html/search/all_14.js +5 -5
  137. package/SVF-doxygen/html/html/search/all_15.js +5 -5
  138. package/SVF-doxygen/html/html/search/all_2.js +5 -5
  139. package/SVF-doxygen/html/html/search/all_3.js +14 -14
  140. package/SVF-doxygen/html/html/search/all_4.js +11 -11
  141. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  142. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  143. package/SVF-doxygen/html/html/search/all_7.js +3 -3
  144. package/SVF-doxygen/html/html/search/all_9.js +6 -6
  145. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  146. package/SVF-doxygen/html/html/search/all_d.js +4 -4
  147. package/SVF-doxygen/html/html/search/typedefs_0.js +3 -3
  148. package/SVF-doxygen/html/html/search/typedefs_1.js +5 -5
  149. package/SVF-doxygen/html/html/search/typedefs_10.js +10 -10
  150. package/SVF-doxygen/html/html/search/typedefs_12.js +5 -5
  151. package/SVF-doxygen/html/html/search/typedefs_13.js +5 -5
  152. package/SVF-doxygen/html/html/search/typedefs_2.js +14 -14
  153. package/SVF-doxygen/html/html/search/typedefs_3.js +11 -11
  154. package/SVF-doxygen/html/html/search/typedefs_4.js +2 -2
  155. package/SVF-doxygen/html/html/search/typedefs_5.js +2 -2
  156. package/SVF-doxygen/html/html/search/typedefs_6.js +3 -3
  157. package/SVF-doxygen/html/html/search/typedefs_7.js +6 -6
  158. package/SVF-doxygen/html/html/search/typedefs_a.js +2 -2
  159. package/SVF-doxygen/html/html/search/typedefs_b.js +4 -4
  160. package/SVF-doxygen/html/html/search/typedefs_e.js +1 -1
  161. package/SVF-doxygen/html/html/search/typedefs_f.js +2 -2
  162. package/include/MemoryModel/PointsTo.h +1 -1
  163. package/include/MemoryModel/SVFLoop.h +2 -1
  164. package/include/SVF-FE/BasicTypes.h +5 -0
  165. package/include/SVF-FE/CHGBuilder.h +2 -1
  166. package/include/SVF-FE/LLVMLoopAnalysis.h +1 -1
  167. package/include/SVF-FE/SymbolTableBuilder.h +1 -1
  168. package/include/Util/CoreBitVector.h +1 -1
  169. package/include/Util/DPItem.h +1 -1
  170. package/include/Util/ExeState.h +1 -1
  171. package/include/Util/SparseBitVector.h +1 -1
  172. package/include/Util/SymState.h +1 -1
  173. package/include/Util/Z3Expr.h +3 -2
  174. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  175. package/package.json +1 -1
@@ -111,25 +111,25 @@ Public Member Functions</h2></td></tr>
111
111
  <tr class="separator:a3383b841bb79ee39cb108b9906fca6a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
112
112
  <tr class="memitem:a6a5d012fda005d45bf3196d1a7d2c6fa"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6a5d012fda005d45bf3196d1a7d2c6fa">getVFnsFromVtbls</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs, const <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &amp;vtbls, <a class="el" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &amp;virtualFunctions) override</td></tr>
113
113
  <tr class="separator:a6a5d012fda005d45bf3196d1a7d2c6fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
114
- <tr class="memitem:ab33f9af6ad22eb99dd0d9950fb0e50e6"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">isBase</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a>, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a1a175e87536301df98c805ac0636ad7c">b</a>, bool firstField)</td></tr>
114
+ <tr class="memitem:ab33f9af6ad22eb99dd0d9950fb0e50e6"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab33f9af6ad22eb99dd0d9950fb0e50e6">isBase</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a>, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a1a175e87536301df98c805ac0636ad7c">b</a>, bool firstField)</td></tr>
115
115
  <tr class="separator:ab33f9af6ad22eb99dd0d9950fb0e50e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
116
- <tr class="memitem:af0534356b4a8c68507e1237f1d7a8c11"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *f, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a1a175e87536301df98c805ac0636ad7c">b</a>)</td></tr>
116
+ <tr class="memitem:af0534356b4a8c68507e1237f1d7a8c11"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *f, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a1a175e87536301df98c805ac0636ad7c">b</a>)</td></tr>
117
117
  <tr class="memdesc:af0534356b4a8c68507e1237f1d7a8c11"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if f is a field of b (fields from getFieldTypes). <a href="#af0534356b4a8c68507e1237f1d7a8c11">More...</a><br /></td></tr>
118
118
  <tr class="separator:af0534356b4a8c68507e1237f1d7a8c11"><td class="memSeparator" colspan="2">&#160;</td></tr>
119
- <tr class="memitem:a079feacdcc3783f4a9108a3b2d2aed2c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t)</td></tr>
119
+ <tr class="memitem:a079feacdcc3783f4a9108a3b2d2aed2c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t)</td></tr>
120
120
  <tr class="separator:a079feacdcc3783f4a9108a3b2d2aed2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
121
- <tr class="memitem:acaff636e6a9cf59363d6ee00435c04ff"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base, unsigned idx)</td></tr>
121
+ <tr class="memitem:acaff636e6a9cf59363d6ee00435c04ff"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acaff636e6a9cf59363d6ee00435c04ff">getFieldType</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base, unsigned idx)</td></tr>
122
122
  <tr class="memdesc:acaff636e6a9cf59363d6ee00435c04ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the type of field number idx (flattened) in base. <a href="#acaff636e6a9cf59363d6ee00435c04ff">More...</a><br /></td></tr>
123
123
  <tr class="separator:acaff636e6a9cf59363d6ee00435c04ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
124
- <tr class="memitem:ae9a0007299178912e2568dc7158d6824"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base)</td></tr>
124
+ <tr class="memitem:ae9a0007299178912e2568dc7158d6824"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</td></tr>
125
125
  <tr class="memdesc:ae9a0007299178912e2568dc7158d6824"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a vector of the types of all fields in base. <a href="#ae9a0007299178912e2568dc7158d6824">More...</a><br /></td></tr>
126
126
  <tr class="separator:ae9a0007299178912e2568dc7158d6824"><td class="memSeparator" colspan="2">&#160;</td></tr>
127
- <tr class="memitem:a0788694fbff155949fc4f4d6487c223e"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base)</td></tr>
127
+ <tr class="memitem:a0788694fbff155949fc4f4d6487c223e"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</td></tr>
128
128
  <tr class="separator:a0788694fbff155949fc4f4d6487c223e"><td class="memSeparator" colspan="2">&#160;</td></tr>
129
- <tr class="memitem:a159e158c794fff115d5642b85963f43b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base)</td></tr>
129
+ <tr class="memitem:a159e158c794fff115d5642b85963f43b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a159e158c794fff115d5642b85963f43b">getAggs</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base)</td></tr>
130
130
  <tr class="memdesc:a159e158c794fff115d5642b85963f43b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns all the aggregates contained (transitively) in base. <a href="#a159e158c794fff115d5642b85963f43b">More...</a><br /></td></tr>
131
131
  <tr class="separator:a159e158c794fff115d5642b85963f43b"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
- <tr class="memitem:a2b2dbc52089696854a8339f2e83fc333"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *f, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a1a175e87536301df98c805ac0636ad7c">b</a>)</td></tr>
132
+ <tr class="memitem:a2b2dbc52089696854a8339f2e83fc333"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2b2dbc52089696854a8339f2e83fc333">isFirstField</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *f, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a1a175e87536301df98c805ac0636ad7c">b</a>)</td></tr>
133
133
  <tr class="separator:a2b2dbc52089696854a8339f2e83fc333"><td class="memSeparator" colspan="2">&#160;</td></tr>
134
134
  <tr class="inherit_header pub_methods_classSVF_1_1CommonCHGraph"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSVF_1_1CommonCHGraph')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></td></tr>
135
135
  <tr class="memitem:aeb7e79b36c74bcded008fe227952c335 inherit pub_methods_classSVF_1_1CommonCHGraph"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1CommonCHGraph.html#aeb7e79b36c74bcded008fe227952c335">~CommonCHGraph</a> ()</td></tr>
@@ -180,18 +180,18 @@ Public Member Functions</h2></td></tr>
180
180
  </table><table class="memberdecls">
181
181
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
182
182
  Static Public Member Functions</h2></td></tr>
183
- <tr class="memitem:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *)</td></tr>
183
+ <tr class="memitem:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *)</td></tr>
184
184
  <tr class="memdesc:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". <a href="#a175ed6ad0c9b23d5617f755ab96c76c4">More...</a><br /></td></tr>
185
185
  <tr class="separator:a175ed6ad0c9b23d5617f755ab96c76c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
186
- <tr class="memitem:a6c276e661e5e63c1c84387f84c8a62e4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *)</td></tr>
186
+ <tr class="memitem:a6c276e661e5e63c1c84387f84c8a62e4"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *)</td></tr>
187
187
  <tr class="memdesc:a6c276e661e5e63c1c84387f84c8a62e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the DIType beneath all qualifiers and arrays. <a href="#a6c276e661e5e63c1c84387f84c8a62e4">More...</a><br /></td></tr>
188
188
  <tr class="separator:a6c276e661e5e63c1c84387f84c8a62e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
189
- <tr class="memitem:acb76ab20da1bfbec00f63d08e48cbddd"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t1, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t2)</td></tr>
189
+ <tr class="memitem:acb76ab20da1bfbec00f63d08e48cbddd"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2)</td></tr>
190
190
  <tr class="separator:acb76ab20da1bfbec00f63d08e48cbddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
191
- <tr class="memitem:a2dc488345cc3a5f37079952f638d8c2b"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *)</td></tr>
191
+ <tr class="memitem:a2dc488345cc3a5f37079952f638d8c2b"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *)</td></tr>
192
192
  <tr class="memdesc:a2dc488345cc3a5f37079952f638d8c2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a human-readable version of the DIType. <a href="#a2dc488345cc3a5f37079952f638d8c2b">More...</a><br /></td></tr>
193
193
  <tr class="separator:a2dc488345cc3a5f37079952f638d8c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
194
- <tr class="memitem:a9d2be5aec5216cbc1d1709b41f79c44b"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t)</td></tr>
194
+ <tr class="memitem:a9d2be5aec5216cbc1d1709b41f79c44b"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t)</td></tr>
195
195
  <tr class="separator:a9d2be5aec5216cbc1d1709b41f79c44b"><td class="memSeparator" colspan="2">&#160;</td></tr>
196
196
  <tr class="memitem:af9970ff0ef4a8f4c638da9f519d14a21"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#af9970ff0ef4a8f4c638da9f519d14a21">classof</a> (const <a class="el" href="classSVF_1_1CommonCHGraph.html">CommonCHGraph</a> *chg)</td></tr>
197
197
  <tr class="separator:af9970ff0ef4a8f4c638da9f519d14a21"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -204,34 +204,34 @@ Protected Attributes</h2></td></tr>
204
204
  <tr class="memitem:aa6f49dfc9e3580d3f2d8c257395eb11e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> = <a class="el" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a></td></tr>
205
205
  <tr class="memdesc:aa6f49dfc9e3580d3f2d8c257395eb11e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether this CHG is an extended CHG (first-field). Set by buildCHG. <a href="#aa6f49dfc9e3580d3f2d8c257395eb11e">More...</a><br /></td></tr>
206
206
  <tr class="separator:aa6f49dfc9e3580d3f2d8c257395eb11e"><td class="memSeparator" colspan="2">&#160;</td></tr>
207
- <tr class="memitem:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f">diTypeToNodeMap</a></td></tr>
207
+ <tr class="memitem:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a581ce71cbc7994f71c9a6b9b145d3b9f">diTypeToNodeMap</a></td></tr>
208
208
  <tr class="memdesc:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps DITypes to their nodes. <a href="#a581ce71cbc7994f71c9a6b9b145d3b9f">More...</a><br /></td></tr>
209
209
  <tr class="separator:a581ce71cbc7994f71c9a6b9b145d3b9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
210
- <tr class="memitem:aaa63715e67ade7711a0366eb7559b708"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a></td></tr>
210
+ <tr class="memitem:aaa63715e67ade7711a0366eb7559b708"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a></td></tr>
211
211
  <tr class="memdesc:aaa63715e67ade7711a0366eb7559b708"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps VTables to the DIType associated with them. <a href="#aaa63715e67ade7711a0366eb7559b708">More...</a><br /></td></tr>
212
212
  <tr class="separator:aaa63715e67ade7711a0366eb7559b708"><td class="memSeparator" colspan="2">&#160;</td></tr>
213
- <tr class="memitem:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d">chaMap</a></td></tr>
213
+ <tr class="memitem:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ac0d5f1e10f642aac5b64792bf5fcbd9d">chaMap</a></td></tr>
214
214
  <tr class="memdesc:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps types to all children (i.e. CHA). <a href="#ac0d5f1e10f642aac5b64792bf5fcbd9d">More...</a><br /></td></tr>
215
215
  <tr class="separator:ac0d5f1e10f642aac5b64792bf5fcbd9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
216
- <tr class="memitem:abe8d313b501182ab62f2276a19d670a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4">chaFFMap</a></td></tr>
216
+ <tr class="memitem:abe8d313b501182ab62f2276a19d670a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#abe8d313b501182ab62f2276a19d670a4">chaFFMap</a></td></tr>
217
217
  <tr class="memdesc:abe8d313b501182ab62f2276a19d670a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps types to all children but also considering first field. <a href="#abe8d313b501182ab62f2276a19d670a4">More...</a><br /></td></tr>
218
218
  <tr class="separator:abe8d313b501182ab62f2276a19d670a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
219
- <tr class="memitem:a294e7a04aff9cef87c1008e91a620155"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a></td></tr>
219
+ <tr class="memitem:a294e7a04aff9cef87c1008e91a620155"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a></td></tr>
220
220
  <tr class="memdesc:a294e7a04aff9cef87c1008e91a620155"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps types to a set with their vtable and all their children's. <a href="#a294e7a04aff9cef87c1008e91a620155">More...</a><br /></td></tr>
221
221
  <tr class="separator:a294e7a04aff9cef87c1008e91a620155"><td class="memSeparator" colspan="2">&#160;</td></tr>
222
222
  <tr class="memitem:ad79a569e77f94fa8494eed3f18e07e90"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; <a class="el" href="classSVF_1_1CallSite.html">CallSite</a>, <a class="el" href="namespaceSVF.html#ad2b487757f1e1a1d81073120fc1d49c7">VFunSet</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ad79a569e77f94fa8494eed3f18e07e90">csCHAMap</a></td></tr>
223
223
  <tr class="memdesc:ad79a569e77f94fa8494eed3f18e07e90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps callsites to a set of potential virtual functions based on CHA. <a href="#ad79a569e77f94fa8494eed3f18e07e90">More...</a><br /></td></tr>
224
224
  <tr class="separator:ad79a569e77f94fa8494eed3f18e07e90"><td class="memSeparator" colspan="2">&#160;</td></tr>
225
- <tr class="memitem:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a></td></tr>
225
+ <tr class="memitem:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a></td></tr>
226
226
  <tr class="memdesc:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps types to their canonical type (many-to-one). <a href="#a498a18fe8702251b6f2a4e6379e5cbb1">More...</a><br /></td></tr>
227
227
  <tr class="separator:a498a18fe8702251b6f2a4e6379e5cbb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
228
- <tr class="memitem:a10225f56b21eb7f0870fdc433de3c393"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a></td></tr>
228
+ <tr class="memitem:a10225f56b21eb7f0870fdc433de3c393"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a></td></tr>
229
229
  <tr class="memdesc:a10225f56b21eb7f0870fdc433de3c393"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of all possible canonical types (i.e. values of canonicalTypeMap). <a href="#a10225f56b21eb7f0870fdc433de3c393">More...</a><br /></td></tr>
230
230
  <tr class="separator:a10225f56b21eb7f0870fdc433de3c393"><td class="memSeparator" colspan="2">&#160;</td></tr>
231
- <tr class="memitem:a574ec14099f1112b394b00a79f3fdf1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, std::vector&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a></td></tr>
231
+ <tr class="memitem:a574ec14099f1112b394b00a79f3fdf1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, std::vector&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a></td></tr>
232
232
  <tr class="memdesc:a574ec14099f1112b394b00a79f3fdf1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps types to their flattened fields' types. <a href="#a574ec14099f1112b394b00a79f3fdf1a">More...</a><br /></td></tr>
233
233
  <tr class="separator:a574ec14099f1112b394b00a79f3fdf1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
234
- <tr class="memitem:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a></td></tr>
234
+ <tr class="memitem:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a></td></tr>
235
235
  <tr class="memdesc:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps aggregate types to all the aggregate types it transitively contains. <a href="#adc7a17f70ac3fa89624ad874dbd16ff9">More...</a><br /></td></tr>
236
236
  <tr class="separator:adc7a17f70ac3fa89624ad874dbd16ff9"><td class="memSeparator" colspan="2">&#160;</td></tr>
237
237
  <tr class="inherit_header pro_attribs_classSVF_1_1CommonCHGraph"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classSVF_1_1CommonCHGraph')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classSVF_1_1CommonCHGraph.html">SVF::CommonCHGraph</a></td></tr>
@@ -244,49 +244,49 @@ Protected Attributes</h2></td></tr>
244
244
  </table><table class="memberdecls">
245
245
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
246
246
  Private Member Functions</h2></td></tr>
247
- <tr class="memitem:a86bf48776ccf53092f4cb742cf95f8eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *basicType)</td></tr>
247
+ <tr class="memitem:a86bf48776ccf53092f4cb742cf95f8eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a> (const <a class="el" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *basicType)</td></tr>
248
248
  <tr class="memdesc:a86bf48776ccf53092f4cb742cf95f8eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construction helper to process DIBasicTypes. <a href="#a86bf48776ccf53092f4cb742cf95f8eb">More...</a><br /></td></tr>
249
249
  <tr class="separator:a86bf48776ccf53092f4cb742cf95f8eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
250
- <tr class="memitem:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *compositeType)</td></tr>
250
+ <tr class="memitem:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a> (const <a class="el" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *compositeType)</td></tr>
251
251
  <tr class="memdesc:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construction helper to process DICompositeTypes. <a href="#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">More...</a><br /></td></tr>
252
252
  <tr class="separator:a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
253
- <tr class="memitem:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *derivedType)</td></tr>
253
+ <tr class="memitem:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a> (const <a class="el" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *derivedType)</td></tr>
254
254
  <tr class="memdesc:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construction helper to process DIDerivedTypes. <a href="#a1a4162e68b22d53e9dca73c6780ed3e5">More...</a><br /></td></tr>
255
255
  <tr class="separator:a1a4162e68b22d53e9dca73c6780ed3e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
256
- <tr class="memitem:a671f379ae54eef247b5e013478eb3f0c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *subroutineType)</td></tr>
256
+ <tr class="memitem:a671f379ae54eef247b5e013478eb3f0c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a> (const <a class="el" href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">DISubroutineType</a> *subroutineType)</td></tr>
257
257
  <tr class="memdesc:a671f379ae54eef247b5e013478eb3f0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construction helper to process DISubroutineTypes. <a href="#a671f379ae54eef247b5e013478eb3f0c">More...</a><br /></td></tr>
258
258
  <tr class="separator:a671f379ae54eef247b5e013478eb3f0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
259
259
  <tr class="memitem:a0c873ab28d5967991e636696fae8c67f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">buildVTables</a> (const <a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;module)</td></tr>
260
260
  <tr class="memdesc:a0c873ab28d5967991e636696fae8c67f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds all defined virtual functions and attaches them to nodes. <a href="#a0c873ab28d5967991e636696fae8c67f">More...</a><br /></td></tr>
261
261
  <tr class="separator:a0c873ab28d5967991e636696fae8c67f"><td class="memSeparator" colspan="2">&#160;</td></tr>
262
- <tr class="memitem:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, bool firstField)</td></tr>
262
+ <tr class="memitem:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, bool firstField)</td></tr>
263
263
  <tr class="memdesc:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a set of all children of type (CHA). Also gradually builds chaMap. <a href="#a0a3dfe1f2757eabd75082e2c4caec47a">More...</a><br /></td></tr>
264
264
  <tr class="separator:a0a3dfe1f2757eabd75082e2c4caec47a"><td class="memSeparator" colspan="2">&#160;</td></tr>
265
- <tr class="memitem:a6d97a772afe16c1483e65eea81f82603"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6d97a772afe16c1483e65eea81f82603">handleTypedef</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *typedefType)</td></tr>
265
+ <tr class="memitem:a6d97a772afe16c1483e65eea81f82603"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a6d97a772afe16c1483e65eea81f82603">handleTypedef</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *typedefType)</td></tr>
266
266
  <tr class="memdesc:a6d97a772afe16c1483e65eea81f82603"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attaches the typedef(s) to the base node. <a href="#a6d97a772afe16c1483e65eea81f82603">More...</a><br /></td></tr>
267
267
  <tr class="separator:a6d97a772afe16c1483e65eea81f82603"><td class="memSeparator" colspan="2">&#160;</td></tr>
268
- <tr class="memitem:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
268
+ <tr class="memitem:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a> (const <a class="el" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
269
269
  <tr class="memdesc:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Populates fieldTypes for type and all its elements. <a href="#ab96874bc8f6461fe0c3eb53b7f5cedce">More...</a><br /></td></tr>
270
270
  <tr class="separator:ab96874bc8f6461fe0c3eb53b7f5cedce"><td class="memSeparator" colspan="2">&#160;</td></tr>
271
- <tr class="memitem:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
271
+ <tr class="memitem:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a> (const <a class="el" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
272
272
  <tr class="memdesc:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Populates containingAggs for type and all its elements. <a href="#a8fcbea9435a77beb27ad64d5a3175b0b">More...</a><br /></td></tr>
273
273
  <tr class="separator:a8fcbea9435a77beb27ad64d5a3175b0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
274
- <tr class="memitem:a9ed6b91fad334605f514049a2072b538"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
274
+ <tr class="memitem:a9ed6b91fad334605f514049a2072b538"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
275
275
  <tr class="memdesc:a9ed6b91fad334605f514049a2072b538"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a node from type, or returns it if it exists. <a href="#a9ed6b91fad334605f514049a2072b538">More...</a><br /></td></tr>
276
276
  <tr class="separator:a9ed6b91fad334605f514049a2072b538"><td class="memSeparator" colspan="2">&#160;</td></tr>
277
- <tr class="memitem:a236d785d728189c2026357ce837fcdc6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs) const</td></tr>
277
+ <tr class="memitem:a236d785d728189c2026357ce837fcdc6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a> (<a class="el" href="classSVF_1_1CallSite.html">CallSite</a> cs) const</td></tr>
278
278
  <tr class="memdesc:a236d785d728189c2026357ce837fcdc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieves the metadata associated with a <em>virtual</em> callsite. <a href="#a236d785d728189c2026357ce837fcdc6">More...</a><br /></td></tr>
279
279
  <tr class="separator:a236d785d728189c2026357ce837fcdc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
280
- <tr class="memitem:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
280
+ <tr class="memitem:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
281
281
  <tr class="memdesc:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a node exists for type. <a href="#a58341e23c1dc2b3e7fce190ed16a8a25">More...</a><br /></td></tr>
282
282
  <tr class="separator:a58341e23c1dc2b3e7fce190ed16a8a25"><td class="memSeparator" colspan="2">&#160;</td></tr>
283
- <tr class="memitem:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
283
+ <tr class="memitem:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="el" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</td></tr>
284
284
  <tr class="memdesc:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the node for type (nullptr if it doesn't exist). <a href="#a96c68bbb5ee5e939158ce0b67da2c61d">More...</a><br /></td></tr>
285
285
  <tr class="separator:a96c68bbb5ee5e939158ce0b67da2c61d"><td class="memSeparator" colspan="2">&#160;</td></tr>
286
- <tr class="memitem:a294a2075c97e1db8003393fb472c1def"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t1, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t2, <a class="el" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et)</td></tr>
286
+ <tr class="memitem:a294a2075c97e1db8003393fb472c1def"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2, <a class="el" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et)</td></tr>
287
287
  <tr class="memdesc:a294a2075c97e1db8003393fb472c1def"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an edge between from t1 to t2. <a href="#a294a2075c97e1db8003393fb472c1def">More...</a><br /></td></tr>
288
288
  <tr class="separator:a294a2075c97e1db8003393fb472c1def"><td class="memSeparator" colspan="2">&#160;</td></tr>
289
- <tr class="memitem:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a74b2e5787f65cf3e3b4a03ebec806b91">hasEdge</a> (const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t1, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *t2, <a class="el" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et)</td></tr>
289
+ <tr class="memitem:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1DCHGraph.html#a74b2e5787f65cf3e3b4a03ebec806b91">hasEdge</a> (const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t1, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t2, <a class="el" href="classSVF_1_1GenericEdge.html#a5aceeb48929f54264807b36569019a8a">DCHEdge::GEdgeKind</a> et)</td></tr>
290
290
  <tr class="memdesc:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the edge between t1 and t2 if it exists, returns nullptr otherwise. <a href="#a74b2e5787f65cf3e3b4a03ebec806b91">More...</a><br /></td></tr>
291
291
  <tr class="separator:a74b2e5787f65cf3e3b4a03ebec806b91"><td class="memSeparator" colspan="2">&#160;</td></tr>
292
292
  </table><table class="memberdecls">
@@ -401,13 +401,13 @@ Additional Inherited Members</h2></td></tr>
401
401
  <tr>
402
402
  <td class="memname"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * DCHGraph::addEdge </td>
403
403
  <td>(</td>
404
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
404
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
405
405
  <td class="paramname"><em>t1</em>, </td>
406
406
  </tr>
407
407
  <tr>
408
408
  <td class="paramkey"></td>
409
409
  <td></td>
410
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
410
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
411
411
  <td class="paramname"><em>t2</em>, </td>
412
412
  </tr>
413
413
  <tr>
@@ -467,30 +467,30 @@ Additional Inherited Members</h2></td></tr>
467
467
  <p>Builds the CHG from DWARF debug information. extend determines whether to extend the CHG with first field edges. </p>
468
468
 
469
469
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00457">457</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
470
- <div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> = extend;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a> finder;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; finder.processModule(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getModule(i)));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// Create the void node regardless of whether it appears.</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// Find any char type.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *charType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment"> * We want void at the top, char as a child, and everything is a child of char:</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="comment"> * void</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="comment"> * |</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="comment"> * char</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment"> * / | \</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment"> * x y z</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> : finder.types())</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *basicType = SVFUtil::dyn_cast&lt;DIBasicType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (basicType-&gt;getEncoding() == dwarf::DW_ATE_unsigned_char</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; || basicType-&gt;getEncoding() == dwarf::DW_ATE_signed_char)</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; charType = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a>(basicType);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *compositeType = SVFUtil::dyn_cast&lt;DICompositeType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a>(compositeType);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *derivedType = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a>(derivedType);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *subroutineType = SVFUtil::dyn_cast&lt;DISubroutineType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a>(subroutineType);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHGraph::buildCHG: unexpected DIType.&quot;</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">buildVTables</a>(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getModule(i)));</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// Build the void/char/everything else relation.</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> &amp;&amp; charType != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// void &lt;-- char</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(charType, <span class="keyword">nullptr</span>, <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// char &lt;-- x, char &lt;-- y, ...</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> nodeI = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nodeI != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nodeI)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// Everything without a parent gets char as a parent.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">if</span> (nodeI-&gt;second-&gt;getType() != <span class="keyword">nullptr</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; &amp;&amp; nodeI-&gt;second-&gt;getOutEdges().size() == 0)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(nodeI-&gt;second-&gt;getType(), charType, <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">Options::PrintDCHG</a>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">print</a>();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a0c873ab28d5967991e636696fae8c67f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">SVF::DCHGraph::buildVTables</a></div><div class="ttdeci">void buildVTables(const Module &amp;module)</div><div class="ttdoc">Finds all defined virtual functions and attaches them to nodes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00166">DCHG.cpp:166</a></div></div>
470
+ <div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> = extend;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespaceSVF.html#a5ae98f122c64b0114df2e5861b341321">DebugInfoFinder</a> finder;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; finder.processModule(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getModule(i)));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// Create the void node regardless of whether it appears.</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// Find any char type.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *charType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment"> * We want void at the top, char as a child, and everything is a child of char:</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="comment"> * void</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="comment"> * |</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="comment"> * char</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment"> * / | \</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment"> * x y z</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> : finder.types())</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *basicType = SVFUtil::dyn_cast&lt;DIBasicType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (basicType-&gt;getEncoding() == dwarf::DW_ATE_unsigned_char</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; || basicType-&gt;getEncoding() == dwarf::DW_ATE_signed_char)</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; charType = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">handleDIBasicType</a>(basicType);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *compositeType = SVFUtil::dyn_cast&lt;DICompositeType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">handleDICompositeType</a>(compositeType);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *derivedType = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">handleDIDerivedType</a>(derivedType);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">DISubroutineType</a> *subroutineType = SVFUtil::dyn_cast&lt;DISubroutineType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">handleDISubroutineType</a>(subroutineType);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHGraph::buildCHG: unexpected DIType.&quot;</span>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">buildVTables</a>(*(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getModule(i)));</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// Build the void/char/everything else relation.</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a> &amp;&amp; charType != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// void &lt;-- char</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(charType, <span class="keyword">nullptr</span>, <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// char &lt;-- x, char &lt;-- y, ...</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> nodeI = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nodeI != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nodeI)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// Everything without a parent gets char as a parent.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">if</span> (nodeI-&gt;second-&gt;getType() != <span class="keyword">nullptr</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; &amp;&amp; nodeI-&gt;second-&gt;getOutEdges().size() == 0)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(nodeI-&gt;second-&gt;getType(), charType, <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">Options::PrintDCHG</a>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">print</a>();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a0c873ab28d5967991e636696fae8c67f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0c873ab28d5967991e636696fae8c67f">SVF::DCHGraph::buildVTables</a></div><div class="ttdeci">void buildVTables(const Module &amp;module)</div><div class="ttdoc">Finds all defined virtual functions and attaches them to nodes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00166">DCHG.cpp:166</a></div></div>
471
471
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
472
472
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
473
473
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">SVF::DCHEdge::STD_DEF</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00038">DCHG.h:38</a></div></div>
474
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
474
475
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a671f379ae54eef247b5e013478eb3f0c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a671f379ae54eef247b5e013478eb3f0c">SVF::DCHGraph::handleDISubroutineType</a></div><div class="ttdeci">void handleDISubroutineType(const DISubroutineType *subroutineType)</div><div class="ttdoc">Construction helper to process DISubroutineTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00133">DCHG.cpp:133</a></div></div>
475
476
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
476
477
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
477
478
  <div class="ttc" id="classSVF_1_1Options_html_adf6c289ef9f2d0196984dd4024ea4316"><div class="ttname"><a href="classSVF_1_1Options.html#adf6c289ef9f2d0196984dd4024ea4316">SVF::Options::PrintDCHG</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; PrintDCHG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00208">Options.h:208</a></div></div>
478
479
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
479
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a36ec1ba901eeebe7a242f18510831788"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a36ec1ba901eeebe7a242f18510831788">DebugInfoFinder</a></div><div class="ttdeci">llvm::DebugInfoFinder DebugInfoFinder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
480
480
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294a2075c97e1db8003393fb472c1def"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">SVF::DCHGraph::addEdge</a></div><div class="ttdeci">DCHEdge * addEdge(const DIType *t1, const DIType *t2, DCHEdge::GEdgeKind et)</div><div class="ttdoc">Creates an edge between from t1 to t2. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00421">DCHG.cpp:421</a></div></div>
481
+ <div class="ttc" id="namespaceSVF_html_a090e0791e8c200104ed3ab6bab157129"><div class="ttname"><a href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">SVF::DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00105">BasicTypes.h:105</a></div></div>
481
482
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
482
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
483
483
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a1a4162e68b22d53e9dca73c6780ed3e5"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a1a4162e68b22d53e9dca73c6780ed3e5">SVF::DCHGraph::handleDIDerivedType</a></div><div class="ttdeci">void handleDIDerivedType(const DIDerivedType *derivedType)</div><div class="ttdoc">Construction helper to process DIDerivedTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00097">DCHG.cpp:97</a></div></div>
484
484
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
485
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
485
486
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a5f08ed4cbba3e4b7a348d5ad77664726"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a5f08ed4cbba3e4b7a348d5ad77664726">SVF::DCHGraph::print</a></div><div class="ttdeci">void print(void)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l01131">DCHG.cpp:1131</a></div></div>
486
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
487
+ <div class="ttc" id="namespaceSVF_html_a5ae98f122c64b0114df2e5861b341321"><div class="ttname"><a href="namespaceSVF.html#a5ae98f122c64b0114df2e5861b341321">SVF::DebugInfoFinder</a></div><div class="ttdeci">llvm::DebugInfoFinder DebugInfoFinder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
487
488
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a86bf48776ccf53092f4cb742cf95f8eb"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a86bf48776ccf53092f4cb742cf95f8eb">SVF::DCHGraph::handleDIBasicType</a></div><div class="ttdeci">void handleDIBasicType(const DIBasicType *basicType)</div><div class="ttdoc">Construction helper to process DIBasicTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00022">DCHG.cpp:22</a></div></div>
488
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aad46bd16008ebbc81e632f4fc69b3ea9"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
489
489
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00070">LLVMModule.h:70</a></div></div>
490
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
491
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
490
+ <div class="ttc" id="namespaceSVF_html_ada0513be7e25325325ccc9183aeca278"><div class="ttname"><a href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">SVF::DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
492
491
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a3ce75cbe92a1fa7d34c6fca2d2ca1b0f"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a3ce75cbe92a1fa7d34c6fca2d2ca1b0f">SVF::DCHGraph::handleDICompositeType</a></div><div class="ttdeci">void handleDICompositeType(const DICompositeType *compositeType)</div><div class="ttdoc">Construction helper to process DICompositeTypes. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00027">DCHG.cpp:27</a></div></div>
493
492
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aa6f49dfc9e3580d3f2d8c257395eb11e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">SVF::DCHGraph::extended</a></div><div class="ttdeci">bool extended</div><div class="ttdoc">Whether this CHG is an extended CHG (first-field). Set by buildCHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00356">DCHG.h:356</a></div></div>
493
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
494
494
  </div><!-- fragment -->
495
495
  </div>
496
496
  </div>
@@ -521,22 +521,22 @@ Additional Inherited Members</h2></td></tr>
521
521
  <p>Finds all defined virtual functions and attaches them to nodes. </p>
522
522
 
523
523
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00166">166</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
524
- <div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">for</span> (Module::const_global_iterator gvI = module.global_begin(); gvI != module.global_end(); ++gvI)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// Though this will return more than GlobalVariables, we only care about GlobalVariables (for the vtbls).</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gv = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&gt;(&amp;(*gvI));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (gv == <span class="keyword">nullptr</span>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (gv-&gt;hasMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>) &amp;&amp; gv-&gt;getNumOperands() &gt; 0)</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; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>&gt;(gv-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; assert(type &amp;&amp; <span class="stringliteral">&quot;DCHG::buildVTables: bad metadata for ctir.vt&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(type);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(gv);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[gv] = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</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; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a> *vtbls = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a>&gt;(gv-&gt;getOperand(0));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; assert(vtbls &amp;&amp; <span class="stringliteral">&quot;unexpected vtable type&quot;</span>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> nthVtbl = 0; nthVtbl &lt; vtbls-&gt;getNumOperands(); ++nthVtbl)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">ConstantArray</a>&gt;(vtbls-&gt;getOperand(nthVtbl));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; assert(vtbl &amp;&amp; <span class="stringliteral">&quot;Element of vtbl struct not an array&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; std::vector&lt;const Function *&gt; &amp;vfns = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(nthVtbl);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// Iterating over the vtbl, we will run into:</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// 1. i8* null (don&#39;t care for now).</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// 2. i8* inttoptr ... (don&#39;t care for now).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// 3. i8* bitcast ... (we only care when a function pointer is being bitcasted).</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> cN = 0; cN &lt; vtbl-&gt;getNumOperands(); ++cN)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#aaca93e4092f0f73619d730f18b9e65de">Constant</a> *c = vtbl-&gt;getOperand(cN);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(c))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Don&#39;t care for now.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a>&gt;(c);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; assert(ce &amp;&amp; <span class="stringliteral">&quot;non-ConstantExpr, non-ConstantPointerNull in vtable?&quot;</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (ce-&gt;getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// Could be a GlobalAlias which we don&#39;t care about, or a virtual/thunk function.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *vfn = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(ce-&gt;getOperand(0));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (vfn != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; vfns.push_back(vfn);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
525
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39fea8c436d96d2b5a74f5e02cc5d952"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39fea8c436d96d2b5a74f5e02cc5d952">ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00049">BasicTypes.h:49</a></div></div>
524
+ <div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">for</span> (Module::const_global_iterator gvI = module.global_begin(); gvI != module.global_end(); ++gvI)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// Though this will return more than GlobalVariables, we only care about GlobalVariables (for the vtbls).</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gv = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&gt;(&amp;(*gvI));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (gv == <span class="keyword">nullptr</span>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (gv-&gt;hasMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>) &amp;&amp; gv-&gt;getNumOperands() &gt; 0)</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; <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>&gt;(gv-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">cppUtil::ctir::vtMDName</a>));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; assert(type &amp;&amp; <span class="stringliteral">&quot;DCHG::buildVTables: bad metadata for ctir.vt&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(type);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">setVTable</a>(gv);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[gv] = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtbls = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>&gt;(gv-&gt;getOperand(0));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; assert(vtbls &amp;&amp; <span class="stringliteral">&quot;unexpected vtable type&quot;</span>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> nthVtbl = 0; nthVtbl &lt; vtbls-&gt;getNumOperands(); ++nthVtbl)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>&gt;(vtbls-&gt;getOperand(nthVtbl));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; assert(vtbl &amp;&amp; <span class="stringliteral">&quot;Element of vtbl struct not an array&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; std::vector&lt;const Function *&gt; &amp;vfns = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">getVfnVector</a>(nthVtbl);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// Iterating over the vtbl, we will run into:</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// 1. i8* null (don&#39;t care for now).</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// 2. i8* inttoptr ... (don&#39;t care for now).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// 3. i8* bitcast ... (we only care when a function pointer is being bitcasted).</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> cN = 0; cN &lt; vtbl-&gt;getNumOperands(); ++cN)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *c = vtbl-&gt;getOperand(cN);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantPointerNull&gt;(c))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Don&#39;t care for now.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>&gt;(c);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; assert(ce &amp;&amp; <span class="stringliteral">&quot;non-ConstantExpr, non-ConstantPointerNull in vtable?&quot;</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (ce-&gt;getOpcode() == Instruction::BitCast)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// Could be a GlobalAlias which we don&#39;t care about, or a virtual/thunk function.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *vfn = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(ce-&gt;getOperand(0));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (vfn != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; vfns.push_back(vfn);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00063">BasicTypes.h:63</a></div></div>
525
+ <div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
526
526
  <div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
527
527
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aaa63715e67ade7711a0366eb7559b708"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">SVF::DCHGraph::vtblToTypeMap</a></div><div class="ttdeci">Map&lt; const GlobalValue *, const DIType * &gt; vtblToTypeMap</div><div class="ttdoc">Maps VTables to the DIType associated with them. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00360">DCHG.h:360</a></div></div>
528
528
  <div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_aa4630844aa25aa4801659304a2552058"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#aa4630844aa25aa4801659304a2552058">SVF::cppUtil::ctir::vtMDName</a></div><div class="ttdeci">const std::string vtMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00116">CPPUtil.h:116</a></div></div>
529
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a60115de303225d173fb935cf7619a2cb"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00057">BasicTypes.h:57</a></div></div>
530
529
  <div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
531
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
532
530
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
533
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a9707880a0f9b41d3375e2feb7bc5ebc5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a9707880a0f9b41d3375e2feb7bc5ebc5">ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00060">BasicTypes.h:60</a></div></div>
534
531
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
532
+ <div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00064">BasicTypes.h:64</a></div></div>
535
533
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
536
534
  <div class="ttc" id="classSVF_1_1DCHNode_html_ab8a339276172b8aa0fc915e5bde0b3db"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ab8a339276172b8aa0fc915e5bde0b3db">SVF::DCHNode::setVTable</a></div><div class="ttdeci">void setVTable(const GlobalValue *vtbl)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00164">DCHG.h:164</a></div></div>
537
535
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
536
+ <div class="ttc" id="namespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00052">BasicTypes.h:52</a></div></div>
537
+ <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00060">BasicTypes.h:60</a></div></div>
538
538
  <div class="ttc" id="classSVF_1_1DCHNode_html_a11ad6b4fc518f6307727f6b76f7f6f53"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a11ad6b4fc518f6307727f6b76f7f6f53">SVF::DCHNode::getVfnVector</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; &amp; getVfnVector(unsigned n)</div><div class="ttdoc">Return the nth virtual function vector in the vtable. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00181">DCHG.h:181</a></div></div>
539
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aaca93e4092f0f73619d730f18b9e65de"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aaca93e4092f0f73619d730f18b9e65de">Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00061">BasicTypes.h:61</a></div></div>
539
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
540
540
  </div><!-- fragment -->
541
541
  </div>
542
542
  </div>
@@ -552,7 +552,7 @@ Additional Inherited Members</h2></td></tr>
552
552
  <tr>
553
553
  <td class="memname">const <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> &amp; DCHGraph::cha </td>
554
554
  <td>(</td>
555
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
555
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
556
556
  <td class="paramname"><em>type</em>, </td>
557
557
  </tr>
558
558
  <tr>
@@ -684,13 +684,13 @@ Additional Inherited Members</h2></td></tr>
684
684
  <p>Implements <a class="el" href="classSVF_1_1CommonCHGraph.html#aff7363feebc20267dad7230666b583b1">SVF::CommonCHGraph</a>.</p>
685
685
 
686
686
  <p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00259">259</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
687
- <div class="fragment"><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; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type))</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type)-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>() != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="ttc" id="classSVF_1_1DCHNode_html_a1a75ca91148992166d42d245d6c51988"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">SVF::DCHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00169">DCHG.h:169</a></div></div>
688
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
687
+ <div class="fragment"><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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type))</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type)-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>() != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="ttc" id="classSVF_1_1DCHNode_html_a1a75ca91148992166d42d245d6c51988"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">SVF::DCHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00169">DCHG.h:169</a></div></div>
689
688
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
690
689
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a236d785d728189c2026357ce837fcdc6"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">SVF::DCHGraph::getCSStaticType</a></div><div class="ttdeci">const DIType * getCSStaticType(CallSite cs) const</div><div class="ttdoc">Retrieves the metadata associated with a virtual callsite. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00407">DCHG.h:407</a></div></div>
691
690
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a96c68bbb5ee5e939158ce0b67da2c61d"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">SVF::DCHGraph::getNode</a></div><div class="ttdeci">DCHNode * getNode(const DIType *type)</div><div class="ttdoc">Returns the node for type (nullptr if it doesn&amp;#39;t exist). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00424">DCHG.h:424</a></div></div>
692
691
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a58341e23c1dc2b3e7fce190ed16a8a25"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">SVF::DCHGraph::hasNode</a></div><div class="ttdeci">bool hasNode(const DIType *type)</div><div class="ttdoc">Checks if a node exists for type. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00417">DCHG.h:417</a></div></div>
693
692
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
693
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
694
694
  </div><!-- fragment -->
695
695
  </div>
696
696
  </div>
@@ -706,7 +706,7 @@ Additional Inherited Members</h2></td></tr>
706
706
  <tr>
707
707
  <td class="memname"><a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> DCHGraph::diTypeToStr </td>
708
708
  <td>(</td>
709
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
709
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
710
710
  <td class="paramname"><em>t</em></td><td>)</td>
711
711
  <td></td>
712
712
  </tr>
@@ -721,18 +721,18 @@ Additional Inherited Members</h2></td></tr>
721
721
  <p>Returns a human-readable version of the DIType. </p>
722
722
 
723
723
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00958">958</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
724
- <div class="fragment"><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;{</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;void&quot;</span>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *bt = SVFUtil::dyn_cast&lt;DIBasicType&gt;(t))</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; ss &lt;&lt; bt-&gt;getName().str();</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (dt-&gt;getName() == <span class="stringliteral">&quot;__vtbl_ptr_type&quot;</span>)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;(vtbl * =) __vtbl_ptr_type&quot;</span>;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_const_type)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;const &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_volatile_type)</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; {</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;volatile &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; }</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_restrict_type)</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;restrict &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_atomic_type)</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;atomic &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; *&quot;</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_ptr_to_member_type)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType())</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(SVFUtil::dyn_cast&lt;DIType&gt;(dt-&gt;getExtraData())) &lt;&lt; <span class="stringliteral">&quot;::*&quot;</span>;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_reference_type)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; &amp;&quot;</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; &amp;&amp;&quot;</span>;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; ss &lt;&lt; dt-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;-&gt;&quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct = SVFUtil::dyn_cast&lt;DICompositeType&gt;(t))</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; {</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; || ct-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; || ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;class&quot;</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;struct&quot;</span>;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;union&quot;</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;.&quot;</span>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getName() != <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; ss &lt;&lt; ct-&gt;getName().str();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// Iterate over the element types.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = ct-&gt;getElements();</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fields.size(); ++i)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="comment">// fields[i] gives a type which is DW_TAG_member, we want the member&#39;s type (getBaseType).</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="comment">// It can also give a Subprogram type if the class just had non-virtual functions.</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">DISubprogram</a> *sp = SVFUtil::dyn_cast&lt;DISubprogram&gt;(fields[i]))</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; {</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; ss &lt;&lt; sp-&gt;getName().str();</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *mt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fields[i]))</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; assert(mt-&gt;getTag() == dwarf::DW_TAG_member &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member&quot;</span>);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(mt-&gt;getBaseType());</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">if</span> (i != fields.size() - 1)</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct-&gt;getBaseType());</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> sizes = ct-&gt;getElements();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; sizes.size(); ++i)</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a> *sr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a>&gt;(sizes[0]);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; assert(sr != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: non-subrange as array element?&quot;</span>);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; int64_t <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> = -1;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *ci = sr-&gt;getCount().dyn_cast&lt;<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *&gt;())</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; count = ci-&gt;getSExtValue();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; count &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; {</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;enum &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct-&gt;getBaseType());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *st = SVFUtil::dyn_cast&lt;DISubroutineType&gt;(t))</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a> types = st-&gt;getTypeArray();</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="comment">// Must have one element at least (the first type).</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[0]) &lt;&lt; <span class="stringliteral">&quot; fn(&quot;</span>;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">if</span> (types.size() == 1)</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;void)&quot;</span>;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; {</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i &lt; types.size(); ++i)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[i]);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span> (i + 1 != types.size())</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="comment">// There&#39;s another type.</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; ss &lt;&lt; st-&gt;getName().str();</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; }</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
724
+ <div class="fragment"><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;{</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;void&quot;</span>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *bt = SVFUtil::dyn_cast&lt;DIBasicType&gt;(t))</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; ss &lt;&lt; bt-&gt;getName().str();</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (dt-&gt;getName() == <span class="stringliteral">&quot;__vtbl_ptr_type&quot;</span>)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;(vtbl * =) __vtbl_ptr_type&quot;</span>;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_const_type)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;const &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_volatile_type)</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; {</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;volatile &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; }</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_restrict_type)</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;restrict &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_atomic_type)</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;atomic &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; *&quot;</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_ptr_to_member_type)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType())</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(SVFUtil::dyn_cast&lt;DIType&gt;(dt-&gt;getExtraData())) &lt;&lt; <span class="stringliteral">&quot;::*&quot;</span>;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_reference_type)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; &amp;&quot;</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType()) &lt;&lt; <span class="stringliteral">&quot; &amp;&amp;&quot;</span>;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dt-&gt;getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; ss &lt;&lt; dt-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;-&gt;&quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(dt-&gt;getBaseType());</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct = SVFUtil::dyn_cast&lt;DICompositeType&gt;(t))</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; {</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; || ct-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; || ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;class&quot;</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;struct&quot;</span>;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;union&quot;</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;.&quot;</span>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span> (ct-&gt;getName() != <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; ss &lt;&lt; ct-&gt;getName().str();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// Iterate over the element types.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">DINodeArray</a> fields = ct-&gt;getElements();</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fields.size(); ++i)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="comment">// fields[i] gives a type which is DW_TAG_member, we want the member&#39;s type (getBaseType).</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="comment">// It can also give a Subprogram type if the class just had non-virtual functions.</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">DISubprogram</a> *sp = SVFUtil::dyn_cast&lt;DISubprogram&gt;(fields[i]))</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; {</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; ss &lt;&lt; sp-&gt;getName().str();</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fields[i]))</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; assert(mt-&gt;getTag() == dwarf::DW_TAG_member &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member&quot;</span>);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(mt-&gt;getBaseType());</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">if</span> (i != fields.size() - 1)</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct-&gt;getBaseType());</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <a class="code" href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">DINodeArray</a> sizes = ct-&gt;getElements();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; sizes.size(); ++i)</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <a class="code" href="namespaceSVF.html#a99bc1228f07429855c81a720be862dc6">DISubrange</a> *sr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a99bc1228f07429855c81a720be862dc6">DISubrange</a>&gt;(sizes[0]);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; assert(sr != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: non-subrange as array element?&quot;</span>);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; int64_t <a class="code" href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a> = -1;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *ci = sr-&gt;getCount().dyn_cast&lt;<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *&gt;())</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; count = ci-&gt;getSExtValue();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; count &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; {</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;enum &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(ct-&gt;getBaseType());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ct-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">DISubroutineType</a> *st = SVFUtil::dyn_cast&lt;DISubroutineType&gt;(t))</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="namespaceSVF.html#a9d3ee421789884473bfacfaa9ec007cc">DITypeRefArray</a> types = st-&gt;getTypeArray();</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="comment">// Must have one element at least (the first type).</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[0]) &lt;&lt; <span class="stringliteral">&quot; fn(&quot;</span>;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">if</span> (types.size() == 1)</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;void)&quot;</span>;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; {</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i &lt; types.size(); ++i)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; ss &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(types[i]);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span> (i + 1 != types.size())</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="comment">// There&#39;s another type.</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; ss &lt;&lt; st-&gt;getName().str();</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; }</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
725
+ <div class="ttc" id="namespaceSVF_html_a9d3ee421789884473bfacfaa9ec007cc"><div class="ttname"><a href="namespaceSVF.html#a9d3ee421789884473bfacfaa9ec007cc">SVF::DITypeRefArray</a></div><div class="ttdeci">llvm::DITypeRefArray DITypeRefArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00110">BasicTypes.h:110</a></div></div>
726
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
725
727
  <div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
726
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
727
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
728
+ <div class="ttc" id="namespaceSVF_html_a090e0791e8c200104ed3ab6bab157129"><div class="ttname"><a href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">SVF::DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00105">BasicTypes.h:105</a></div></div>
729
+ <div class="ttc" id="namespaceSVF_html_a0f825e73d115173b05ca54fb8ec65003"><div class="ttname"><a href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">SVF::DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
730
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
728
731
  <div class="ttc" id="namespaceSVF_html_a89c7208bfc0b57873dfa574f52050295"><div class="ttname"><a href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">SVF::DISubprogram</a></div><div class="ttdeci">llvm::DISubprogram DISubprogram</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00124">BasicTypes.h:124</a></div></div>
729
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_ab0e8955a3dbfb0a836bfe64466411e4e"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#ab0e8955a3dbfb0a836bfe64466411e4e">DISubrange</a></div><div class="ttdeci">llvm::DISubrange DISubrange</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
730
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_aad46bd16008ebbc81e632f4fc69b3ea9"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a></div><div class="ttdeci">llvm::DISubroutineType DISubroutineType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
731
732
  <div class="ttc" id="cJSON_8h_html_ad43c3812e6d13e0518d9f8b8f463ffcf"><div class="ttname"><a href="cJSON_8h.html#ad43c3812e6d13e0518d9f8b8f463ffcf">count</a></div><div class="ttdeci">int count</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00216">cJSON.h:216</a></div></div>
732
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
733
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_abfc3b60432a782f5eb5ea73f20d34333"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#abfc3b60432a782f5eb5ea73f20d34333">DITypeRefArray</a></div><div class="ttdeci">llvm::DITypeRefArray DITypeRefArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00107">BasicTypes.h:107</a></div></div>
733
+ <div class="ttc" id="namespaceSVF_html_ada0513be7e25325325ccc9183aeca278"><div class="ttname"><a href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">SVF::DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
734
+ <div class="ttc" id="namespaceSVF_html_a99bc1228f07429855c81a720be862dc6"><div class="ttname"><a href="namespaceSVF.html#a99bc1228f07429855c81a720be862dc6">SVF::DISubrange</a></div><div class="ttdeci">llvm::DISubrange DISubrange</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00107">BasicTypes.h:107</a></div></div>
734
735
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
735
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
736
736
  </div><!-- fragment -->
737
737
  </div>
738
738
  </div>
@@ -778,7 +778,7 @@ Additional Inherited Members</h2></td></tr>
778
778
  <tr>
779
779
  <td class="memname">void DCHGraph::flatten </td>
780
780
  <td>(</td>
781
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *&#160;</td>
781
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *&#160;</td>
782
782
  <td class="paramname"><em>type</em></td><td>)</td>
783
783
  <td></td>
784
784
  </tr>
@@ -793,17 +793,17 @@ Additional Inherited Members</h2></td></tr>
793
793
  <p>Populates fieldTypes for type and all its elements. </p>
794
794
 
795
795
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00265">265</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
796
- <div class="fragment"><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;DCHG::flatten: canon type of struct/class is not struct/class&quot;</span>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end())</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"> 271</span>&#160; <span class="comment">// Already done (necessary because of the recursion).</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</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"> 275</span>&#160; <span class="comment">// Create empty vector.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>];</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> != <span class="keyword">nullptr</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; &amp;&amp; (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; &amp;&amp; <span class="stringliteral">&quot;DCHG::flatten: expected a class/struct&quot;</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// Sort the fields from getElements. Especially a problem for classes; it&#39;s all jumbled up.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; std::vector&lt;const DIDerivedType *&gt; fields;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fieldsDINA = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getElements();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fieldsDINA.size(); ++i)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fieldsDINA[i]))</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"> 290</span>&#160; <span class="comment">// Don&#39;t care about subprograms, only member/inheritance.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; fields.push_back(dt);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// TODO: virtual inheritance is not handled at all!</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; std::sort(fields.begin(), fields.end(),</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; [](<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *&amp;<a class="code" href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a>, <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *&amp;<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>) -&gt; <span class="keywordtype">bool</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; { <span class="keywordflow">return</span> a-&gt;getOffsetInBits() &lt; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getOffsetInBits(); });</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *mt : fields)</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; assert((mt-&gt;getTag() == dwarf::DW_TAG_member || mt-&gt;getTag() == dwarf::DW_TAG_inheritance)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member/inheritance&quot;</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Either we have a class, struct, array, or something not in need of flattening.</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *fieldType = mt-&gt;getBaseType();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (fieldType-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; || fieldType-&gt;getTag() == dwarf::DW_TAG_class_type)</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; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(SVFUtil::dyn_cast&lt;DICompositeType&gt;(fieldType));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[fieldType])</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// ft is already a canonical type because the &quot;root&quot; additions insert</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// canonical types.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(ft);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldType-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *arrayType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(fieldType);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbt = SVFUtil::dyn_cast&lt;DICompositeType&gt;(baseType))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(cbt);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[cbt])</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">// ft is already a canonical type like above.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(ft);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</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="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">else</span></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; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fieldType));</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
796
+ <div class="fragment"><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;DCHG::flatten: canon type of struct/class is not struct/class&quot;</span>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end())</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"> 271</span>&#160; <span class="comment">// Already done (necessary because of the recursion).</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</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"> 275</span>&#160; <span class="comment">// Create empty vector.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>];</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> != <span class="keyword">nullptr</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; &amp;&amp; (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; &amp;&amp; <span class="stringliteral">&quot;DCHG::flatten: expected a class/struct&quot;</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// Sort the fields from getElements. Especially a problem for classes; it&#39;s all jumbled up.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; std::vector&lt;const DIDerivedType *&gt; fields;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">DINodeArray</a> fieldsDINA = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getElements();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fieldsDINA.size(); ++i)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fieldsDINA[i]))</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"> 290</span>&#160; <span class="comment">// Don&#39;t care about subprograms, only member/inheritance.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; fields.push_back(dt);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// TODO: virtual inheritance is not handled at all!</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; std::sort(fields.begin(), fields.end(),</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&amp;<a class="code" href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a>, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&amp;<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>) -&gt; <span class="keywordtype">bool</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; { <span class="keywordflow">return</span> a-&gt;getOffsetInBits() &lt; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getOffsetInBits(); });</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt : fields)</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; assert((mt-&gt;getTag() == dwarf::DW_TAG_member || mt-&gt;getTag() == dwarf::DW_TAG_inheritance)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member/inheritance&quot;</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// Either we have a class, struct, array, or something not in need of flattening.</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *fieldType = mt-&gt;getBaseType();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (fieldType-&gt;getTag() == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; || fieldType-&gt;getTag() == dwarf::DW_TAG_class_type)</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; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(SVFUtil::dyn_cast&lt;DICompositeType&gt;(fieldType));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[fieldType])</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// ft is already a canonical type because the &quot;root&quot; additions insert</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// canonical types.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(ft);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fieldType-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *arrayType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(fieldType);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbt = SVFUtil::dyn_cast&lt;DICompositeType&gt;(baseType))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(cbt);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft : <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[cbt])</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">// ft is already a canonical type like above.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(ft);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</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="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">else</span></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; <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>].push_back(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fieldType));</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
797
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
797
798
  <div class="ttc" id="cJSON_8h_html_a1a175e87536301df98c805ac0636ad7c"><div class="ttname"><a href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a></div><div class="ttdeci">const cJSON *const b</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00255">cJSON.h:255</a></div></div>
798
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
799
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
800
799
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
800
+ <div class="ttc" id="namespaceSVF_html_a0f825e73d115173b05ca54fb8ec65003"><div class="ttname"><a href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">SVF::DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
801
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
801
802
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map&lt; const DIType *, std::vector&lt; const DIType * &gt; &gt; fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&amp;#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
802
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
803
803
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
804
804
  <div class="ttc" id="cJSON_8cpp_html_a8a1a0a26c50cc4becfc754bb68d1dc6b"><div class="ttname"><a href="cJSON_8cpp.html#a8a1a0a26c50cc4becfc754bb68d1dc6b">a</a></div><div class="ttdeci">cJSON * a</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02560">cJSON.cpp:2560</a></div></div>
805
805
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
806
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
806
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
807
807
  </div><!-- fragment -->
808
808
  </div>
809
809
  </div>
@@ -819,7 +819,7 @@ Additional Inherited Members</h2></td></tr>
819
819
  <tr>
820
820
  <td class="memname">void DCHGraph::gatherAggs </td>
821
821
  <td>(</td>
822
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *&#160;</td>
822
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *&#160;</td>
823
823
  <td class="paramname"><em>type</em></td><td>)</td>
824
824
  <td></td>
825
825
  </tr>
@@ -834,19 +834,19 @@ Additional Inherited Members</h2></td></tr>
834
834
  <p>Populates containingAggs for type and all its elements. </p>
835
835
 
836
836
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00350">350</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
837
- <div class="fragment"><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.find(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)) != <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.end())</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Initialise an empty set. We want all aggregates to have a value in</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// this map, even if empty (e.g. struct has no aggs, only scalars).</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)];</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *bt = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getBaseType();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; bt = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(bt);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(bt))</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(bt);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cbt);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// These must be canonical already because of aggs.insert above/below.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getElements();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fields.size(); ++i)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// Unwrap the member (could be a subprogram, not type, so guard needed).</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *mt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fields[i]))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *ft = mt-&gt;getBaseType();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; ft = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(ft);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(ft))</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cft = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(ft);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cft);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// These must be canonical already because of aggs.insert above.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
837
+ <div class="fragment"><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.find(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)) != <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>.end())</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Initialise an empty set. We want all aggregates to have a value in</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// this map, even if empty (e.g. struct has no aggs, only scalars).</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)];</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *bt = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getBaseType();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; bt = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(bt);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(bt))</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(bt);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cbt);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// These must be canonical already because of aggs.insert above/below.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cbt)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">DINodeArray</a> fields = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;getElements();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; fields.size(); ++i)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// Unwrap the member (could be a subprogram, not type, so guard needed).</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *mt = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(fields[i]))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *ft = mt-&gt;getBaseType();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; ft = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(ft);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">isAgg</a>(ft))</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cft = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(ft);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(cft);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// These must be canonical already because of aggs.insert above.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)].insert(</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">containingAggs</a>[<a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(cft)].<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
838
838
  <div class="ttc" id="classSVF_1_1DCHGraph_html_adc7a17f70ac3fa89624ad874dbd16ff9"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#adc7a17f70ac3fa89624ad874dbd16ff9">SVF::DCHGraph::containingAggs</a></div><div class="ttdeci">Map&lt; const DIType *, Set&lt; const DIType * &gt; &gt; containingAggs</div><div class="ttdoc">Maps aggregate types to all the aggregate types it transitively contains. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00376">DCHG.h:376</a></div></div>
839
839
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a8fcbea9435a77beb27ad64d5a3175b0b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">SVF::DCHGraph::gatherAggs</a></div><div class="ttdeci">void gatherAggs(const DICompositeType *type)</div><div class="ttdoc">Populates containingAggs for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00350">DCHG.cpp:350</a></div></div>
840
840
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
841
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
841
842
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
842
843
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a9d2be5aec5216cbc1d1709b41f79c44b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">SVF::DCHGraph::isAgg</a></div><div class="ttdeci">static bool isAgg(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00342">DCHG.cpp:342</a></div></div>
843
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
844
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
845
844
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
846
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
845
+ <div class="ttc" id="namespaceSVF_html_a0f825e73d115173b05ca54fb8ec65003"><div class="ttname"><a href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">SVF::DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
846
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
847
847
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
848
848
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
849
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
849
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
850
850
  </div><!-- fragment -->
851
851
  </div>
852
852
  </div>
@@ -860,9 +860,9 @@ Additional Inherited Members</h2></td></tr>
860
860
  <td class="mlabels-left">
861
861
  <table class="memname">
862
862
  <tr>
863
- <td class="memname">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt;&amp; SVF::DCHGraph::getAggs </td>
863
+ <td class="memname">const <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt;&amp; SVF::DCHGraph::getAggs </td>
864
864
  <td>(</td>
865
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
865
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
866
866
  <td class="paramname"><em>base</em></td><td>)</td>
867
867
  <td></td>
868
868
  </tr>
@@ -889,9 +889,9 @@ Additional Inherited Members</h2></td></tr>
889
889
  <div class="memproto">
890
890
  <table class="memname">
891
891
  <tr>
892
- <td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * DCHGraph::getCanonicalType </td>
892
+ <td class="memname">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * DCHGraph::getCanonicalType </td>
893
893
  <td>(</td>
894
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
894
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
895
895
  <td class="paramname"><em>t</em></td><td>)</td>
896
896
  <td></td>
897
897
  </tr>
@@ -900,10 +900,10 @@ Additional Inherited Members</h2></td></tr>
900
900
  <p>Returns the type representing all qualifier-variations of t. This should only matter in the case of DerivedTypes where qualifiers and have qualified base types cause a mess. </p>
901
901
 
902
902
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00713">713</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
903
- <div class="fragment"><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;{</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="comment">// We want stripped types to be canonical.</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *unstrippedT = t;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">// Is there a mapping for the unstripped type? Yes - return it.</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(unstrippedT) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// There is no mapping for unstripped type (^), is there one for the stripped</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// type? Yes - map the unstripped type to the same thing.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (unstrippedT != t)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(t) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT] = <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="comment">// Canonical type for t is not cached, find one for it.</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *canonType : <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(t, canonType))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// Found a canonical type.</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t] = canonType;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// No canonical type found, so t will be a canonical type.</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; canonicalTypes.insert(t);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.insert({t, t});</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a498a18fe8702251b6f2a4e6379e5cbb1"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">SVF::DCHGraph::canonicalTypeMap</a></div><div class="ttdeci">Map&lt; const DIType *, const DIType * &gt; canonicalTypeMap</div><div class="ttdoc">Maps types to their canonical type (many-to-one). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00370">DCHG.h:370</a></div></div>
903
+ <div class="fragment"><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;{</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="comment">// We want stripped types to be canonical.</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *unstrippedT = t;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">// Is there a mapping for the unstripped type? Yes - return it.</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(unstrippedT) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// There is no mapping for unstripped type (^), is there one for the stripped</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// type? Yes - map the unstripped type to the same thing.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (unstrippedT != t)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.find(t) != <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.end())</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT] = <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[unstrippedT];</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="comment">// Canonical type for t is not cached, find one for it.</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *canonType : <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(t, canonType))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// Found a canonical type.</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t] = canonType;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// No canonical type found, so t will be a canonical type.</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; canonicalTypes.insert(t);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>.insert({t, t});</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">canonicalTypeMap</a>[t];</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a498a18fe8702251b6f2a4e6379e5cbb1"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a498a18fe8702251b6f2a4e6379e5cbb1">SVF::DCHGraph::canonicalTypeMap</a></div><div class="ttdeci">Map&lt; const DIType *, const DIType * &gt; canonicalTypeMap</div><div class="ttdoc">Maps types to their canonical type (many-to-one). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00370">DCHG.h:370</a></div></div>
904
904
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
905
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
906
905
  <div class="ttc" id="classSVF_1_1DCHGraph_html_acb76ab20da1bfbec00f63d08e48cbddd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">SVF::DCHGraph::teq</a></div><div class="ttdeci">static bool teq(const DIType *t1, const DIType *t2)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00819">DCHG.cpp:819</a></div></div>
906
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
907
907
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a10225f56b21eb7f0870fdc433de3c393"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">SVF::DCHGraph::canonicalTypes</a></div><div class="ttdeci">Set&lt; const DIType * &gt; canonicalTypes</div><div class="ttdoc">Set of all possible canonical types (i.e. values of canonicalTypeMap). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00372">DCHG.h:372</a></div></div>
908
908
  </div><!-- fragment -->
909
909
  </div>
@@ -918,7 +918,7 @@ Additional Inherited Members</h2></td></tr>
918
918
  <td class="mlabels-left">
919
919
  <table class="memname">
920
920
  <tr>
921
- <td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>* SVF::DCHGraph::getCSStaticType </td>
921
+ <td class="memname">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>* SVF::DCHGraph::getCSStaticType </td>
922
922
  <td>(</td>
923
923
  <td class="paramtype"><a class="el" href="classSVF_1_1CallSite.html">CallSite</a>&#160;</td>
924
924
  <td class="paramname"><em>cs</em></td><td>)</td>
@@ -935,10 +935,10 @@ Additional Inherited Members</h2></td></tr>
935
935
  <p>Retrieves the metadata associated with a <em>virtual</em> callsite. </p>
936
936
 
937
937
  <p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00407">407</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
938
- <div class="fragment"><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *md = cs.getInstruction()-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; assert(md != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Missing type metadata at virtual callsite&quot;</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>&gt;(md);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; assert(diType != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Incorrect metadata type at virtual callsite&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span> diType;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_a0cd5347bc8043d4306e66a4a96005ace"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">SVF::cppUtil::ctir::derefMDName</a></div><div class="ttdeci">const std::string derefMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00113">CPPUtil.h:113</a></div></div>
939
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
938
+ <div class="fragment"><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *md = cs.getInstruction()-&gt;getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">cppUtil::ctir::derefMDName</a>);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; assert(md != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Missing type metadata at virtual callsite&quot;</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *diType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>&gt;(md);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; assert(diType != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Incorrect metadata type at virtual callsite&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span> diType;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1cppUtil_1_1ctir_html_a0cd5347bc8043d4306e66a4a96005ace"><div class="ttname"><a href="namespaceSVF_1_1cppUtil_1_1ctir.html#a0cd5347bc8043d4306e66a4a96005ace">SVF::cppUtil::ctir::derefMDName</a></div><div class="ttdeci">const std::string derefMDName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00113">CPPUtil.h:113</a></div></div>
940
939
  <div class="ttc" id="namespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
941
940
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
941
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
942
942
  </div><!-- fragment -->
943
943
  </div>
944
944
  </div>
@@ -1004,10 +1004,9 @@ Additional Inherited Members</h2></td></tr>
1004
1004
  <p>Implements <a class="el" href="classSVF_1_1CommonCHGraph.html#ae90f9a2152ab07aa0df16badd733f1fd">SVF::CommonCHGraph</a>.</p>
1005
1005
 
1006
1006
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00555">555</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1007
- <div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">// Check if we&#39;ve already computed.</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.end())</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>];</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; }</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> vtblSet;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;children = <a class="code" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a>(type, <span class="keyword">false</span>);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> childId : children)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="cJSON_8cpp.html#ad00efb41ca386db28bacc7aefe79535c">child</a> = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(childId);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = child-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>();</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">// TODO: what if it is null?</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span> (vtbl != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; vtblSet.insert(vtbl);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="comment">// Cache.</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.insert({<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, vtblSet});</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// Return cached version - not the stack object.</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>];</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
1007
+ <div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">getCSStaticType</a>(cs));</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">// Check if we&#39;ve already computed.</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.find(type) != <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.end())</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>];</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; }</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a> vtblSet;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;children = <a class="code" href="classSVF_1_1DCHGraph.html#a0a3dfe1f2757eabd75082e2c4caec47a">cha</a>(type, <span class="keyword">false</span>);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> childId : children)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *<a class="code" href="cJSON_8cpp.html#ad00efb41ca386db28bacc7aefe79535c">child</a> = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(childId);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl = child-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">getVTable</a>();</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">// TODO: what if it is null?</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span> (vtbl != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; vtblSet.insert(vtbl);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="comment">// Cache.</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>.insert({<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, vtblSet});</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// Return cached version - not the stack object.</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">vtblCHAMap</a>[<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>];</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
1008
1008
  <div class="ttc" id="classSVF_1_1DCHNode_html_a1a75ca91148992166d42d245d6c51988"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a1a75ca91148992166d42d245d6c51988">SVF::DCHNode::getVTable</a></div><div class="ttdeci">const GlobalValue * getVTable() const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00169">DCHG.h:169</a></div></div>
1009
1009
  <div class="ttc" id="cJSON_8cpp_html_ad00efb41ca386db28bacc7aefe79535c"><div class="ttname"><a href="cJSON_8cpp.html#ad00efb41ca386db28bacc7aefe79535c">child</a></div><div class="ttdeci">cJSON * child</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02723">cJSON.cpp:2723</a></div></div>
1010
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1011
1010
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
1012
1011
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a236d785d728189c2026357ce837fcdc6"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a236d785d728189c2026357ce837fcdc6">SVF::DCHGraph::getCSStaticType</a></div><div class="ttdeci">const DIType * getCSStaticType(CallSite cs) const</div><div class="ttdoc">Retrieves the metadata associated with a virtual callsite. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00407">DCHG.h:407</a></div></div>
1013
1012
  <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#l00075">BasicTypes.h:75</a></div></div>
@@ -1018,6 +1017,7 @@ Additional Inherited Members</h2></td></tr>
1018
1017
  <div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00460">SparseBitVector.h:460</a></div></div>
1019
1018
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294e7a04aff9cef87c1008e91a620155"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294e7a04aff9cef87c1008e91a620155">SVF::DCHGraph::vtblCHAMap</a></div><div class="ttdeci">Map&lt; const DIType *, VTableSet &gt; vtblCHAMap</div><div class="ttdoc">Maps types to a set with their vtable and all their children&amp;#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00366">DCHG.h:366</a></div></div>
1020
1019
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00391">GenericGraph.h:391</a></div></div>
1020
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
1021
1021
  </div><!-- fragment -->
1022
1022
  </div>
1023
1023
  </div>
@@ -1031,9 +1031,9 @@ Additional Inherited Members</h2></td></tr>
1031
1031
  <td class="mlabels-left">
1032
1032
  <table class="memname">
1033
1033
  <tr>
1034
- <td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a>* SVF::DCHGraph::getFieldType </td>
1034
+ <td class="memname">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>* SVF::DCHGraph::getFieldType </td>
1035
1035
  <td>(</td>
1036
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1036
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1037
1037
  <td class="paramname"><em>base</em>, </td>
1038
1038
  </tr>
1039
1039
  <tr>
@@ -1058,8 +1058,8 @@ Additional Inherited Members</h2></td></tr>
1058
1058
  <p>Returns the type of field number idx (flattened) in base. </p>
1059
1059
 
1060
1060
  <p class="definition">Definition at line <a class="el" href="DCHG_8h_source.html#l00291">291</a> of file <a class="el" href="DCHG_8h_source.html">DCHG.h</a>.</p>
1061
- <div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; base = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</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"> 296</span>&#160; <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</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; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_array_type)</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">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(base);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; assert(cbase &amp;&amp; <span class="stringliteral">&quot;DCHG: bad DIComposite case&quot;</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> cbase-&gt;getBaseType();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (!(base-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; || base-&gt;getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; assert(<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(base) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; std::vector&lt;const DIType *&gt; &amp;fields = <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[base];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; assert(fields.size() &gt; idx &amp;&amp; <span class="stringliteral">&quot;DCHG: idx into struct larger than # fields!&quot;</span>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fields[idx]);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map&lt; const DIType *, std::vector&lt; const DIType * &gt; &gt; fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&amp;#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
1062
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1061
+ <div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; base = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(base);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (base == <span class="keyword">nullptr</span>)</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"> 296</span>&#160; <span class="comment">// Conservative; the base object is untyped, sadly.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// For TBHC this is conservative because the union type is lower in the DCHG</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// than its fields. TODO: make more precise.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_union_type)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</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; <span class="keywordflow">if</span> (base-&gt;getTag() == dwarf::DW_TAG_array_type)</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">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *cbase = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(base);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; assert(cbase &amp;&amp; <span class="stringliteral">&quot;DCHG: bad DIComposite case&quot;</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> cbase-&gt;getBaseType();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (!(base-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; || base-&gt;getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; assert(<a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.find(base) != <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>.end() &amp;&amp; <span class="stringliteral">&quot;DCHG: base not flattened!&quot;</span>);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; std::vector&lt;const DIType *&gt; &amp;fields = <a class="code" href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">fieldTypes</a>[base];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; assert(fields.size() &gt; idx &amp;&amp; <span class="stringliteral">&quot;DCHG: idx into struct larger than # fields!&quot;</span>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(fields[idx]);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
1062
+ <div class="ttc" id="classSVF_1_1DCHGraph_html_a574ec14099f1112b394b00a79f3fdf1a"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a574ec14099f1112b394b00a79f3fdf1a">SVF::DCHGraph::fieldTypes</a></div><div class="ttdeci">Map&lt; const DIType *, std::vector&lt; const DIType * &gt; &gt; fieldTypes</div><div class="ttdoc">Maps types to their flattened fields&amp;#39; types. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00374">DCHG.h:374</a></div></div>
1063
1063
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
1064
1064
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1065
1065
  </div><!-- fragment -->
@@ -1075,9 +1075,9 @@ Additional Inherited Members</h2></td></tr>
1075
1075
  <td class="mlabels-left">
1076
1076
  <table class="memname">
1077
1077
  <tr>
1078
- <td class="memname">const std::vector&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt;&amp; SVF::DCHGraph::getFieldTypes </td>
1078
+ <td class="memname">const std::vector&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt;&amp; SVF::DCHGraph::getFieldTypes </td>
1079
1079
  <td>(</td>
1080
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1080
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1081
1081
  <td class="paramname"><em>base</em></td><td>)</td>
1082
1082
  <td></td>
1083
1083
  </tr>
@@ -1109,7 +1109,7 @@ Additional Inherited Members</h2></td></tr>
1109
1109
  <tr>
1110
1110
  <td class="memname"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a>* SVF::DCHGraph::getNode </td>
1111
1111
  <td>(</td>
1112
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1112
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1113
1113
  <td class="paramname"><em>type</em></td><td>)</td>
1114
1114
  <td></td>
1115
1115
  </tr>
@@ -1143,7 +1143,7 @@ Additional Inherited Members</h2></td></tr>
1143
1143
  <tr>
1144
1144
  <td class="memname">unsigned SVF::DCHGraph::getNumFields </td>
1145
1145
  <td>(</td>
1146
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1146
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1147
1147
  <td class="paramname"><em>base</em></td><td>)</td>
1148
1148
  <td></td>
1149
1149
  </tr>
@@ -1173,7 +1173,7 @@ Additional Inherited Members</h2></td></tr>
1173
1173
  <tr>
1174
1174
  <td class="memname"><a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> * DCHGraph::getOrCreateNode </td>
1175
1175
  <td>(</td>
1176
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1176
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1177
1177
  <td class="paramname"><em>type</em></td><td>)</td>
1178
1178
  <td></td>
1179
1179
  </tr>
@@ -1241,12 +1241,11 @@ Additional Inherited Members</h2></td></tr>
1241
1241
  <p>Implements <a class="el" href="classSVF_1_1CommonCHGraph.html#aae511b2ee7c2c7ea7be70c7884e92021">SVF::CommonCHGraph</a>.</p>
1242
1242
 
1243
1243
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00583">583</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1244
- <div class="fragment"><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;{</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordtype">size_t</span> idx = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">cppUtil::getVCallIdx</a>(cs);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName = <a class="code" href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">cppUtil::getFunNameOfVCallSite</a>(cs);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl : vtbls)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; assert(<a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.find(vtbl) != <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;floating vtbl&quot;</span>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[vtbl];</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; assert(<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type) &amp;&amp; <span class="stringliteral">&quot;trying to get vtbl for type not in graph&quot;</span>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; std::vector&lt;std::vector&lt;const Function *&gt;&gt; allVfns = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;const Function *&gt; vfnV : allVfns)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">// We only care about any virtual function corresponding to idx.</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">if</span> (idx &gt;= vfnV.size())</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = vfnV[idx];</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="comment">// Practically a copy of that in lib/MemoryModel/CHA.cpp</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span> (cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>() == callee-&gt;arg_size() || (cs.<a class="code" href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">getFunctionType</a>()-&gt;isVarArg() &amp;&amp; callee-&gt;isVarArg()))</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(callee-&gt;getName().str());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> calleeName = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment"> * The compiler will add some special suffix (e.g.,</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment"> * &quot;[abi:cxx11]&quot;) to the end of some virtual function:</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment"> * In dealII</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment"> * function: FE_Q&lt;3&gt;::get_name</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment"> * will be mangled as: _ZNK4FE_QILi3EE8get_nameB5cxx11Ev</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment"> * after demangling: FE_Q&lt;3&gt;::get_name[abi:cxx11]</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment"> * The special suffix (&quot;[abi:cxx11]&quot;) needs to be removed</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> suffix(<span class="stringliteral">&quot;[abi:cxx11]&quot;</span>);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordtype">size_t</span> suffixPos = calleeName.rfind(suffix);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span> (suffixPos != std::string::npos)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; calleeName.erase(suffixPos, suffix.size());</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment"> * if we can&#39;t get the function name of a virtual callsite, all virtual</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="comment"> * functions corresponding to idx will be valid</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">if</span> (funName.size() == 0)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee-&gt;getName().str()));</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (funName[0] == <span class="charliteral">&#39;~&#39;</span>)</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="comment"> * if the virtual callsite is calling a destructor, then all</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="comment"> * destructors in the ch will be valid</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<span class="comment"> * class A { virtual ~A(){} };</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="comment"> * class B: public A { virtual ~B(){} };</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="comment"> * int main() {</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="comment"> * A *a = new B;</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;<span class="comment"> * delete a; /// the function name of this virtual callsite is ~A()</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">if</span> (calleeName[0] == <span class="charliteral">&#39;~&#39;</span>)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee-&gt;getName().str()));</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;<span class="comment"> * For other virtual function calls, the function name of the callsite</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="comment"> * and the function name of the target callee should match exactly</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (funName.compare(calleeName) == 0)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee-&gt;getName().str()));</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;}</div><div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad2a35c1d2e357690e634bb250a68795d"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">SVF::cppUtil::getVCallIdx</a></div><div class="ttdeci">u64_t getVCallIdx(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00391">CPPUtil.cpp:391</a></div></div>
1244
+ <div class="fragment"><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;{</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordtype">size_t</span> idx = <a class="code" href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">cppUtil::getVCallIdx</a>(cs);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName = <a class="code" href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">cppUtil::getFunNameOfVCallSite</a>(cs);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *vtbl : vtbls)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; assert(<a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.find(vtbl) != <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;floating vtbl&quot;</span>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">vtblToTypeMap</a>[vtbl];</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; assert(<a class="code" href="classSVF_1_1DCHGraph.html#a58341e23c1dc2b3e7fce190ed16a8a25">hasNode</a>(type) &amp;&amp; <span class="stringliteral">&quot;trying to get vtbl for type not in graph&quot;</span>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">getNode</a>(type);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; std::vector&lt;std::vector&lt;const Function *&gt;&gt; allVfns = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;const Function *&gt; vfnV : allVfns)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">// We only care about any virtual function corresponding to idx.</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">if</span> (idx &gt;= vfnV.size())</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = vfnV[idx];</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="comment">// Practically a copy of that in lib/MemoryModel/CHA.cpp</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span> (cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>() == callee-&gt;arg_size() || (cs.<a class="code" href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">getFunctionType</a>()-&gt;isVarArg() &amp;&amp; callee-&gt;isVarArg()))</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(callee-&gt;getName().str());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> calleeName = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment"> * The compiler will add some special suffix (e.g.,</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment"> * &quot;[abi:cxx11]&quot;) to the end of some virtual function:</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment"> * In dealII</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment"> * function: FE_Q&lt;3&gt;::get_name</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment"> * will be mangled as: _ZNK4FE_QILi3EE8get_nameB5cxx11Ev</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment"> * after demangling: FE_Q&lt;3&gt;::get_name[abi:cxx11]</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment"> * The special suffix (&quot;[abi:cxx11]&quot;) needs to be removed</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> suffix(<span class="stringliteral">&quot;[abi:cxx11]&quot;</span>);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordtype">size_t</span> suffixPos = calleeName.rfind(suffix);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span> (suffixPos != std::string::npos)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; calleeName.erase(suffixPos, suffix.size());</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment"> * if we can&#39;t get the function name of a virtual callsite, all virtual</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="comment"> * functions corresponding to idx will be valid</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">if</span> (funName.size() == 0)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee-&gt;getName().str()));</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (funName[0] == <span class="charliteral">&#39;~&#39;</span>)</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="comment"> * if the virtual callsite is calling a destructor, then all</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="comment"> * destructors in the ch will be valid</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<span class="comment"> * class A { virtual ~A(){} };</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="comment"> * class B: public A { virtual ~B(){} };</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="comment"> * int main() {</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="comment"> * A *a = new B;</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;<span class="comment"> * delete a; /// the function name of this virtual callsite is ~A()</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">if</span> (calleeName[0] == <span class="charliteral">&#39;~&#39;</span>)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee-&gt;getName().str()));</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;<span class="comment"> * For other virtual function calls, the function name of the callsite</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="comment"> * and the function name of the target callee should match exactly</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (funName.compare(calleeName) == 0)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; virtualFunctions.insert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aa09c2b313ff1c1abcc1e5cb3f9ef46a5">SVFUtil::getFunction</a>(callee-&gt;getName().str()));</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;}</div><div class="ttc" id="namespaceSVF_1_1cppUtil_html_ad2a35c1d2e357690e634bb250a68795d"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#ad2a35c1d2e357690e634bb250a68795d">SVF::cppUtil::getVCallIdx</a></div><div class="ttdeci">u64_t getVCallIdx(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00391">CPPUtil.cpp:391</a></div></div>
1245
1245
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html">SVF::cppUtil::DemangledName</a></div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00046">CPPUtil.h:46</a></div></div>
1246
1246
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aaa63715e67ade7711a0366eb7559b708"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aaa63715e67ade7711a0366eb7559b708">SVF::DCHGraph::vtblToTypeMap</a></div><div class="ttdeci">Map&lt; const GlobalValue *, const DIType * &gt; vtblToTypeMap</div><div class="ttdoc">Maps VTables to the DIType associated with them. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00360">DCHG.h:360</a></div></div>
1247
1247
  <div class="ttc" id="classSVF_1_1DCHNode_html_a0669b995c4fe72f206154f5cf6889fe8"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">SVF::DCHNode::getVfnVectors</a></div><div class="ttdeci">const std::vector&lt; std::vector&lt; const Function * &gt; &gt; &amp; getVfnVectors(void) const</div><div class="ttdoc">Returns the vector of virtual function vectors. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00175">DCHG.h:175</a></div></div>
1248
1248
  <div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
1249
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1250
1249
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00049">CPPUtil.h:49</a></div></div>
1251
1250
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
1252
1251
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a96c68bbb5ee5e939158ce0b67da2c61d"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a96c68bbb5ee5e939158ce0b67da2c61d">SVF::DCHGraph::getNode</a></div><div class="ttdeci">DCHNode * getNode(const DIType *type)</div><div class="ttdoc">Returns the node for type (nullptr if it doesn&amp;#39;t exist). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00424">DCHG.h:424</a></div></div>
@@ -1259,6 +1258,7 @@ Additional Inherited Members</h2></td></tr>
1259
1258
  <div class="ttc" id="namespaceSVF_1_1cppUtil_html_a0a67c31dcc44784b09dca54b4b7c624a"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a0a67c31dcc44784b09dca54b4b7c624a">SVF::cppUtil::getFunNameOfVCallSite</a></div><div class="ttdeci">std::string getFunNameOfVCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00547">CPPUtil.cpp:547</a></div></div>
1260
1259
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
1261
1260
  <div class="ttc" id="classSVF_1_1CallSite_html_ad0040f4b7953b509059223d1d52c203f"><div class="ttname"><a href="classSVF_1_1CallSite.html#ad0040f4b7953b509059223d1d52c203f">SVF::CallSite::getFunctionType</a></div><div class="ttdeci">FunctionType * getFunctionType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00258">BasicTypes.h:258</a></div></div>
1261
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
1262
1262
  </div><!-- fragment -->
1263
1263
  </div>
1264
1264
  </div>
@@ -1274,7 +1274,7 @@ Additional Inherited Members</h2></td></tr>
1274
1274
  <tr>
1275
1275
  <td class="memname">void DCHGraph::handleDIBasicType </td>
1276
1276
  <td>(</td>
1277
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *&#160;</td>
1277
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *&#160;</td>
1278
1278
  <td class="paramname"><em>basicType</em></td><td>)</td>
1279
1279
  <td></td>
1280
1280
  </tr>
@@ -1305,7 +1305,7 @@ Additional Inherited Members</h2></td></tr>
1305
1305
  <tr>
1306
1306
  <td class="memname">void DCHGraph::handleDICompositeType </td>
1307
1307
  <td>(</td>
1308
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *&#160;</td>
1308
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *&#160;</td>
1309
1309
  <td class="paramname"><em>compositeType</em></td><td>)</td>
1310
1310
  <td></td>
1311
1311
  </tr>
@@ -1320,16 +1320,16 @@ Additional Inherited Members</h2></td></tr>
1320
1320
  <p>Construction helper to process DICompositeTypes. </p>
1321
1321
 
1322
1322
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00027">27</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1323
- <div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">switch</span> (compositeType-&gt;getTag())</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_array_type:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>) <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_class_type:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_structure_type:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// If we&#39;re extending, we need to add the first-field relation.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = compositeType-&gt;getElements();</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (!fields.empty())</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// We want the first non-static, non-function member; it may not exist.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *firstMember = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a> *<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> : fields)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *fm = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (fm-&gt;getTag() == dwarf::DW_TAG_member &amp;&amp; !fm-&gt;isStaticMember())</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; firstMember = fm;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</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"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span> (firstMember != <span class="keyword">nullptr</span>)</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="comment">// firstMember is a DW_TAG_member, we want the base type beneath it.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember-&gt;getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(compositeType);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_union_type:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// All fields are first fields.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</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; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a> fields = compositeType-&gt;getElements();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a> *field : fields)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// fields[0] gives a type which is DW_TAG_member, we want the member&#39;s type (getBaseType).</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *firstMember = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a>&gt;(field);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; assert(firstMember != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member type&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember-&gt;getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// flatten(compositeType);</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</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"> 88</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_enumeration_type:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHGraph::buildCHG: unexpected CompositeType tag.&quot;</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
1323
+ <div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">switch</span> (compositeType-&gt;getTag())</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_array_type:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>) <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_class_type:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_structure_type:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// If we&#39;re extending, we need to add the first-field relation.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">DINodeArray</a> fields = compositeType-&gt;getElements();</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (!fields.empty())</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// We want the first non-static, non-function member; it may not exist.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *firstMember = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a758f3bee97ed46a719d64a2d4f2bc62d">DINode</a> *<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> : fields)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *fm = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (fm-&gt;getTag() == dwarf::DW_TAG_member &amp;&amp; !fm-&gt;isStaticMember())</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; firstMember = fm;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</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"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span> (firstMember != <span class="keyword">nullptr</span>)</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="comment">// firstMember is a DW_TAG_member, we want the base type beneath it.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember-&gt;getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">flatten</a>(compositeType);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_union_type:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// All fields are first fields.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">extended</a>)</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; <a class="code" href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">DINodeArray</a> fields = compositeType-&gt;getElements();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a758f3bee97ed46a719d64a2d4f2bc62d">DINode</a> *field : fields)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// fields[0] gives a type which is DW_TAG_member, we want the member&#39;s type (getBaseType).</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *firstMember = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a>&gt;(field);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; assert(firstMember != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: expected member type&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">addEdge</a>(compositeType, firstMember-&gt;getBaseType(), <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// flatten(compositeType);</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">gatherAggs</a>(compositeType);</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"> 88</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> dwarf::DW_TAG_enumeration_type:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(compositeType);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHGraph::buildCHG: unexpected CompositeType tag.&quot;</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
1324
1324
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a8fcbea9435a77beb27ad64d5a3175b0b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a8fcbea9435a77beb27ad64d5a3175b0b">SVF::DCHGraph::gatherAggs</a></div><div class="ttdeci">void gatherAggs(const DICompositeType *type)</div><div class="ttdoc">Populates containingAggs for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00350">DCHG.cpp:350</a></div></div>
1325
1325
  <div class="ttc" id="classSVF_1_1DCHGraph_html_ab96874bc8f6461fe0c3eb53b7f5cedce"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ab96874bc8f6461fe0c3eb53b7f5cedce">SVF::DCHGraph::flatten</a></div><div class="ttdeci">void flatten(const DICompositeType *type)</div><div class="ttdoc">Populates fieldTypes for type and all its elements. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00265">DCHG.cpp:265</a></div></div>
1326
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a358cd7e78ebc504972b73cd5ee80fac2"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a358cd7e78ebc504972b73cd5ee80fac2">DINode</a></div><div class="ttdeci">llvm::DINode DINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00105">BasicTypes.h:105</a></div></div>
1327
1326
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">SVF::DCHEdge::FIRST_FIELD</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00037">DCHG.h:37</a></div></div>
1328
1327
  <div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
1329
1328
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a294a2075c97e1db8003393fb472c1def"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a294a2075c97e1db8003393fb472c1def">SVF::DCHGraph::addEdge</a></div><div class="ttdeci">DCHEdge * addEdge(const DIType *t1, const DIType *t2, DCHEdge::GEdgeKind et)</div><div class="ttdoc">Creates an edge between from t1 to t2. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00421">DCHG.cpp:421</a></div></div>
1330
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a98bb9afb9385eac16d7c78da796fd601"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a98bb9afb9385eac16d7c78da796fd601">DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
1329
+ <div class="ttc" id="namespaceSVF_html_a0f825e73d115173b05ca54fb8ec65003"><div class="ttname"><a href="namespaceSVF.html#a0f825e73d115173b05ca54fb8ec65003">SVF::DINodeArray</a></div><div class="ttdeci">llvm::DINodeArray DINodeArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
1330
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1331
+ <div class="ttc" id="namespaceSVF_html_a758f3bee97ed46a719d64a2d4f2bc62d"><div class="ttname"><a href="namespaceSVF.html#a758f3bee97ed46a719d64a2d4f2bc62d">SVF::DINode</a></div><div class="ttdeci">llvm::DINode DINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
1331
1332
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1332
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1333
1333
  <div class="ttc" id="classSVF_1_1DCHGraph_html_aa6f49dfc9e3580d3f2d8c257395eb11e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#aa6f49dfc9e3580d3f2d8c257395eb11e">SVF::DCHGraph::extended</a></div><div class="ttdeci">bool extended</div><div class="ttdoc">Whether this CHG is an extended CHG (first-field). Set by buildCHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00356">DCHG.h:356</a></div></div>
1334
1334
  </div><!-- fragment -->
1335
1335
  </div>
@@ -1346,7 +1346,7 @@ Additional Inherited Members</h2></td></tr>
1346
1346
  <tr>
1347
1347
  <td class="memname">void DCHGraph::handleDIDerivedType </td>
1348
1348
  <td>(</td>
1349
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *&#160;</td>
1349
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *&#160;</td>
1350
1350
  <td class="paramname"><em>derivedType</em></td><td>)</td>
1351
1351
  <td></td>
1352
1352
  </tr>
@@ -1383,7 +1383,7 @@ Additional Inherited Members</h2></td></tr>
1383
1383
  <tr>
1384
1384
  <td class="memname">void DCHGraph::handleDISubroutineType </td>
1385
1385
  <td>(</td>
1386
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#aad46bd16008ebbc81e632f4fc69b3ea9">DISubroutineType</a> *&#160;</td>
1386
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#a090e0791e8c200104ed3ab6bab157129">DISubroutineType</a> *&#160;</td>
1387
1387
  <td class="paramname"><em>subroutineType</em></td><td>)</td>
1388
1388
  <td></td>
1389
1389
  </tr>
@@ -1414,7 +1414,7 @@ Additional Inherited Members</h2></td></tr>
1414
1414
  <tr>
1415
1415
  <td class="memname">void DCHGraph::handleTypedef </td>
1416
1416
  <td>(</td>
1417
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1417
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1418
1418
  <td class="paramname"><em>typedefType</em></td><td>)</td>
1419
1419
  <td></td>
1420
1420
  </tr>
@@ -1429,12 +1429,12 @@ Additional Inherited Members</h2></td></tr>
1429
1429
  <p>Attaches the typedef(s) to the base node. </p>
1430
1430
 
1431
1431
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00138">138</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1432
- <div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; assert(typedefType &amp;&amp; typedefType-&gt;getTag() == dwarf::DW_TAG_typedef);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// Need to gather them in a set first because we don&#39;t know the base type till</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// we get to the bottom of the (potentially many) typedefs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; std::vector&lt;const DIDerivedType *&gt; typedefs;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Check for nullptr because you can typedef void.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">while</span> (typedefType != <span class="keyword">nullptr</span> &amp;&amp; typedefType-&gt;getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *typedefDerivedType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a>&gt;(typedefType);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// The typedef itself.</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; typedefs.push_back(typedefDerivedType);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Next in the typedef line.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; typedefType = typedefDerivedType-&gt;getBaseType();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = typedefType;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *baseTypeNode = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(baseType);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *tdef : typedefs)</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"> 161</span>&#160; <span class="comment">// Base type needs to hold its typedefs.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; baseTypeNode-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">addTypedef</a>(tdef);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
1432
+ <div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; assert(typedefType &amp;&amp; typedefType-&gt;getTag() == dwarf::DW_TAG_typedef);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// Need to gather them in a set first because we don&#39;t know the base type till</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// we get to the bottom of the (potentially many) typedefs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; std::vector&lt;const DIDerivedType *&gt; typedefs;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Check for nullptr because you can typedef void.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">while</span> (typedefType != <span class="keyword">nullptr</span> &amp;&amp; typedefType-&gt;getTag() == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *typedefDerivedType = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a>&gt;(typedefType);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// The typedef itself.</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; typedefs.push_back(typedefDerivedType);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Next in the typedef line.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; typedefType = typedefDerivedType-&gt;getBaseType();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = typedefType;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *baseTypeNode = <a class="code" href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">getOrCreateNode</a>(baseType);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *tdef : typedefs)</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"> 161</span>&#160; <span class="comment">// Base type needs to hold its typedefs.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; baseTypeNode-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">addTypedef</a>(tdef);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a9ed6b91fad334605f514049a2072b538"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a9ed6b91fad334605f514049a2072b538">SVF::DCHGraph::getOrCreateNode</a></div><div class="ttdeci">DCHNode * getOrCreateNode(const DIType *type)</div><div class="ttdoc">Creates a node from type, or returns it if it exists. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00403">DCHG.cpp:403</a></div></div>
1433
1433
  <div class="ttc" id="classSVF_1_1DCHNode_html_a9d1016e3da3462664198b1125dfc8f6e"><div class="ttname"><a href="classSVF_1_1DCHNode.html#a9d1016e3da3462664198b1125dfc8f6e">SVF::DCHNode::addTypedef</a></div><div class="ttdeci">void addTypedef(const DIDerivedType *diTypedef)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00154">DCHG.h:154</a></div></div>
1434
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1434
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1435
1435
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
1436
1436
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1437
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1437
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
1438
1438
  </div><!-- fragment -->
1439
1439
  </div>
1440
1440
  </div>
@@ -1450,13 +1450,13 @@ Additional Inherited Members</h2></td></tr>
1450
1450
  <tr>
1451
1451
  <td class="memname"><a class="el" href="classSVF_1_1DCHEdge.html">DCHEdge</a> * DCHGraph::hasEdge </td>
1452
1452
  <td>(</td>
1453
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1453
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1454
1454
  <td class="paramname"><em>t1</em>, </td>
1455
1455
  </tr>
1456
1456
  <tr>
1457
1457
  <td class="paramkey"></td>
1458
1458
  <td></td>
1459
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1459
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1460
1460
  <td class="paramname"><em>t2</em>, </td>
1461
1461
  </tr>
1462
1462
  <tr>
@@ -1501,7 +1501,7 @@ Additional Inherited Members</h2></td></tr>
1501
1501
  <tr>
1502
1502
  <td class="memname">bool SVF::DCHGraph::hasNode </td>
1503
1503
  <td>(</td>
1504
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1504
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1505
1505
  <td class="paramname"><em>type</em></td><td>)</td>
1506
1506
  <td></td>
1507
1507
  </tr>
@@ -1534,7 +1534,7 @@ Additional Inherited Members</h2></td></tr>
1534
1534
  <tr>
1535
1535
  <td class="memname">bool DCHGraph::isAgg </td>
1536
1536
  <td>(</td>
1537
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1537
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1538
1538
  <td class="paramname"><em>t</em></td><td>)</td>
1539
1539
  <td></td>
1540
1540
  </tr>
@@ -1562,13 +1562,13 @@ Additional Inherited Members</h2></td></tr>
1562
1562
  <tr>
1563
1563
  <td class="memname">bool DCHGraph::isBase </td>
1564
1564
  <td>(</td>
1565
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1565
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1566
1566
  <td class="paramname"><em>a</em>, </td>
1567
1567
  </tr>
1568
1568
  <tr>
1569
1569
  <td class="paramkey"></td>
1570
1570
  <td></td>
1571
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1571
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1572
1572
  <td class="paramname"><em>b</em>, </td>
1573
1573
  </tr>
1574
1574
  <tr>
@@ -1617,13 +1617,13 @@ Additional Inherited Members</h2></td></tr>
1617
1617
  <tr>
1618
1618
  <td class="memname">bool DCHGraph::isFieldOf </td>
1619
1619
  <td>(</td>
1620
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1620
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1621
1621
  <td class="paramname"><em>f</em>, </td>
1622
1622
  </tr>
1623
1623
  <tr>
1624
1624
  <td class="paramkey"></td>
1625
1625
  <td></td>
1626
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1626
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1627
1627
  <td class="paramname"><em>b</em>&#160;</td>
1628
1628
  </tr>
1629
1629
  <tr>
@@ -1642,13 +1642,13 @@ Additional Inherited Members</h2></td></tr>
1642
1642
  <p>Returns true if f is a field of b (fields from getFieldTypes). </p>
1643
1643
 
1644
1644
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00677">677</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1645
- <div class="fragment"><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; assert(f &amp;&amp; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> &amp;&amp; <span class="stringliteral">&quot;DCHG::isFieldOf: given nullptr!&quot;</span>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; f = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(f);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (f == <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_array_type || <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *baseType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *arrayType = SVFUtil::dyn_cast&lt;DICompositeType&gt;(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>))</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; baseType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *ptrType = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>))</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; baseType = ptrType-&gt;getBaseType();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; assert(baseType &amp;&amp; <span class="stringliteral">&quot;DCHG::isFieldOf: baseType is neither DIComposite nor DIDerived!&quot;</span>);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; baseType = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">return</span> f == baseType || (baseType != <span class="keyword">nullptr</span> &amp;&amp; <a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(f, baseType));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; || <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">const</span> std::vector&lt;const DIType *&gt; &amp;fields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">return</span> std::find(fields.begin(), fields.end(), f) != fields.end();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector&lt; const DIType * &gt; &amp; getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
1645
+ <div class="fragment"><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; assert(f &amp;&amp; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> &amp;&amp; <span class="stringliteral">&quot;DCHG::isFieldOf: given nullptr!&quot;</span>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; f = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(f);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (f == <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_array_type || <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_pointer_type)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *arrayType = SVFUtil::dyn_cast&lt;DICompositeType&gt;(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>))</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; baseType = arrayType-&gt;getBaseType();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *ptrType = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>))</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; baseType = ptrType-&gt;getBaseType();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; assert(baseType &amp;&amp; <span class="stringliteral">&quot;DCHG::isFieldOf: baseType is neither DIComposite nor DIDerived!&quot;</span>);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; baseType = <a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(baseType);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">return</span> f == baseType || (baseType != <span class="keyword">nullptr</span> &amp;&amp; <a class="code" href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">isFieldOf</a>(f, baseType));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; || <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>-&gt;getTag() == dwarf::DW_TAG_structure_type)</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">const</span> std::vector&lt;const DIType *&gt; &amp;fields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">return</span> std::find(fields.begin(), fields.end(), f) != fields.end();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector&lt; const DIType * &gt; &amp; getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
1646
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
1646
1647
  <div class="ttc" id="cJSON_8h_html_a1a175e87536301df98c805ac0636ad7c"><div class="ttname"><a href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a></div><div class="ttdeci">const cJSON *const b</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00255">cJSON.h:255</a></div></div>
1647
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1648
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1648
1649
  <div class="ttc" id="classSVF_1_1DCHGraph_html_af0534356b4a8c68507e1237f1d7a8c11"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#af0534356b4a8c68507e1237f1d7a8c11">SVF::DCHGraph::isFieldOf</a></div><div class="ttdeci">virtual bool isFieldOf(const DIType *f, const DIType *b)</div><div class="ttdoc">Returns true if f is a field of b (fields from getFieldTypes). </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00677">DCHG.cpp:677</a></div></div>
1649
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1650
1650
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a079feacdcc3783f4a9108a3b2d2aed2c"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">SVF::DCHGraph::getCanonicalType</a></div><div class="ttdeci">const DIType * getCanonicalType(const DIType *t)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00713">DCHG.cpp:713</a></div></div>
1651
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1651
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
1652
1652
  </div><!-- fragment -->
1653
1653
  </div>
1654
1654
  </div>
@@ -1661,13 +1661,13 @@ Additional Inherited Members</h2></td></tr>
1661
1661
  <tr>
1662
1662
  <td class="memname">bool DCHGraph::isFirstField </td>
1663
1663
  <td>(</td>
1664
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1664
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1665
1665
  <td class="paramname"><em>f</em>, </td>
1666
1666
  </tr>
1667
1667
  <tr>
1668
1668
  <td class="paramkey"></td>
1669
1669
  <td></td>
1670
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1670
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1671
1671
  <td class="paramname"><em>b</em>&#160;</td>
1672
1672
  </tr>
1673
1673
  <tr>
@@ -1707,7 +1707,7 @@ Additional Inherited Members</h2></td></tr>
1707
1707
  </div><div class="memdoc">
1708
1708
 
1709
1709
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l01131">1131</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1710
- <div class="fragment"><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;{</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> line = <span class="stringliteral">&quot;-------------------------------------\n&quot;</span>;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> thickLine = <span class="stringliteral">&quot;=====================================\n&quot;</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> singleIndent = 2;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordtype">size_t</span> currIndent = 0;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; thickLine;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordtype">unsigned</span> numStructs = 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordtype">unsigned</span> largestStruct = 0;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> nodes;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">DCHGraph::const_iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; nodes.insert(it-&gt;first);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : nodes)</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; {</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">if</span> (*nodes.begin() != id)</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; line;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) &lt;&lt; <span class="stringliteral">&quot; [&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() &lt;&lt; <span class="stringliteral">&quot;]&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() != <span class="keyword">nullptr</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; &amp;&amp; (node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; || node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()-&gt;getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; ++numStructs;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordtype">unsigned</span> numFields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()).size();</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; largestStruct = numFields &gt; largestStruct ? numFields : largestStruct;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;Virtual functions\n&quot;</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;const Function *&gt;&gt; &amp;vfnVectors = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; vfnVectors.size(); ++i)</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; {</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;[ vtable #&quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot; ]\n&quot;</span>;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j &lt; vfnVectors[i].size(); ++j)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(vfnVectors[i][j]-&gt;getName().str());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; j &lt;&lt; <span class="stringliteral">&quot;] &quot;</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; &lt;&lt; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> &lt;&lt; <span class="stringliteral">&quot;::&quot;</span> &lt;&lt; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="comment">// Nothing was printed.</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (vfnVectors.size() == 0)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;(none)\n&quot;</span>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;Bases\n&quot;</span>;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *edge : node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; {</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> arrow;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90">DCHEdge::INHERITANCE</a>)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; arrow = <span class="stringliteral">&quot;--inheritance--&gt;&quot;</span>;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>)</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; arrow = <span class="stringliteral">&quot;--first-field--&gt;&quot;</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77">DCHEdge::INSTANCE</a>)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; arrow = <span class="stringliteral">&quot;---instance----&gt;&quot;</span>;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; arrow = <span class="stringliteral">&quot;---standard----&gt;&quot;</span>;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; {</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; arrow = <span class="stringliteral">&quot;----unknown----&gt;&quot;</span>;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;[ &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) &lt;&lt; <span class="stringliteral">&quot; ] &quot;</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; &lt;&lt; arrow &lt;&lt; <span class="stringliteral">&quot; [ &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(edge-&gt;getDstNode()-&gt;getType()) &lt;&lt; <span class="stringliteral">&quot; ]\n&quot;</span>;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().size() == 0)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; {</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;(none)\n&quot;</span>;</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; }</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;Typedefs\n&quot;</span>;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIDerivedType *&gt;</a> &amp;typedefs = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">getTypedefs</a>();</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *tdef : typedefs)</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> typedefName = <span class="stringliteral">&quot;void&quot;</span>;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="keywordflow">if</span> (tdef != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; typedefName = tdef-&gt;getName().str();</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; }</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; typedefName &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">if</span> (typedefs.size() == 0)</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;(none)\n&quot;</span>;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; }</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; thickLine;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;Other stats\n&quot;</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; line;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;# Canonical types : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;# structs : &quot;</span> &lt;&lt; numStructs &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;Largest struct : &quot;</span> &lt;&lt; largestStruct &lt;&lt; <span class="stringliteral">&quot; fields\n&quot;</span>;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; thickLine;</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
1710
+ <div class="fragment"><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;{</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> line = <span class="stringliteral">&quot;-------------------------------------\n&quot;</span>;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> thickLine = <span class="stringliteral">&quot;=====================================\n&quot;</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> singleIndent = 2;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordtype">size_t</span> currIndent = 0;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; thickLine;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordtype">unsigned</span> numStructs = 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordtype">unsigned</span> largestStruct = 0;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> nodes;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">DCHGraph::const_iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; nodes.insert(it-&gt;first);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : nodes)</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; {</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">if</span> (*nodes.begin() != id)</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; line;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHNode.html">DCHNode</a> *node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) &lt;&lt; <span class="stringliteral">&quot; [&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() &lt;&lt; <span class="stringliteral">&quot;]&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>() != <span class="keyword">nullptr</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; &amp;&amp; (node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()-&gt;getTag() == dwarf::DW_TAG_class_type</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; || node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()-&gt;getTag() == dwarf::DW_TAG_structure_type))</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; ++numStructs;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordtype">unsigned</span> numFields = <a class="code" href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">getFieldTypes</a>(node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()).size();</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; largestStruct = numFields &gt; largestStruct ? numFields : largestStruct;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;Virtual functions\n&quot;</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;const Function *&gt;&gt; &amp;vfnVectors = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#a0669b995c4fe72f206154f5cf6889fe8">getVfnVectors</a>();</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; vfnVectors.size(); ++i)</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; {</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;[ vtable #&quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot; ]\n&quot;</span>;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j &lt; vfnVectors[i].size(); ++j)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">cppUtil::demangle</a>(vfnVectors[i][j]-&gt;getName().str());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; j &lt;&lt; <span class="stringliteral">&quot;] &quot;</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; &lt;&lt; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> &lt;&lt; <span class="stringliteral">&quot;::&quot;</span> &lt;&lt; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="comment">// Nothing was printed.</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (vfnVectors.size() == 0)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;(none)\n&quot;</span>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;Bases\n&quot;</span>;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1DCHEdge.html">DCHEdge</a> *edge : node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; {</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> arrow;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90">DCHEdge::INHERITANCE</a>)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; arrow = <span class="stringliteral">&quot;--inheritance--&gt;&quot;</span>;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3b49b95b713f585b717810dce5ac6564">DCHEdge::FIRST_FIELD</a>)</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; arrow = <span class="stringliteral">&quot;--first-field--&gt;&quot;</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77">DCHEdge::INSTANCE</a>)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; arrow = <span class="stringliteral">&quot;---instance----&gt;&quot;</span>;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;getEdgeKind() == <a class="code" href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba8b07351616a1798fa34ec3828f485ebb">DCHEdge::STD_DEF</a>)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; arrow = <span class="stringliteral">&quot;---standard----&gt;&quot;</span>;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; {</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; arrow = <span class="stringliteral">&quot;----unknown----&gt;&quot;</span>;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;[ &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#aaf4036d892bdae02a01d31bfe3db2153">getType</a>()) &lt;&lt; <span class="stringliteral">&quot; ] &quot;</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; &lt;&lt; arrow &lt;&lt; <span class="stringliteral">&quot; [ &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">diTypeToStr</a>(edge-&gt;getDstNode()-&gt;getType()) &lt;&lt; <span class="stringliteral">&quot; ]\n&quot;</span>;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().size() == 0)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; {</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;(none)\n&quot;</span>;</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; }</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;Typedefs\n&quot;</span>;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; currIndent += singleIndent;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const DIDerivedType *&gt;</a> &amp;typedefs = node-&gt;<a class="code" href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">getTypedefs</a>();</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *tdef : typedefs)</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> typedefName = <span class="stringliteral">&quot;void&quot;</span>;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="keywordflow">if</span> (tdef != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; typedefName = tdef-&gt;getName().str();</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; }</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; typedefName &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">if</span> (typedefs.size() == 0)</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="DCHG_8cpp.html#a6673217180d3b6fb73c7c6387777f269">indent</a>(currIndent) &lt;&lt; <span class="stringliteral">&quot;(none)\n&quot;</span>;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; currIndent -= singleIndent;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; }</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; thickLine;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;Other stats\n&quot;</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; line;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;# Canonical types : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DCHGraph.html#a10225f56b21eb7f0870fdc433de3c393">canonicalTypes</a>.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;# structs : &quot;</span> &lt;&lt; numStructs &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;Largest struct : &quot;</span> &lt;&lt; largestStruct &lt;&lt; <span class="stringliteral">&quot; fields\n&quot;</span>;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; thickLine;</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
1711
1711
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a2dc488345cc3a5f37079952f638d8c2b"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a2dc488345cc3a5f37079952f638d8c2b">SVF::DCHGraph::diTypeToStr</a></div><div class="ttdeci">static std::string diTypeToStr(const DIType *)</div><div class="ttdoc">Returns a human-readable version of the DIType. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00958">DCHG.cpp:958</a></div></div>
1712
1712
  <div class="ttc" id="classSVF_1_1DCHGraph_html_ae9a0007299178912e2568dc7158d6824"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824">SVF::DCHGraph::getFieldTypes</a></div><div class="ttdeci">const std::vector&lt; const DIType * &gt; &amp; getFieldTypes(const DIType *base)</div><div class="ttdoc">Returns a vector of the types of all fields in base. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00327">DCHG.h:327</a></div></div>
1713
1713
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba9c05805c60fe04033bd9815968059e90">SVF::DCHEdge::INHERITANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00035">DCHG.h:35</a></div></div>
@@ -1725,12 +1725,12 @@ Additional Inherited Members</h2></td></tr>
1725
1725
  <div class="ttc" id="classSVF_1_1DCHEdge_html_a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77"><div class="ttname"><a href="classSVF_1_1DCHEdge.html#a48f01c4a02c4e278a1ab70b16efdef4ba3e807b4caeb170c5cd1e855ac1a92d77">SVF::DCHEdge::INSTANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00036">DCHG.h:36</a></div></div>
1726
1726
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
1727
1727
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00049">CPPUtil.h:49</a></div></div>
1728
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1728
1729
  <div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
1729
1730
  <div class="ttc" id="structSVF_1_1cppUtil_1_1DemangledName_html_a5cd207bce618521166e6fa235014b297"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">SVF::cppUtil::DemangledName::className</a></div><div class="ttdeci">std::string className</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8h_source.html#l00048">CPPUtil.h:48</a></div></div>
1730
1731
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
1731
1732
  <div class="ttc" id="classSVF_1_1DCHNode_html"><div class="ttname"><a href="classSVF_1_1DCHNode.html">SVF::DCHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00063">DCHG.h:63</a></div></div>
1732
1733
  <div class="ttc" id="namespaceSVF_1_1cppUtil_html_a1007c092efaeae41002efd91b803a7f6"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">SVF::cppUtil::demangle</a></div><div class="ttdeci">struct DemangledName demangle(const std::string &amp;name)</div></div>
1733
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1734
1734
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph&lt; DCHNode, DCHEdge &gt;::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00391">GenericGraph.h:391</a></div></div>
1735
1735
  <div class="ttc" id="classSVF_1_1DCHNode_html_ac77edc44c3c5acc185c27c018837d066"><div class="ttname"><a href="classSVF_1_1DCHNode.html#ac77edc44c3c5acc185c27c018837d066">SVF::DCHNode::getTypedefs</a></div><div class="ttdeci">const Set&lt; const DIDerivedType * &gt; &amp; getTypedefs(void) const</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00159">DCHG.h:159</a></div></div>
1736
1736
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
@@ -1748,9 +1748,9 @@ Additional Inherited Members</h2></td></tr>
1748
1748
  <td class="mlabels-left">
1749
1749
  <table class="memname">
1750
1750
  <tr>
1751
- <td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * DCHGraph::stripArray </td>
1751
+ <td class="memname">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * DCHGraph::stripArray </td>
1752
1752
  <td>(</td>
1753
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1753
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1754
1754
  <td class="paramname"><em>t</em></td><td>)</td>
1755
1755
  <td></td>
1756
1756
  </tr>
@@ -1765,8 +1765,8 @@ Additional Inherited Members</h2></td></tr>
1765
1765
  <p>Returns the DIType beneath all qualifiers and arrays. </p>
1766
1766
 
1767
1767
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00807">807</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1768
- <div class="fragment"><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (t-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *at = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(t);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a>(at-&gt;getBaseType());</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
1769
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1768
+ <div class="fragment"><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; t = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (t-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *at = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">stripArray</a>(at-&gt;getBaseType());</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
1769
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
1770
1770
  <div class="ttc" id="classSVF_1_1DCHGraph_html_a6c276e661e5e63c1c84387f84c8a62e4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a6c276e661e5e63c1c84387f84c8a62e4">SVF::DCHGraph::stripArray</a></div><div class="ttdeci">static const DIType * stripArray(const DIType *)</div><div class="ttdoc">Returns the DIType beneath all qualifiers and arrays. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00807">DCHG.cpp:807</a></div></div>
1771
1771
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1772
1772
  </div><!-- fragment -->
@@ -1782,9 +1782,9 @@ Additional Inherited Members</h2></td></tr>
1782
1782
  <td class="mlabels-left">
1783
1783
  <table class="memname">
1784
1784
  <tr>
1785
- <td class="memname">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> * DCHGraph::stripQualifiers </td>
1785
+ <td class="memname">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> * DCHGraph::stripQualifiers </td>
1786
1786
  <td>(</td>
1787
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1787
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1788
1788
  <td class="paramname"><em>t</em></td><td>)</td>
1789
1789
  <td></td>
1790
1790
  </tr>
@@ -1799,8 +1799,8 @@ Additional Inherited Members</h2></td></tr>
1799
1799
  <p>Returns the DIType beneath the qualifiers. Does not strip away "DW_TAG_members". </p>
1800
1800
 
1801
1801
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00754">754</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1802
- <div class="fragment"><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;{</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// nullptr means void.</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; || SVFUtil::isa&lt;DIBasicType&gt;(t)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; || SVFUtil::isa&lt;DISubroutineType&gt;(t))</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordtype">unsigned</span> tag = t-&gt;getTag();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// Verbose for clarity.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_const_type</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; || tag == dwarf::DW_TAG_atomic_type</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; || tag == dwarf::DW_TAG_volatile_type</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; || tag == dwarf::DW_TAG_restrict_type</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; || tag == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="comment">// Qualifier - get underlying type.</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *dt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a>&gt;(t);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; assert(t &amp;&amp; <span class="stringliteral">&quot;DCHG: expected DerivedType&quot;</span>);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; t = dt-&gt;getBaseType();</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_array_type</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; || tag == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; || tag == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; || tag == dwarf::DW_TAG_union_type</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; || tag == dwarf::DW_TAG_enumeration_type</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; || tag == dwarf::DW_TAG_member</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; || tag == dwarf::DW_TAG_pointer_type</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; || tag == dwarf::DW_TAG_ptr_to_member_type</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; || tag == dwarf::DW_TAG_reference_type</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; || tag == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="comment">// Hit a non-qualifier.</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_inheritance</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; || tag == dwarf::DW_TAG_friend)</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: unexpected tag when stripping qualifiers&quot;</span>);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: unhandled tag when stripping qualifiers&quot;</span>);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; }</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;}</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1803
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1802
+ <div class="fragment"><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;{</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// nullptr means void.</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (t == <span class="keyword">nullptr</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; || SVFUtil::isa&lt;DIBasicType&gt;(t)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; || SVFUtil::isa&lt;DISubroutineType&gt;(t))</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordtype">unsigned</span> tag = t-&gt;getTag();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// Verbose for clarity.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_const_type</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; || tag == dwarf::DW_TAG_atomic_type</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; || tag == dwarf::DW_TAG_volatile_type</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; || tag == dwarf::DW_TAG_restrict_type</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; || tag == dwarf::DW_TAG_typedef)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="comment">// Qualifier - get underlying type.</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *dt = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a>&gt;(t);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; assert(t &amp;&amp; <span class="stringliteral">&quot;DCHG: expected DerivedType&quot;</span>);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; t = dt-&gt;getBaseType();</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_array_type</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; || tag == dwarf::DW_TAG_class_type</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; || tag == dwarf::DW_TAG_structure_type</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; || tag == dwarf::DW_TAG_union_type</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; || tag == dwarf::DW_TAG_enumeration_type</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; || tag == dwarf::DW_TAG_member</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; || tag == dwarf::DW_TAG_pointer_type</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; || tag == dwarf::DW_TAG_ptr_to_member_type</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; || tag == dwarf::DW_TAG_reference_type</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; || tag == dwarf::DW_TAG_rvalue_reference_type)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="comment">// Hit a non-qualifier.</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( tag == dwarf::DW_TAG_inheritance</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; || tag == dwarf::DW_TAG_friend)</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: unexpected tag when stripping qualifiers&quot;</span>);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;DCHG: unhandled tag when stripping qualifiers&quot;</span>);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; }</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> t;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1803
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1804
1804
  </div><!-- fragment -->
1805
1805
  </div>
1806
1806
  </div>
@@ -1816,13 +1816,13 @@ Additional Inherited Members</h2></td></tr>
1816
1816
  <tr>
1817
1817
  <td class="memname">bool DCHGraph::teq </td>
1818
1818
  <td>(</td>
1819
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1819
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1820
1820
  <td class="paramname"><em>t1</em>, </td>
1821
1821
  </tr>
1822
1822
  <tr>
1823
1823
  <td class="paramkey"></td>
1824
1824
  <td></td>
1825
- <td class="paramtype">const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&#160;</td>
1825
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&#160;</td>
1826
1826
  <td class="paramname"><em>t2</em>&#160;</td>
1827
1827
  </tr>
1828
1828
  <tr>
@@ -1840,13 +1840,13 @@ Additional Inherited Members</h2></td></tr>
1840
1840
  <p>Returns true if t1 and t2 are equivalent, ignoring qualifiers. For equality... Tags always need to be equal. DIBasicType: shallow pointer equality. DIDerivedType: base types (teq). DICompositeType: shallow pointer equality. DISubroutineType: shallow pointer equality. </p>
1841
1841
 
1842
1842
  <p class="definition">Definition at line <a class="el" href="DCHG_8cpp_source.html#l00819">819</a> of file <a class="el" href="DCHG_8cpp_source.html">DCHG.cpp</a>.</p>
1843
- <div class="fragment"><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;{</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; t1 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t1);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; t2 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t2);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (t1 == t2)</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// Trivial case. Handles SubRoutineTypes too.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">if</span> (t1 == <span class="keyword">nullptr</span> || t2 == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// Since t1 != t2 and one of them is null, it is</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// impossible for them to be equal.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// Check if we need base type comparisons.</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DIBasicType&gt;(t1) &amp;&amp; SVFUtil::isa&lt;DIBasicType&gt;(t2))</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>&gt;(t1);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a> *b2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a>&gt;(t2);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordtype">unsigned</span> enc1 = b1-&gt;getEncoding();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordtype">unsigned</span> enc2 = b2-&gt;getEncoding();</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordtype">bool</span> okayEnc = ((enc1 == dwarf::DW_ATE_signed || enc1 == dwarf::DW_ATE_unsigned || enc1 == dwarf::DW_ATE_boolean)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; &amp;&amp; (enc2 == dwarf::DW_ATE_signed || enc2 == dwarf::DW_ATE_unsigned || enc2 == dwarf::DW_ATE_boolean))</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; ||</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; (enc1 == dwarf::DW_ATE_float &amp;&amp; enc2 == dwarf::DW_ATE_float)</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; ||</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; ((enc1 == dwarf::DW_ATE_signed_char || enc1 == dwarf::DW_ATE_unsigned_char)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; &amp;&amp;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; (enc2 == dwarf::DW_ATE_signed_char || enc2 == dwarf::DW_ATE_unsigned_char));</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">if</span> (!okayEnc) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="comment">// Now we have split integers, floats, and chars, ignoring signedness.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">return</span> t1-&gt;getSizeInBits() == t2-&gt;getSizeInBits()</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; &amp;&amp; t1-&gt;getAlignInBits() == t2-&gt;getAlignInBits();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">// Check, do we need to compare base types?</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// This makes pointers, references, and arrays equivalent.</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="comment">// Will handle member types.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">if</span> ((SVFUtil::isa&lt;DIDerivedType&gt;(t1) || t1-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; &amp;&amp; (SVFUtil::isa&lt;DIDerivedType&gt;(t2) || t2-&gt;getTag() == dwarf::DW_TAG_array_type))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *base1, *base2;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="comment">// Set base1.</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *d1 = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t1))</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; base1 = d1-&gt;getBaseType();</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *c1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(t1);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; assert(c1 &amp;&amp; <span class="stringliteral">&quot;teq: bad cast for array type&quot;</span>);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; base1 = c1-&gt;getBaseType();</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="comment">// Set base2.</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a> *d2 = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t2))</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; base2 = d2-&gt;getBaseType();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *c2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(t2);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; assert(c2 &amp;&amp; <span class="stringliteral">&quot;teq: bad cast for array type&quot;</span>);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; base2 = c2-&gt;getBaseType();</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">// For ptr-to-member, there is some imprecision (but soundness) in</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="comment">// that we don&#39;t check the class type.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(base1, base2);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DICompositeType&gt;(t1) &amp;&amp; SVFUtil::isa&lt;DICompositeType&gt;(t2))</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; {</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(t1);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a> *ct2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a>&gt;(t2);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() != ct2-&gt;getTag()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="comment">// Treat all enums the same.</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="comment">// C++ classes? Check mangled name.</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">return</span> ct1-&gt;getIdentifier() == ct2-&gt;getIdentifier();</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">// Either union or struct, simply test all fields are equal.</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// Seems like it is enough to check it was defined in the same place.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">// The elements sometimes differ but are referring to the same fields.</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">return</span> ct1-&gt;getName() == ct2-&gt;getName()</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; &amp;&amp; ct1-&gt;getFile() == ct2-&gt;getFile()</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; &amp;&amp; ct1-&gt;getLine() == ct2-&gt;getLine();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">// They were not equal base types (discounting signedness), nor were they</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="comment">// &quot;equal&quot; pointers/references/arrays, nor were they the structurally equivalent,</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">// nor were they completely equal.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
1844
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a8e2336cbb1db8aa093afbb3290d5ba05"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
1845
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a051267a17436de89e185c847afbb8db5"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a051267a17436de89e185c847afbb8db5">DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
1843
+ <div class="fragment"><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;{</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; t1 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t1);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; t2 = <a class="code" href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">stripQualifiers</a>(t2);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (t1 == t2)</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// Trivial case. Handles SubRoutineTypes too.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">if</span> (t1 == <span class="keyword">nullptr</span> || t2 == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// Since t1 != t2 and one of them is null, it is</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// impossible for them to be equal.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// Check if we need base type comparisons.</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DIBasicType&gt;(t1) &amp;&amp; SVFUtil::isa&lt;DIBasicType&gt;(t2))</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *b1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a>&gt;(t1);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a> *b2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">DIBasicType</a>&gt;(t2);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordtype">unsigned</span> enc1 = b1-&gt;getEncoding();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordtype">unsigned</span> enc2 = b2-&gt;getEncoding();</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordtype">bool</span> okayEnc = ((enc1 == dwarf::DW_ATE_signed || enc1 == dwarf::DW_ATE_unsigned || enc1 == dwarf::DW_ATE_boolean)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; &amp;&amp; (enc2 == dwarf::DW_ATE_signed || enc2 == dwarf::DW_ATE_unsigned || enc2 == dwarf::DW_ATE_boolean))</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; ||</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; (enc1 == dwarf::DW_ATE_float &amp;&amp; enc2 == dwarf::DW_ATE_float)</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; ||</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; ((enc1 == dwarf::DW_ATE_signed_char || enc1 == dwarf::DW_ATE_unsigned_char)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; &amp;&amp;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; (enc2 == dwarf::DW_ATE_signed_char || enc2 == dwarf::DW_ATE_unsigned_char));</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">if</span> (!okayEnc) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="comment">// Now we have split integers, floats, and chars, ignoring signedness.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">return</span> t1-&gt;getSizeInBits() == t2-&gt;getSizeInBits()</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; &amp;&amp; t1-&gt;getAlignInBits() == t2-&gt;getAlignInBits();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">// Check, do we need to compare base types?</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// This makes pointers, references, and arrays equivalent.</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="comment">// Will handle member types.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">if</span> ((SVFUtil::isa&lt;DIDerivedType&gt;(t1) || t1-&gt;getTag() == dwarf::DW_TAG_array_type)</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; &amp;&amp; (SVFUtil::isa&lt;DIDerivedType&gt;(t2) || t2-&gt;getTag() == dwarf::DW_TAG_array_type))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *base1, *base2;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="comment">// Set base1.</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *d1 = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t1))</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; base1 = d1-&gt;getBaseType();</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *c1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t1);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; assert(c1 &amp;&amp; <span class="stringliteral">&quot;teq: bad cast for array type&quot;</span>);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; base1 = c1-&gt;getBaseType();</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="comment">// Set base2.</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">DIDerivedType</a> *d2 = SVFUtil::dyn_cast&lt;DIDerivedType&gt;(t2))</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; base2 = d2-&gt;getBaseType();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *c2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t2);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; assert(c2 &amp;&amp; <span class="stringliteral">&quot;teq: bad cast for array type&quot;</span>);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; base2 = c2-&gt;getBaseType();</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">// For ptr-to-member, there is some imprecision (but soundness) in</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="comment">// that we don&#39;t check the class type.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">teq</a>(base1, base2);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;DICompositeType&gt;(t1) &amp;&amp; SVFUtil::isa&lt;DICompositeType&gt;(t2))</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; {</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct1 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t1);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a> *ct2 = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">DICompositeType</a>&gt;(t2);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() != ct2-&gt;getTag()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="comment">// Treat all enums the same.</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() == dwarf::DW_TAG_enumeration_type)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="comment">// C++ classes? Check mangled name.</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (ct1-&gt;getTag() == dwarf::DW_TAG_class_type)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">return</span> ct1-&gt;getIdentifier() == ct2-&gt;getIdentifier();</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">// Either union or struct, simply test all fields are equal.</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// Seems like it is enough to check it was defined in the same place.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">// The elements sometimes differ but are referring to the same fields.</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">return</span> ct1-&gt;getName() == ct2-&gt;getName()</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; &amp;&amp; ct1-&gt;getFile() == ct2-&gt;getFile()</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; &amp;&amp; ct1-&gt;getLine() == ct2-&gt;getLine();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">// They were not equal base types (discounting signedness), nor were they</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="comment">// &quot;equal&quot; pointers/references/arrays, nor were they the structurally equivalent,</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">// nor were they completely equal.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;}</div><div class="ttc" id="classSVF_1_1DCHGraph_html_a175ed6ad0c9b23d5617f755ab96c76c4"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4">SVF::DCHGraph::stripQualifiers</a></div><div class="ttdeci">static const DIType * stripQualifiers(const DIType *)</div><div class="ttdoc">Returns the DIType beneath the qualifiers. Does not strip away &quot;DW_TAG_members&quot;. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00754">DCHG.cpp:754</a></div></div>
1844
+ <div class="ttc" id="namespaceSVF_html_aded9b991c77acc5284ccead0739e84f1"><div class="ttname"><a href="namespaceSVF.html#aded9b991c77acc5284ccead0739e84f1">SVF::DICompositeType</a></div><div class="ttdeci">llvm::DICompositeType DICompositeType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
1845
+ <div class="ttc" id="namespaceSVF_html_a852e75c562139237fcc754c7461533e6"><div class="ttname"><a href="namespaceSVF.html#a852e75c562139237fcc754c7461533e6">SVF::DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1846
1846
  <div class="ttc" id="classSVF_1_1DCHGraph_html_acb76ab20da1bfbec00f63d08e48cbddd"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#acb76ab20da1bfbec00f63d08e48cbddd">SVF::DCHGraph::teq</a></div><div class="ttdeci">static bool teq(const DIType *t1, const DIType *t2)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8cpp_source.html#l00819">DCHG.cpp:819</a></div></div>
1847
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a5f7968b31d2b29b589360067cf48e625"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a5f7968b31d2b29b589360067cf48e625">DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
1847
+ <div class="ttc" id="namespaceSVF_html_ada0513be7e25325325ccc9183aeca278"><div class="ttname"><a href="namespaceSVF.html#ada0513be7e25325325ccc9183aeca278">SVF::DIBasicType</a></div><div class="ttdeci">llvm::DIBasicType DIBasicType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
1848
1848
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
1849
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a39d93c8a98813f35c91375d1d40ae953"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a39d93c8a98813f35c91375d1d40ae953">DIDerivedType</a></div><div class="ttdeci">llvm::DIDerivedType DIDerivedType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
1849
+ <div class="ttc" id="namespaceSVF_html_ad127b0ad478640ede3d426e3a58d2632"><div class="ttname"><a href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">SVF::DIType</a></div><div class="ttdeci">llvm::DIType DIType</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
1850
1850
  </div><!-- fragment -->
1851
1851
  </div>
1852
1852
  </div>
@@ -1861,7 +1861,7 @@ Additional Inherited Members</h2></td></tr>
1861
1861
  <td class="mlabels-left">
1862
1862
  <table class="memname">
1863
1863
  <tr>
1864
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt; SVF::DCHGraph::canonicalTypeMap</td>
1864
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt; SVF::DCHGraph::canonicalTypeMap</td>
1865
1865
  </tr>
1866
1866
  </table>
1867
1867
  </td>
@@ -1887,7 +1887,7 @@ Additional Inherited Members</h2></td></tr>
1887
1887
  <td class="mlabels-left">
1888
1888
  <table class="memname">
1889
1889
  <tr>
1890
- <td class="memname"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt; SVF::DCHGraph::canonicalTypes</td>
1890
+ <td class="memname"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt; SVF::DCHGraph::canonicalTypes</td>
1891
1891
  </tr>
1892
1892
  </table>
1893
1893
  </td>
@@ -1913,7 +1913,7 @@ Additional Inherited Members</h2></td></tr>
1913
1913
  <td class="mlabels-left">
1914
1914
  <table class="memname">
1915
1915
  <tr>
1916
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a>&gt; SVF::DCHGraph::chaFFMap</td>
1916
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a>&gt; SVF::DCHGraph::chaFFMap</td>
1917
1917
  </tr>
1918
1918
  </table>
1919
1919
  </td>
@@ -1939,7 +1939,7 @@ Additional Inherited Members</h2></td></tr>
1939
1939
  <td class="mlabels-left">
1940
1940
  <table class="memname">
1941
1941
  <tr>
1942
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a>&gt; SVF::DCHGraph::chaMap</td>
1942
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a>&gt; SVF::DCHGraph::chaMap</td>
1943
1943
  </tr>
1944
1944
  </table>
1945
1945
  </td>
@@ -1965,7 +1965,7 @@ Additional Inherited Members</h2></td></tr>
1965
1965
  <td class="mlabels-left">
1966
1966
  <table class="memname">
1967
1967
  <tr>
1968
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt; &gt; SVF::DCHGraph::containingAggs</td>
1968
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt; &gt; SVF::DCHGraph::containingAggs</td>
1969
1969
  </tr>
1970
1970
  </table>
1971
1971
  </td>
@@ -2017,7 +2017,7 @@ Additional Inherited Members</h2></td></tr>
2017
2017
  <td class="mlabels-left">
2018
2018
  <table class="memname">
2019
2019
  <tr>
2020
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *&gt; SVF::DCHGraph::diTypeToNodeMap</td>
2020
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="classSVF_1_1DCHNode.html">DCHNode</a> *&gt; SVF::DCHGraph::diTypeToNodeMap</td>
2021
2021
  </tr>
2022
2022
  </table>
2023
2023
  </td>
@@ -2069,7 +2069,7 @@ Additional Inherited Members</h2></td></tr>
2069
2069
  <td class="mlabels-left">
2070
2070
  <table class="memname">
2071
2071
  <tr>
2072
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, std::vector&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt; &gt; SVF::DCHGraph::fieldTypes</td>
2072
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, std::vector&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt; &gt; SVF::DCHGraph::fieldTypes</td>
2073
2073
  </tr>
2074
2074
  </table>
2075
2075
  </td>
@@ -2147,7 +2147,7 @@ Additional Inherited Members</h2></td></tr>
2147
2147
  <td class="mlabels-left">
2148
2148
  <table class="memname">
2149
2149
  <tr>
2150
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *, <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a>&gt; SVF::DCHGraph::vtblCHAMap</td>
2150
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *, <a class="el" href="namespaceSVF.html#a53511f619c06836ee85acf12153810e2">VTableSet</a>&gt; SVF::DCHGraph::vtblCHAMap</td>
2151
2151
  </tr>
2152
2152
  </table>
2153
2153
  </td>
@@ -2173,7 +2173,7 @@ Additional Inherited Members</h2></td></tr>
2173
2173
  <td class="mlabels-left">
2174
2174
  <table class="memname">
2175
2175
  <tr>
2176
- <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="SVF-FE_2BasicTypes_8h.html#a8e2336cbb1db8aa093afbb3290d5ba05">DIType</a> *&gt; SVF::DCHGraph::vtblToTypeMap</td>
2176
+ <td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;const <a class="el" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a> *, const <a class="el" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *&gt; SVF::DCHGraph::vtblToTypeMap</td>
2177
2177
  </tr>
2178
2178
  </table>
2179
2179
  </td>