svf-tools 1.0.404 → 1.0.405

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +2 -2
  3. package/SVF-doxygen/html/html/CHG_8h_source.html +5 -6
  4. package/SVF-doxygen/html/html/CPPUtil_8cpp.html +3 -3
  5. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/html/CSC_8cpp_source.html +4 -4
  7. package/SVF-doxygen/html/html/CSC_8h_source.html +3 -3
  8. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -2
  9. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +4 -4
  10. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  11. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  12. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +5 -5
  14. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
  15. package/SVF-doxygen/html/html/ICFG_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  17. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -2
  18. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +5 -5
  19. package/SVF-doxygen/html/html/LocationSet_8h_source.html +7 -7
  20. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  21. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +3 -3
  24. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -5
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +5 -5
  26. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +4 -4
  27. package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
  28. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +6 -6
  29. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +5 -5
  30. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +1 -2
  31. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -3
  33. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  34. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  35. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  36. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +10 -10
  38. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +2 -2
  39. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +16 -16
  40. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +2 -2
  41. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
  42. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +4 -4
  43. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +24 -24
  44. package/SVF-doxygen/html/html/classSVF_1_1CSC-members.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +11 -11
  46. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +3 -3
  48. package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +1 -2
  49. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +2 -2
  50. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +12 -12
  52. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +2 -2
  53. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +15 -15
  54. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +11 -11
  56. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
  57. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
  58. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  59. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
  61. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +2 -2
  62. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +3 -3
  63. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +23 -23
  64. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +5 -5
  65. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +48 -48
  66. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +8 -8
  68. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
  69. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile-members.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +8 -8
  71. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +16 -16
  73. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +2 -2
  74. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +30 -30
  75. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  76. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +9 -9
  78. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  79. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  80. package/SVF-doxygen/html/html/functions_a.html +6 -6
  81. package/SVF-doxygen/html/html/functions_b.html +1 -1
  82. package/SVF-doxygen/html/html/functions_f.html +2 -2
  83. package/SVF-doxygen/html/html/functions_func.html +6 -6
  84. package/SVF-doxygen/html/html/functions_func_f.html +1 -1
  85. package/SVF-doxygen/html/html/functions_func_g.html +9 -9
  86. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  87. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  88. package/SVF-doxygen/html/html/functions_func_v.html +1 -1
  89. package/SVF-doxygen/html/html/functions_g.html +9 -9
  90. package/SVF-doxygen/html/html/functions_i.html +1 -1
  91. package/SVF-doxygen/html/html/functions_l.html +1 -1
  92. package/SVF-doxygen/html/html/functions_n.html +1 -1
  93. package/SVF-doxygen/html/html/functions_s.html +3 -3
  94. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  95. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  96. package/SVF-doxygen/html/html/functions_v.html +3 -3
  97. package/SVF-doxygen/html/html/functions_vars_b.html +1 -1
  98. package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
  99. package/SVF-doxygen/html/html/functions_vars_v.html +2 -2
  100. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +2 -2
  101. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +2 -2
  102. package/SVF-doxygen/html/html/search/all_1.js +4 -4
  103. package/SVF-doxygen/html/html/search/all_13.js +3 -3
  104. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  105. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  106. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  107. package/SVF-doxygen/html/html/search/all_7.js +5 -5
  108. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  109. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  110. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  111. package/SVF-doxygen/html/html/search/functions_0.js +4 -4
  112. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  113. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  114. package/SVF-doxygen/html/html/search/functions_5.js +1 -1
  115. package/SVF-doxygen/html/html/search/functions_6.js +5 -5
  116. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  117. package/SVF-doxygen/html/html/search/functions_a.js +1 -1
  118. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  119. package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
  120. package/SVF-doxygen/html/html/search/variables_16.js +2 -2
  121. package/SVF-doxygen/html/html/search/variables_2.js +1 -1
  122. package/SVF-doxygen/html/html/search/variables_6.js +1 -1
  123. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +2 -2
  124. package/include/Graphs/CHG.h +6 -6
  125. package/include/Graphs/ConsGEdge.h +1 -1
  126. package/include/Graphs/ICFG.h +1 -1
  127. package/include/Graphs/ICFGEdge.h +3 -3
  128. package/include/MemoryModel/LocationSet.h +5 -5
  129. package/include/MemoryModel/PAGBuilderFromFile.h +1 -1
  130. package/include/MemoryModel/SVFIR.h +1 -1
  131. package/include/MemoryModel/SVFStatements.h +4 -4
  132. package/include/MemoryModel/SVFVariables.h +2 -2
  133. package/include/MemoryModel/SymbolTableInfo.h +1 -1
  134. package/include/SVF-FE/SVFIRBuilder.h +2 -2
  135. package/include/Util/IRAnnotator.h +2 -2
  136. package/include/WPA/AndersenSFR.h +1 -1
  137. package/include/WPA/CSC.h +1 -1
  138. package/lib/Graphs/ICFG.cpp +1 -1
  139. package/lib/MTA/MHP.cpp +2 -2
  140. package/lib/MemoryModel/LocationSet.cpp +3 -3
  141. package/lib/MemoryModel/PAGBuilderFromFile.cpp +2 -2
  142. package/lib/MemoryModel/SVFIR.cpp +1 -1
  143. package/lib/MemoryModel/SymbolTableInfo.cpp +3 -3
  144. package/lib/SVF-FE/CPPUtil.cpp +4 -4
  145. package/lib/SVF-FE/ICFGBuilder.cpp +1 -1
  146. package/lib/SVF-FE/LLVMUtil.cpp +1 -1
  147. package/lib/SVF-FE/SVFIRBuilder.cpp +9 -9
  148. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
  149. package/lib/Util/Conditions.cpp +1 -1
  150. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  151. package/lib/WPA/AndersenSFR.cpp +6 -6
  152. package/lib/WPA/CSC.cpp +5 -5
  153. package/lib/WPA/TypeAnalysis.cpp +3 -3
  154. package/package.json +1 -1
@@ -166,7 +166,7 @@ $(function() {
166
166
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Andersen.html#a6804284abb4b63f44eefdaf044a301f7">enableDiff</a>() const</td><td class="entry"><a class="el" href="classSVF_1_1Andersen.html">SVF::Andersen</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
167
167
  <tr><td class="entry"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(const PointsTo &amp;pts, PointsTo &amp;expandedPts)</td><td class="entry"><a class="el" href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
168
168
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#aa6a7186152037452599406a74b05d0e1">expandFIObjs</a>(const NodeBS &amp;pts, NodeBS &amp;expandedPts)</td><td class="entry"><a class="el" href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
169
- <tr><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html#a7995774ea0e6434a8f4f2b243c0064c2">fieldExpand</a>(NodeSet &amp;initials, s64_t offset, NodeBS &amp;strides, PointsTo &amp;expandPts)</td><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html">SVF::AndersenSFR</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
169
+ <tr><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf">fieldExpand</a>(NodeSet &amp;initials, s32_t offset, NodeBS &amp;strides, PointsTo &amp;expandPts)</td><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html">SVF::AndersenSFR</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
170
170
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html#a52aa0c2a02a0db6700c4a7a8819d0a5d">FieldReps</a> typedef</td><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html">SVF::AndersenSFR</a></td><td class="entry"></td></tr>
171
171
  <tr><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html#a99337c429aebe9046c65068b44eff7cc">fieldReps</a></td><td class="entry"><a class="el" href="classSVF_1_1AndersenSFR.html">SVF::AndersenSFR</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
172
172
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abe1d8104c77bfe4bbc201a64410c7f61">FieldS_DDA</a> enum value</td><td class="entry"><a class="el" href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></td><td class="entry"></td></tr>
@@ -509,8 +509,8 @@ Protected Member Functions</h2></td></tr>
509
509
  <tr class="separator:a3b255068b3ea53041af94fd373a53bd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
510
510
  <tr class="memitem:a7bb1bd307c5db4d732e51af810c5ad75"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AndersenSFR.html#a7bb1bd307c5db4d732e51af810c5ad75">PWCDetect</a> ()</td></tr>
511
511
  <tr class="separator:a7bb1bd307c5db4d732e51af810c5ad75"><td class="memSeparator" colspan="2">&#160;</td></tr>
512
- <tr class="memitem:a7995774ea0e6434a8f4f2b243c0064c2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AndersenSFR.html#a7995774ea0e6434a8f4f2b243c0064c2">fieldExpand</a> (<a class="el" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> &amp;initials, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> offset, <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;strides, <a class="el" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;expandPts)</td></tr>
513
- <tr class="separator:a7995774ea0e6434a8f4f2b243c0064c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
512
+ <tr class="memitem:aa768e5cd0a762d17e2ec2baaad0486bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf">fieldExpand</a> (<a class="el" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> &amp;initials, <a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset, <a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;strides, <a class="el" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;expandPts)</td></tr>
513
+ <tr class="separator:aa768e5cd0a762d17e2ec2baaad0486bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
514
514
  <tr class="memitem:a8a3dc46d1a8a6996e048956551fec566"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AndersenSFR.html#a8a3dc46d1a8a6996e048956551fec566">processGepPts</a> (<a class="el" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts, const <a class="el" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a> *edge)</td></tr>
515
515
  <tr class="separator:a8a3dc46d1a8a6996e048956551fec566"><td class="memSeparator" colspan="2">&#160;</td></tr>
516
516
  <tr class="memitem:ac5f406db5610347564fceff4d36f6a6f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AndersenSFR.html#ac5f406db5610347564fceff4d36f6a6f">mergeSrcToTgt</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</td></tr>
@@ -995,8 +995,8 @@ Additional Inherited Members</h2></td></tr>
995
995
  </div><!-- fragment -->
996
996
  </div>
997
997
  </div>
998
- <a id="a7995774ea0e6434a8f4f2b243c0064c2"></a>
999
- <h2 class="memtitle"><span class="permalink"><a href="#a7995774ea0e6434a8f4f2b243c0064c2">&#9670;&nbsp;</a></span>fieldExpand()</h2>
998
+ <a id="aa768e5cd0a762d17e2ec2baaad0486bf"></a>
999
+ <h2 class="memtitle"><span class="permalink"><a href="#aa768e5cd0a762d17e2ec2baaad0486bf">&#9670;&nbsp;</a></span>fieldExpand()</h2>
1000
1000
 
1001
1001
  <div class="memitem">
1002
1002
  <div class="memproto">
@@ -1013,7 +1013,7 @@ Additional Inherited Members</h2></td></tr>
1013
1013
  <tr>
1014
1014
  <td class="paramkey"></td>
1015
1015
  <td></td>
1016
- <td class="paramtype"><a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>&#160;</td>
1016
+ <td class="paramtype"><a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>&#160;</td>
1017
1017
  <td class="paramname"><em>offset</em>, </td>
1018
1018
  </tr>
1019
1019
  <tr>
@@ -1042,11 +1042,12 @@ Additional Inherited Members</h2></td></tr>
1042
1042
  </div><div class="memdoc">
1043
1043
 
1044
1044
  <p class="definition">Definition at line <a class="el" href="AndersenSFR_8cpp_source.html#l00119">119</a> of file <a class="el" href="AndersenSFR_8cpp_source.html">AndersenSFR.cpp</a>.</p>
1045
- <div class="fragment"><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">numOfFieldExpand</a>++;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">while</span> (!initials.empty())</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> init = *initials.begin();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; initials.erase(init);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(init))</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(init);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* initPN = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(init);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(init);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxLimit = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> initOffset;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(initPN))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; initOffset = gepNode-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FIObjVar&gt;(initPN) || SVFUtil::isa&lt;DummyObjVar&gt;(initPN))</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; initOffset = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Not an object node!!&quot;</span>);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;s64_t&gt;</a> offsets;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; offsets.insert(offset);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// calculate offsets</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">bool</span> loopFlag = <span class="keyword">true</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">while</span> (loopFlag)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; loopFlag = <span class="keyword">false</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _f : offsets)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _s : strides)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> _f1 = _f + _s;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; loopFlag = (offsets.find(_f1) == offsets.end()) &amp;&amp; (initOffset + _f1 &lt; maxLimit);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (loopFlag)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; offsets.insert(_f1);</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; }</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">// get gep objs</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> _f : offsets)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a">getGepObjVar</a>(init, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(_f));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; initials.erase(gepId); <span class="comment">// gep id in initials should be removed to avoid redundant derivation</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(gepId);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</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;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a8ba74f82c1e796f2888ba34bc8355ce9"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">SVF::ConstraintGraph::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00309">ConsG.h:309</a></div></div>
1045
+ <div class="fragment"><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">numOfFieldExpand</a>++;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">while</span> (!initials.empty())</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> init = *initials.begin();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; initials.erase(init);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(init))</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(init);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* initPN = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(init);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(init);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxLimit = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> initOffset;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(initPN))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; initOffset = gepNode-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FIObjVar&gt;(initPN) || SVFUtil::isa&lt;DummyObjVar&gt;(initPN))</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; initOffset = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Not an object node!!&quot;</span>);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;s32_t&gt;</a> offsets;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; offsets.insert(offset);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// calculate offsets</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">bool</span> loopFlag = <span class="keyword">true</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">while</span> (loopFlag)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; loopFlag = <span class="keyword">false</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _f : offsets)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _s : strides)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> _f1 = _f + _s;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; loopFlag = (offsets.find(_f1) == offsets.end()) &amp;&amp; (initOffset + _f1 &lt; maxLimit);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (loopFlag)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; offsets.insert(_f1);</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; }</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">// get gep objs</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> _f : offsets)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a">getGepObjVar</a>(init, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(_f));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; initials.erase(gepId); <span class="comment">// gep id in initials should be removed to avoid redundant derivation</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(gepId);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</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;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a8ba74f82c1e796f2888ba34bc8355ce9"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">SVF::ConstraintGraph::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00309">ConsG.h:309</a></div></div>
1046
1046
  <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00407">SymbolTableInfo.h:407</a></div></div>
1047
1047
  <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#l00018">MTAResultValidator.h:18</a></div></div>
1048
1048
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1049
1049
  <div class="ttc" id="classSVF_1_1SVFIR_html_af76a55c3b8255a81a566bdce35ffc749"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">SVF::SVFIR::getBaseObj</a></div><div class="ttdeci">const MemObj * getBaseObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00414">SVFIR.h:414</a></div></div>
1050
+ <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
1050
1051
  <div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
1051
1052
  <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#l00077">SVFBasicTypes.h:77</a></div></div>
1052
1053
  <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#l00097">SVFBasicTypes.h:97</a></div></div>
@@ -1058,7 +1059,6 @@ Additional Inherited Members</h2></td></tr>
1058
1059
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00048">LocationSet.h:48</a></div></div>
1059
1060
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
1060
1061
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00143">Andersen.h:143</a></div></div>
1061
- <div class="ttc" id="namespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00080">SVFBasicTypes.h:80</a></div></div>
1062
1062
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::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#l00387">GenericGraph.h:387</a></div></div>
1063
1063
  </div><!-- fragment -->
1064
1064
  </div>
@@ -1190,21 +1190,21 @@ Additional Inherited Members</h2></td></tr>
1190
1190
  <p>Propagate point-to set via a gep edge, using SFR </p>
1191
1191
 
1192
1192
  <p class="definition">Definition at line <a class="el" href="AndersenSFR_8cpp_source.html#l00083">83</a> of file <a class="el" href="AndersenSFR_8cpp_source.html">AndersenSFR.cpp</a>.</p>
1193
- <div class="fragment"><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; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = dst-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (!dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>.empty() &amp;&amp; SVFUtil::isa&lt;NormalGepCGEdge&gt;(edge)) <span class="comment">// dst is in pwc</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> srcInits = pts - <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(dstId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (!srcInits.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> sortSrcInits;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : srcInits)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; sortSrcInits.insert(ptd);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> offset = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>&gt;(edge)-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classSVF_1_1AndersenSFR.html#a7995774ea0e6434a8f4f2b243c0064c2">fieldExpand</a>(sortSrcInits, offset, dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>, tmpDstPts);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(dstId, tmpDstPts))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dstId);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">Andersen::processGepPts</a>(pts, edge);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00162">WPASolver.h:162</a></div></div>
1193
+ <div class="fragment"><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; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = dst-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (!dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>.empty() &amp;&amp; SVFUtil::isa&lt;NormalGepCGEdge&gt;(edge)) <span class="comment">// dst is in pwc</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> srcInits = pts - <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(dstId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (!srcInits.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> sortSrcInits;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : srcInits)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; sortSrcInits.insert(ptd);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>&gt;(edge)-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf">fieldExpand</a>(sortSrcInits, offset, dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>, tmpDstPts);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(dstId, tmpDstPts))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dstId);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">Andersen::processGepPts</a>(pts, edge);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00162">WPASolver.h:162</a></div></div>
1194
1194
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00216">Andersen.h:216</a></div></div>
1195
1195
  <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00116">SVFBasicTypes.h:116</a></div></div>
1196
1196
  <div class="ttc" id="classSVF_1_1Andersen_html_ab7dadfd4d810be4863f03ed996b3b3c4"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">SVF::Andersen::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00220">Andersen.h:220</a></div></div>
1197
1197
  <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#l00018">MTAResultValidator.h:18</a></div></div>
1198
1198
  <div class="ttc" id="classSVF_1_1NormalGepCGEdge_html"><div class="ttname"><a href="classSVF_1_1NormalGepCGEdge.html">SVF::NormalGepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00265">ConsGEdge.h:265</a></div></div>
1199
+ <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
1200
+ <div class="ttc" id="classSVF_1_1AndersenSFR_html_aa768e5cd0a762d17e2ec2baaad0486bf"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf">SVF::AndersenSFR::fieldExpand</a></div><div class="ttdeci">void fieldExpand(NodeSet &amp;initials, s32_t offset, NodeBS &amp;strides, PointsTo &amp;expandPts)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSFR_8cpp_source.html#l00119">AndersenSFR.cpp:119</a></div></div>
1199
1201
  <div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
1200
1202
  <div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
1201
1203
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a873ba0c14dc57bd603c4a6b4d73e4278"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">SVF::ConstraintNode::strides</a></div><div class="ttdeci">NodeBS strides</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00078">ConsGNode.h:78</a></div></div>
1202
1204
  <div class="ttc" id="classSVF_1_1ConstraintNode_html"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00040">ConsGNode.h:40</a></div></div>
1203
1205
  <div class="ttc" id="classSVF_1_1Andersen_html_ac6b1efcaadfed48c226701ecf6bac55e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">SVF::Andersen::processGepPts</a></div><div class="ttdeci">virtual bool processGepPts(const PointsTo &amp;pts, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00389">Andersen.cpp:389</a></div></div>
1204
1206
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
1205
- <div class="ttc" id="classSVF_1_1AndersenSFR_html_a7995774ea0e6434a8f4f2b243c0064c2"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a7995774ea0e6434a8f4f2b243c0064c2">SVF::AndersenSFR::fieldExpand</a></div><div class="ttdeci">void fieldExpand(NodeSet &amp;initials, s64_t offset, NodeBS &amp;strides, PointsTo &amp;expandPts)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSFR_8cpp_source.html#l00119">AndersenSFR.cpp:119</a></div></div>
1206
1207
  <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>
1207
- <div class="ttc" id="namespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00080">SVFBasicTypes.h:80</a></div></div>
1208
1208
  <div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
1209
1209
  </div><!-- fragment -->
1210
1210
  </div>
@@ -107,7 +107,7 @@ $(function() {
107
107
  <tr><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#af772610e425e2a67f7152bd8d53bf3c5">getSrcNode</a>()</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
108
108
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::SVFStmt::getSrcNode</a>() const</td><td class="entry"><a class="el" href="classSVF_1_1GenericEdge.html">SVF::GenericEdge&lt; NodeTy &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
109
109
  <tr><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(u32_t i) const</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
110
- <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a7d2fa666602e0444d3e019563c0e7556">getSuccessorCondValue</a>(u32_t i) const</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
110
+ <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a0881e8decb0bfe2066995d9d729d1aad">getSuccessorCondValue</a>(u32_t i) const</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
111
111
  <tr><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a93040c884df211ac62d53ceafdd9c4dd">getSuccessors</a>() const</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
112
112
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html#a65ee8b43a3a4999eb112a197d1a9f882">getValue</a>() const</td><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
113
113
  <tr><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a71e7e95f095a937c900d049991312901">isConditional</a>() const</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"></td></tr>
@@ -131,7 +131,7 @@ $(function() {
131
131
  <tr><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html#adb92a92f5c878576dff26cb38eab8c8c">setICFGNode</a>(ICFGNode *node)</td><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
132
132
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(const Value *val)</td><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
133
133
  <tr><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">Store</a> enum value</td><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td><td class="entry"></td></tr>
134
- <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a> typedef</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"></td></tr>
134
+ <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a> typedef</td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"></td></tr>
135
135
  <tr><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html#a40854cd95fbae16ef8e370255d0e3cf5">successors</a></td><td class="entry"><a class="el" href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
136
136
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html#a2ab7295fe26d2c6d2d5c9fd027f96a47">SVFStmt</a>(SVFVar *s, SVFVar *d, GEdgeFlag k, bool real=true)</td><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td><td class="entry"></td></tr>
137
137
  <tr><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmtSetTy</a> typedef</td><td class="entry"><a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td><td class="entry"></td></tr>
@@ -87,8 +87,8 @@ Inheritance diagram for SVF::BranchStmt:</div>
87
87
  <table class="memberdecls">
88
88
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
89
89
  Public Types</h2></td></tr>
90
- <tr class="memitem:ac486fb3a118e6153892b998b0ef46890"><td class="memItemLeft" align="right" valign="top">typedef std::vector&lt; std::pair&lt; const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a></td></tr>
91
- <tr class="separator:ac486fb3a118e6153892b998b0ef46890"><td class="memSeparator" colspan="2">&#160;</td></tr>
90
+ <tr class="memitem:a6a0e64824777f04be4c169125dd4f666"><td class="memItemLeft" align="right" valign="top">typedef std::vector&lt; std::pair&lt; const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *, <a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a></td></tr>
91
+ <tr class="separator:a6a0e64824777f04be4c169125dd4f666"><td class="memSeparator" colspan="2">&#160;</td></tr>
92
92
  <tr class="inherit_header pub_types_classSVF_1_1SVFStmt"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classSVF_1_1SVFStmt')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td></tr>
93
93
  <tr class="memitem:a0ab8621e75e75f03425c323b3ed62ce9 inherit pub_types_classSVF_1_1SVFStmt"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">PEDGEK</a> { <br />
94
94
  &#160;&#160;<a class="el" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">Addr</a>,
@@ -134,7 +134,7 @@ Public Types</h2></td></tr>
134
134
  </table><table class="memberdecls">
135
135
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
136
136
  Public Member Functions</h2></td></tr>
137
- <tr class="memitem:a5e102d5c08b7121efc87b99651f0b5d2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a5e102d5c08b7121efc87b99651f0b5d2">BranchStmt</a> (<a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *inst, <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *c, const <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a> &amp;succs)</td></tr>
137
+ <tr class="memitem:a5e102d5c08b7121efc87b99651f0b5d2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a5e102d5c08b7121efc87b99651f0b5d2">BranchStmt</a> (<a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *inst, <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *c, const <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a> &amp;succs)</td></tr>
138
138
  <tr class="memdesc:a5e102d5c08b7121efc87b99651f0b5d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">constructor <a href="#a5e102d5c08b7121efc87b99651f0b5d2">More...</a><br /></td></tr>
139
139
  <tr class="separator:a5e102d5c08b7121efc87b99651f0b5d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
140
140
  <tr class="memitem:a038d65e38fe792fec4050d3d1c9c5180"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a038d65e38fe792fec4050d3d1c9c5180">isUnconditional</a> () const</td></tr>
@@ -153,12 +153,12 @@ Public Member Functions</h2></td></tr>
153
153
  <tr><td colspan="2"><div class="groupHeader"></div></td></tr>
154
154
  <tr class="memitem:a022d355bde3d0d0a9471cd125b24583b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a022d355bde3d0d0a9471cd125b24583b">getNumSuccessors</a> () const</td></tr>
155
155
  <tr class="separator:a022d355bde3d0d0a9471cd125b24583b"><td class="memSeparator" colspan="2">&#160;</td></tr>
156
- <tr class="memitem:a93040c884df211ac62d53ceafdd9c4dd"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a93040c884df211ac62d53ceafdd9c4dd">getSuccessors</a> () const</td></tr>
156
+ <tr class="memitem:a93040c884df211ac62d53ceafdd9c4dd"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a93040c884df211ac62d53ceafdd9c4dd">getSuccessors</a> () const</td></tr>
157
157
  <tr class="separator:a93040c884df211ac62d53ceafdd9c4dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
158
158
  <tr class="memitem:a7d9a6ebb2d95942c453864b5327b1ae8"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a> (<a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i) const</td></tr>
159
159
  <tr class="separator:a7d9a6ebb2d95942c453864b5327b1ae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
160
- <tr class="memitem:a7d2fa666602e0444d3e019563c0e7556"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a7d2fa666602e0444d3e019563c0e7556">getSuccessorCondValue</a> (<a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i) const</td></tr>
161
- <tr class="separator:a7d2fa666602e0444d3e019563c0e7556"><td class="memSeparator" colspan="2">&#160;</td></tr>
160
+ <tr class="memitem:a0881e8decb0bfe2066995d9d729d1aad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a0881e8decb0bfe2066995d9d729d1aad">getSuccessorCondValue</a> (<a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i) const</td></tr>
161
+ <tr class="separator:a0881e8decb0bfe2066995d9d729d1aad"><td class="memSeparator" colspan="2">&#160;</td></tr>
162
162
  <tr class="inherit_header pub_methods_classSVF_1_1SVFStmt"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSVF_1_1SVFStmt')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></td></tr>
163
163
  <tr class="memitem:a2ab7295fe26d2c6d2d5c9fd027f96a47 inherit pub_methods_classSVF_1_1SVFStmt"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SVFStmt.html#a2ab7295fe26d2c6d2d5c9fd027f96a47">SVFStmt</a> (<a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *s, <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *d, <a class="el" href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">GEdgeFlag</a> k, bool real=true)</td></tr>
164
164
  <tr class="memdesc:a2ab7295fe26d2c6d2d5c9fd027f96a47 inherit pub_methods_classSVF_1_1SVFStmt"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classSVF_1_1SVFStmt.html#a2ab7295fe26d2c6d2d5c9fd027f96a47">More...</a><br /></td></tr>
@@ -259,7 +259,7 @@ Private Member Functions</h2></td></tr>
259
259
  </table><table class="memberdecls">
260
260
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
261
261
  Private Attributes</h2></td></tr>
262
- <tr class="memitem:a40854cd95fbae16ef8e370255d0e3cf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a40854cd95fbae16ef8e370255d0e3cf5">successors</a></td></tr>
262
+ <tr class="memitem:a40854cd95fbae16ef8e370255d0e3cf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#a40854cd95fbae16ef8e370255d0e3cf5">successors</a></td></tr>
263
263
  <tr class="separator:a40854cd95fbae16ef8e370255d0e3cf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
264
264
  <tr class="memitem:adcf5cabe6e0a87cded5ef1fdf7273f3f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchStmt.html#adcf5cabe6e0a87cded5ef1fdf7273f3f">cond</a></td></tr>
265
265
  <tr class="separator:adcf5cabe6e0a87cded5ef1fdf7273f3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -284,14 +284,14 @@ Additional Inherited Members</h2></td></tr>
284
284
 
285
285
  <p class="definition">Definition at line <a class="el" href="SVFStatements_8h_source.html#l00921">921</a> of file <a class="el" href="SVFStatements_8h_source.html">SVFStatements.h</a>.</p>
286
286
  </div><h2 class="groupheader">Member Typedef Documentation</h2>
287
- <a id="ac486fb3a118e6153892b998b0ef46890"></a>
288
- <h2 class="memtitle"><span class="permalink"><a href="#ac486fb3a118e6153892b998b0ef46890">&#9670;&nbsp;</a></span>SuccAndCondPairVec</h2>
287
+ <a id="a6a0e64824777f04be4c169125dd4f666"></a>
288
+ <h2 class="memtitle"><span class="permalink"><a href="#a6a0e64824777f04be4c169125dd4f666">&#9670;&nbsp;</a></span>SuccAndCondPairVec</h2>
289
289
 
290
290
  <div class="memitem">
291
291
  <div class="memproto">
292
292
  <table class="memname">
293
293
  <tr>
294
- <td class="memname">typedef std::vector&lt;std::pair&lt;const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a>*, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>&gt; &gt; <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SVF::BranchStmt::SuccAndCondPairVec</a></td>
294
+ <td class="memname">typedef std::vector&lt;std::pair&lt;const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a>*, <a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>&gt; &gt; <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SVF::BranchStmt::SuccAndCondPairVec</a></td>
295
295
  </tr>
296
296
  </table>
297
297
  </div><div class="memdoc">
@@ -380,7 +380,7 @@ Additional Inherited Members</h2></td></tr>
380
380
  <tr>
381
381
  <td class="paramkey"></td>
382
382
  <td></td>
383
- <td class="paramtype">const <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a> &amp;&#160;</td>
383
+ <td class="paramtype">const <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a> &amp;&#160;</td>
384
384
  <td class="paramname"><em>succs</em>&#160;</td>
385
385
  </tr>
386
386
  <tr>
@@ -712,8 +712,8 @@ Additional Inherited Members</h2></td></tr>
712
712
  </div><!-- fragment -->
713
713
  </div>
714
714
  </div>
715
- <a id="a7d2fa666602e0444d3e019563c0e7556"></a>
716
- <h2 class="memtitle"><span class="permalink"><a href="#a7d2fa666602e0444d3e019563c0e7556">&#9670;&nbsp;</a></span>getSuccessorCondValue()</h2>
715
+ <a id="a0881e8decb0bfe2066995d9d729d1aad"></a>
716
+ <h2 class="memtitle"><span class="permalink"><a href="#a0881e8decb0bfe2066995d9d729d1aad">&#9670;&nbsp;</a></span>getSuccessorCondValue()</h2>
717
717
 
718
718
  <div class="memitem">
719
719
  <div class="memproto">
@@ -722,7 +722,7 @@ Additional Inherited Members</h2></td></tr>
722
722
  <td class="mlabels-left">
723
723
  <table class="memname">
724
724
  <tr>
725
- <td class="memname"><a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> SVF::BranchStmt::getSuccessorCondValue </td>
725
+ <td class="memname"><a class="el" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> SVF::BranchStmt::getSuccessorCondValue </td>
726
726
  <td>(</td>
727
727
  <td class="paramtype"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&#160;</td>
728
728
  <td class="paramname"><em>i</em></td><td>)</td>
@@ -751,7 +751,7 @@ Additional Inherited Members</h2></td></tr>
751
751
  <td class="mlabels-left">
752
752
  <table class="memname">
753
753
  <tr>
754
- <td class="memname">const <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a>&amp; SVF::BranchStmt::getSuccessors </td>
754
+ <td class="memname">const <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a>&amp; SVF::BranchStmt::getSuccessors </td>
755
755
  <td>(</td>
756
756
  <td class="paramname"></td><td>)</td>
757
757
  <td> const</td>
@@ -945,7 +945,7 @@ Additional Inherited Members</h2></td></tr>
945
945
  <td class="mlabels-left">
946
946
  <table class="memname">
947
947
  <tr>
948
- <td class="memname"><a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">SuccAndCondPairVec</a> SVF::BranchStmt::successors</td>
948
+ <td class="memname"><a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SuccAndCondPairVec</a> SVF::BranchStmt::successors</td>
949
949
  </tr>
950
950
  </table>
951
951
  </td>
@@ -97,7 +97,7 @@ Public Member Functions</h2></td></tr>
97
97
  <tr><td colspan="2"><div class="groupHeader"></div></td></tr>
98
98
  <tr class="memitem:ad070e36a440deb982779cec18aa03ee6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchVFGNode.html#ad070e36a440deb982779cec18aa03ee6">getNumSuccessors</a> () const</td></tr>
99
99
  <tr class="separator:ad070e36a440deb982779cec18aa03ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
100
- <tr class="memitem:a2ef5951de4760d28adb9d82b22067360"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">BranchStmt::SuccAndCondPairVec</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchVFGNode.html#a2ef5951de4760d28adb9d82b22067360">getSuccessors</a> () const</td></tr>
100
+ <tr class="memitem:a2ef5951de4760d28adb9d82b22067360"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchVFGNode.html#a2ef5951de4760d28adb9d82b22067360">getSuccessors</a> () const</td></tr>
101
101
  <tr class="separator:a2ef5951de4760d28adb9d82b22067360"><td class="memSeparator" colspan="2">&#160;</td></tr>
102
102
  <tr class="memitem:ae611eb1d27846c15b7301017e1864a30"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BranchVFGNode.html#ae611eb1d27846c15b7301017e1864a30">getSuccessor</a> (<a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i) const</td></tr>
103
103
  <tr class="separator:ae611eb1d27846c15b7301017e1864a30"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -574,7 +574,7 @@ Additional Inherited Members</h2></td></tr>
574
574
  <td class="mlabels-left">
575
575
  <table class="memname">
576
576
  <tr>
577
- <td class="memname">const <a class="el" href="classSVF_1_1BranchStmt.html#ac486fb3a118e6153892b998b0ef46890">BranchStmt::SuccAndCondPairVec</a>&amp; SVF::BranchVFGNode::getSuccessors </td>
577
+ <td class="memname">const <a class="el" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a>&amp; SVF::BranchVFGNode::getSuccessors </td>
578
578
  <td>(</td>
579
579
  <td class="paramname"></td><td>)</td>
580
580
  <td> const</td>
@@ -516,8 +516,7 @@ Private Attributes</h2></td></tr>
516
516
  </div><div class="memdoc">
517
517
 
518
518
  <p class="definition">Definition at line <a class="el" href="CHGBuilder_8cpp_source.html#l00541">541</a> of file <a class="el" href="CHGBuilder_8cpp_source.html">CHGBuilder.cpp</a>.</p>
519
- <div class="fragment"><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;{</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="comment"> * 1. Divide classes into groups</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="comment"> * 2. Get all virtual functions in a group</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="comment"> * 3. Assign consecutive IDs to virtual functions that have</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="comment"> * the same name (after demangling) in a group</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> visitedNodes;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> nit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; neit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); nit != neit; ++nit)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = nit-&gt;second;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">if</span> (visitedNodes.find(node) != visitedNodes.end())</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">continue</span>;</div><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="keywordtype">string</span> className = node-&gt;<a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment"> * get all the classes in a specific group</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> group;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; stack&lt;const CHNode*&gt; nodeStack;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; nodeStack.push(node);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">while</span> (!nodeStack.empty())</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *curnode = nodeStack.top();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; nodeStack.pop();</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; group.insert(curnode);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (visitedNodes.find(curnode) != visitedNodes.end())</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().begin(),</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; eit = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().end(); it != eit; ++it)</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; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *tmpnode = (*it)-&gt;getDstNode();</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; nodeStack.push(tmpnode);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; group.insert(tmpnode);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().begin(),</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; eit = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *tmpnode = (*it)-&gt;getSrcNode();</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; nodeStack.push(tmpnode);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; group.insert(tmpnode);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; visitedNodes.insert(curnode);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</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; <span class="comment">/*</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="comment"> * get all virtual functions in a specific group</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; set&lt;const SVFFunction*&gt; virtualFunctions;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span> (CHGraph::CHNodeSetTy::iterator it = group.begin(),</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; eit = group.end(); it != eit; ++it)</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="keyword">const</span> vector&lt;CHNode::FuncVector&gt; &amp;vecs = (*it)-&gt;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">for</span> (vector&lt;CHNode::FuncVector&gt;::const_iterator vit = vecs.begin(),</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; veit = vecs.end(); vit != veit; ++vit)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">for</span> (vector&lt;const SVFFunction*&gt;::const_iterator fit = (*vit).begin(),</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; feit = (*vit).end(); fit != feit; ++fit)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; virtualFunctions.insert(*fit);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</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; }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;<span class="comment"> * build a set of pairs of demangled function name and function in a</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment"> * specific group, items in the set will be sort by the first item of the</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment"> * pair, so all the virtual functions in a group will be sorted by the</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment"> * demangled function name</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment"> * &lt;f, A::f&gt;</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment"> * &lt;f, B::f&gt;</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment"> * &lt;g, A::g&gt;</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment"> * &lt;g, B::g&gt;</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment"> * &lt;g, C::g&gt;</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="comment"> * &lt;~A, A::~A&gt;</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment"> * &lt;~B, B::~B&gt;</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment"> * &lt;~C, C::~C&gt;</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment"> * ...</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; set&lt;pair&lt;string, const SVFFunction*&gt; &gt; fNameSet;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">for</span> (set&lt;const SVFFunction*&gt;::iterator fit = virtualFunctions.begin(),</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; feit = virtualFunctions.end(); fit != feit; ++fit)</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f = *fit;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(f-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; fNameSet.insert(pair&lt;string, const SVFFunction*&gt;(dname.funcName, f));</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; <span class="keywordflow">for</span> (<span class="keyword">set</span>&lt;pair&lt;string, const SVFFunction*&gt;&gt;::iterator it = fNameSet.begin(),</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; eit = fNameSet.end(); it != eit; ++it)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#af3484748d0dd2567542acd3be18d3c4a">virtualFunctionToIDMap</a>[it-&gt;second] = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#ac3be8c8dfee16d7508b73b6f2270eb2d">vfID</a>++;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::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#l00361">GenericGraph.h:361</a></div></div>
520
- <div class="ttc" id="classSVF_1_1CHGraph_html_af3484748d0dd2567542acd3be18d3c4a"><div class="ttname"><a href="classSVF_1_1CHGraph.html#af3484748d0dd2567542acd3be18d3c4a">SVF::CHGraph::virtualFunctionToIDMap</a></div><div class="ttdeci">Map&lt; const SVFFunction *, s64_t &gt; virtualFunctionToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00321">CHG.h:321</a></div></div>
519
+ <div class="fragment"><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;{</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="comment"> * 1. Divide classes into groups</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="comment"> * 2. Get all virtual functions in a group</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="comment"> * 3. Assign consecutive IDs to virtual functions that have</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="comment"> * the same name (after demangling) in a group</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> visitedNodes;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">CHGraph::const_iterator</a> nit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(),</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; neit = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); nit != neit; ++nit)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *node = nit-&gt;second;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">if</span> (visitedNodes.find(node) != visitedNodes.end())</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">continue</span>;</div><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="keywordtype">string</span> className = node-&gt;<a class="code" href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">getName</a>();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment"> * get all the classes in a specific group</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="classSVF_1_1CHGraph.html#ad0f60c720b277c60ed8a8966189bb42b">CHGraph::CHNodeSetTy</a> group;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; stack&lt;const CHNode*&gt; nodeStack;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; nodeStack.push(node);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">while</span> (!nodeStack.empty())</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *curnode = nodeStack.top();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; nodeStack.pop();</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; group.insert(curnode);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (visitedNodes.find(curnode) != visitedNodes.end())</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().begin(),</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; eit = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().end(); it != eit; ++it)</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; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *tmpnode = (*it)-&gt;getDstNode();</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; nodeStack.push(tmpnode);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; group.insert(tmpnode);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">for</span> (CHEdge::CHEdgeSetTy::const_iterator it = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().begin(),</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; eit = curnode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="classSVF_1_1CHNode.html">CHNode</a> *tmpnode = (*it)-&gt;getSrcNode();</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; nodeStack.push(tmpnode);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; group.insert(tmpnode);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; visitedNodes.insert(curnode);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</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; <span class="comment">/*</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="comment"> * get all virtual functions in a specific group</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; set&lt;const SVFFunction*&gt; virtualFunctions;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span> (CHGraph::CHNodeSetTy::iterator it = group.begin(),</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; eit = group.end(); it != eit; ++it)</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="keyword">const</span> vector&lt;CHNode::FuncVector&gt; &amp;vecs = (*it)-&gt;<a class="code" href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">getVirtualFunctionVectors</a>();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">for</span> (vector&lt;CHNode::FuncVector&gt;::const_iterator vit = vecs.begin(),</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; veit = vecs.end(); vit != veit; ++vit)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">for</span> (vector&lt;const SVFFunction*&gt;::const_iterator fit = (*vit).begin(),</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; feit = (*vit).end(); fit != feit; ++fit)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; virtualFunctions.insert(*fit);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</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; }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;<span class="comment"> * build a set of pairs of demangled function name and function in a</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment"> * specific group, items in the set will be sort by the first item of the</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment"> * pair, so all the virtual functions in a group will be sorted by the</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment"> * demangled function name</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment"> * &lt;f, A::f&gt;</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment"> * &lt;f, B::f&gt;</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment"> * &lt;g, A::g&gt;</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment"> * &lt;g, B::g&gt;</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment"> * &lt;g, C::g&gt;</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="comment"> * &lt;~A, A::~A&gt;</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment"> * &lt;~B, B::~B&gt;</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment"> * &lt;~C, C::~C&gt;</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment"> * ...</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; set&lt;pair&lt;string, const SVFFunction*&gt; &gt; fNameSet;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">for</span> (set&lt;const SVFFunction*&gt;::iterator fit = virtualFunctions.begin(),</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; feit = virtualFunctions.end(); fit != feit; ++fit)</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f = *fit;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">struct </span>DemangledName dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1007c092efaeae41002efd91b803a7f6">demangle</a>(f-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; fNameSet.insert(pair&lt;string, const SVFFunction*&gt;(dname.funcName, f));</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; <span class="keywordflow">for</span> (<span class="keyword">set</span>&lt;pair&lt;string, const SVFFunction*&gt;&gt;::iterator it = fNameSet.begin(),</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; eit = fNameSet.end(); it != eit; ++it)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#a70a2bab82563a910d32a9169030596c0">virtualFunctionToIDMap</a>[it-&gt;second] = <a class="code" href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">chg</a>-&gt;<a class="code" href="classSVF_1_1CHGraph.html#ab2d60bc836482fb98142da6151a91270">vfID</a>++;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::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#l00361">GenericGraph.h:361</a></div></div>
521
520
  <div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
522
521
  <div class="ttc" id="classSVF_1_1CHNode_html"><div class="ttname"><a href="classSVF_1_1CHNode.html">SVF::CHNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00104">CHG.h:104</a></div></div>
523
522
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00219">BasicTypes.h:219</a></div></div>
@@ -525,10 +524,11 @@ Private Attributes</h2></td></tr>
525
524
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00339">GenericGraph.h:339</a></div></div>
526
525
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
527
526
  <div class="ttc" id="classSVF_1_1CHGBuilder_html_ab3471cc9afba5976c7e5fbd07dfb22dc"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#ab3471cc9afba5976c7e5fbd07dfb22dc">SVF::CHGBuilder::chg</a></div><div class="ttdeci">CHGraph * chg</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00037">CHGBuilder.h:37</a></div></div>
527
+ <div class="ttc" id="classSVF_1_1CHGraph_html_a70a2bab82563a910d32a9169030596c0"><div class="ttname"><a href="classSVF_1_1CHGraph.html#a70a2bab82563a910d32a9169030596c0">SVF::CHGraph::virtualFunctionToIDMap</a></div><div class="ttdeci">Map&lt; const SVFFunction *, u32_t &gt; virtualFunctionToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00321">CHG.h:321</a></div></div>
528
528
  <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#l00178">GenericGraph.h:178</a></div></div>
529
- <div class="ttc" id="classSVF_1_1CHGraph_html_ac3be8c8dfee16d7508b73b6f2270eb2d"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ac3be8c8dfee16d7508b73b6f2270eb2d">SVF::CHGraph::vfID</a></div><div class="ttdeci">s64_t vfID</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00312">CHG.h:312</a></div></div>
530
529
  <div class="ttc" id="classSVF_1_1SVFValue_html_a2409c01221b9a6632655cee43d1b35e4"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">SVF::SVFValue::getName</a></div><div class="ttdeci">const std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00249">SVFBasicTypes.h:249</a></div></div>
531
530
  <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>
531
+ <div class="ttc" id="classSVF_1_1CHGraph_html_ab2d60bc836482fb98142da6151a91270"><div class="ttname"><a href="classSVF_1_1CHGraph.html#ab2d60bc836482fb98142da6151a91270">SVF::CHGraph::vfID</a></div><div class="ttdeci">u32_t vfID</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00312">CHG.h:312</a></div></div>
532
532
  <div class="ttc" id="classSVF_1_1CHNode_html_af6e71c1a932464b1b615fc177f5af089"><div class="ttname"><a href="classSVF_1_1CHNode.html#af6e71c1a932464b1b615fc177f5af089">SVF::CHNode::getName</a></div><div class="ttdeci">std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00123">CHG.h:123</a></div></div>
533
533
  <div class="ttc" id="classSVF_1_1CHNode_html_a5df1cf4d51bf3406d188c96bc9aae0af"><div class="ttname"><a href="classSVF_1_1CHNode.html#a5df1cf4d51bf3406d188c96bc9aae0af">SVF::CHNode::getVirtualFunctionVectors</a></div><div class="ttdeci">const std::vector&lt; FuncVector &gt; &amp; getVirtualFunctionVectors() const</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00171">CHG.h:171</a></div></div>
534
534
  </div><!-- fragment -->