svf-tools 1.0.615 → 1.0.616

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 (161) hide show
  1. package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +31 -31
  6. package/SVF-doxygen/html/html/Andersen_8h_source.html +5 -5
  7. package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/ConsG_8h_source.html +3 -2
  9. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +4 -4
  10. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  11. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +2 -2
  12. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  13. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
  15. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/ICFG_8h_source.html +3 -2
  17. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +0 -1
  19. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +16 -20
  20. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +68 -69
  21. package/SVF-doxygen/html/html/SVFG_8h_source.html +2 -2
  22. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/VFG_8h_source.html +3 -2
  24. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/annotated.html +188 -189
  26. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +52 -53
  27. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +85 -87
  28. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +43 -44
  29. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +13 -14
  30. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +52 -53
  31. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +12 -14
  32. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +56 -57
  33. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +6 -8
  34. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +53 -54
  35. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +9 -11
  36. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +27 -28
  37. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +96 -120
  38. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +33 -34
  39. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +2 -4
  40. package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +31 -32
  41. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +4 -6
  42. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph-members.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +4 -4
  44. package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +34 -35
  45. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +2 -4
  46. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +4 -4
  48. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +110 -110
  49. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +2 -2
  50. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +9 -9
  51. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +8 -8
  52. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph-members.html +1 -1
  53. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +4 -4
  54. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +2 -2
  55. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +60 -61
  56. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -4
  57. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +47 -48
  58. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +4 -6
  59. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +56 -57
  60. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +21 -23
  61. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph-members.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +8 -8
  64. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +2 -2
  65. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +9 -9
  66. package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +4 -4
  68. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  69. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +4 -4
  71. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
  72. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
  73. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
  74. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +7 -7
  75. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +4 -4
  77. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +46 -47
  78. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +5 -7
  79. package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +4 -4
  81. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +1 -1
  82. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +4 -4
  83. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +47 -48
  84. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -4
  85. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
  86. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +9 -9
  87. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +76 -77
  88. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -5
  89. package/SVF-doxygen/html/html/classes.html +99 -99
  90. package/SVF-doxygen/html/html/dir_967d846b666a902c6ca9bc5c37976e49.html +0 -2
  91. package/SVF-doxygen/html/html/files.html +5 -6
  92. package/SVF-doxygen/html/html/functions_0x7e.html +0 -3
  93. package/SVF-doxygen/html/html/functions_a.html +9 -15
  94. package/SVF-doxygen/html/html/functions_c.html +1 -1
  95. package/SVF-doxygen/html/html/functions_func.html +11 -17
  96. package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -3
  97. package/SVF-doxygen/html/html/functions_func_g.html +8 -11
  98. package/SVF-doxygen/html/html/functions_func_i.html +7 -10
  99. package/SVF-doxygen/html/html/functions_func_p.html +2 -29
  100. package/SVF-doxygen/html/html/functions_func_r.html +3 -9
  101. package/SVF-doxygen/html/html/functions_func_w.html +5 -8
  102. package/SVF-doxygen/html/html/functions_g.html +14 -17
  103. package/SVF-doxygen/html/html/functions_i.html +15 -18
  104. package/SVF-doxygen/html/html/functions_l.html +3 -3
  105. package/SVF-doxygen/html/html/functions_m.html +1 -4
  106. package/SVF-doxygen/html/html/functions_n.html +4 -4
  107. package/SVF-doxygen/html/html/functions_o.html +12 -12
  108. package/SVF-doxygen/html/html/functions_p.html +11 -43
  109. package/SVF-doxygen/html/html/functions_r.html +3 -11
  110. package/SVF-doxygen/html/html/functions_s.html +13 -11
  111. package/SVF-doxygen/html/html/functions_t.html +6 -6
  112. package/SVF-doxygen/html/html/functions_type_c.html +1 -1
  113. package/SVF-doxygen/html/html/functions_type_i.html +2 -2
  114. package/SVF-doxygen/html/html/functions_type_v.html +1 -1
  115. package/SVF-doxygen/html/html/functions_v.html +4 -4
  116. package/SVF-doxygen/html/html/functions_vars_m.html +0 -3
  117. package/SVF-doxygen/html/html/functions_vars_p.html +0 -3
  118. package/SVF-doxygen/html/html/functions_w.html +10 -9
  119. package/SVF-doxygen/html/html/hierarchy.html +194 -195
  120. package/SVF-doxygen/html/html/namespaceSVF.html +0 -2
  121. package/SVF-doxygen/html/html/search/all_1.js +0 -2
  122. package/SVF-doxygen/html/html/search/all_10.js +4 -14
  123. package/SVF-doxygen/html/html/search/all_11.js +1 -3
  124. package/SVF-doxygen/html/html/search/all_12.js +9 -9
  125. package/SVF-doxygen/html/html/search/all_13.js +4 -4
  126. package/SVF-doxygen/html/html/search/all_15.js +4 -4
  127. package/SVF-doxygen/html/html/search/all_16.js +3 -4
  128. package/SVF-doxygen/html/html/search/all_19.js +0 -1
  129. package/SVF-doxygen/html/html/search/all_3.js +2 -2
  130. package/SVF-doxygen/html/html/search/all_7.js +0 -1
  131. package/SVF-doxygen/html/html/search/all_9.js +6 -8
  132. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  133. package/SVF-doxygen/html/html/search/all_d.js +3 -4
  134. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  135. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  136. package/SVF-doxygen/html/html/search/classes_8.js +0 -1
  137. package/SVF-doxygen/html/html/search/files_7.js +0 -1
  138. package/SVF-doxygen/html/html/search/functions_0.js +0 -2
  139. package/SVF-doxygen/html/html/search/functions_10.js +0 -2
  140. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  141. package/SVF-doxygen/html/html/search/functions_15.js +1 -2
  142. package/SVF-doxygen/html/html/search/functions_17.js +0 -1
  143. package/SVF-doxygen/html/html/search/functions_6.js +0 -1
  144. package/SVF-doxygen/html/html/search/functions_8.js +1 -2
  145. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  146. package/SVF-doxygen/html/html/search/functions_f.js +0 -9
  147. package/SVF-doxygen/html/html/search/typedefs_13.js +1 -1
  148. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  149. package/SVF-doxygen/html/html/search/typedefs_7.js +3 -3
  150. package/SVF-doxygen/html/html/search/variables_10.js +0 -1
  151. package/SVF-doxygen/html/html/search/variables_13.js +2 -2
  152. package/SVF-doxygen/html/html/search/variables_d.js +0 -1
  153. package/include/Graphs/ConsG.h +1 -1
  154. package/include/Graphs/GenericGraph.h +1 -1
  155. package/include/Graphs/ICFG.h +1 -1
  156. package/include/Graphs/VFG.h +1 -1
  157. package/include/MemoryModel/PointerAnalysisImpl.h +1 -2
  158. package/lib/MemoryModel/PointerAnalysisImpl.cpp +87 -63
  159. package/lib/WPA/Andersen.cpp +9 -2
  160. package/package.json +1 -1
  161. package/include/SVF-LLVM/IRAnnotator.h +0 -324
@@ -241,12 +241,10 @@ Public Member Functions</h2></td></tr>
241
241
  <tr class="memitem:a25c68f9d2b88437778e854ff0d741d1b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">writeToFile</a> (const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &amp;filename)</td></tr>
242
242
  <tr class="memdesc:a25c68f9d2b88437778e854ff0d741d1b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interface for analysis result storage on filesystem. <a href="#a25c68f9d2b88437778e854ff0d741d1b">More...</a><br /></td></tr>
243
243
  <tr class="separator:a25c68f9d2b88437778e854ff0d741d1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
244
+ <tr class="memitem:a3279969934d6778a6cffe926ed724bfc"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#a3279969934d6778a6cffe926ed724bfc">writeObjVarToFile</a> (const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &amp;filename)</td></tr>
245
+ <tr class="separator:a3279969934d6778a6cffe926ed724bfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
244
246
  <tr class="memitem:a290501006cb700db0e07dc577429c928"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">readFromFile</a> (const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &amp;filename)</td></tr>
245
247
  <tr class="separator:a290501006cb700db0e07dc577429c928"><td class="memSeparator" colspan="2">&#160;</td></tr>
246
- <tr class="memitem:aa0ca07204a31004fb876c6e18d1ac1ca"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a> ()</td></tr>
247
- <tr class="separator:aa0ca07204a31004fb876c6e18d1ac1ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
248
- <tr class="memitem:a857cdacfc8cafdeb1431bdfa077ef9b5"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a> ()</td></tr>
249
- <tr class="separator:a857cdacfc8cafdeb1431bdfa077ef9b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
250
248
  <tr><td colspan="2"><div class="groupHeader"></div></td></tr>
251
249
  <tr class="memitem:acd9a15c398be20db43ed9fd910bd1758"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#acd9a15c398be20db43ed9fd910bd1758">dumpCPts</a> () override</td></tr>
252
250
  <tr class="memdesc:acd9a15c398be20db43ed9fd910bd1758"><td class="mdescLeft">&#160;</td><td class="mdescRight">dump and debug, print out conditional pts <a href="#acd9a15c398be20db43ed9fd910bd1758">More...</a><br /></td></tr>
@@ -806,8 +804,8 @@ Additional Inherited Members</h2></td></tr>
806
804
  <p>Constructor. </p>
807
805
  <p>Constructor </p>
808
806
 
809
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00046">46</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
810
- <div class="fragment"><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; :</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f">PointerAnalysis</a>(p, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check), <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>()</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">FlowS_DDA</a></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">CFLFICI_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">CFLFSCS_WPA</a>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Only maintain reverse points-to when the analysis is field-sensitive, as objects turning</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// field-insensitive is all it is used for.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">bool</span> maintainRevPts = <a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">Options::MaxFieldLimit</a> != 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutDiffPTDataTy&gt;(maintainRevPts);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersDiffPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), maintainRevPts);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">// Steensgaard is only field-insensitive (for now?), so no reverse points-to.</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutDiffPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersDiffPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">FSSPARSE_WPA</a>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">Options::INCDFPTData</a>)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutIncDFPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersIncDFPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutDFPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersDFPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutVersionedPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersVersionedPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</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">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no points-to data available&quot;</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_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">SVF::PointerAnalysis::CFLFSCS_WPA</a></div><div class="ttdoc">Flow-, context-, CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00080">PointerAnalysis.h:80</a></div></div>
807
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00045">45</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
808
+ <div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; :</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a14e2a209cb594f91a24ef09b12f82f3f">PointerAnalysis</a>(p, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check), <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>()</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">FlowS_DDA</a></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">CFLFICI_WPA</a> || <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">CFLFSCS_WPA</a>)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Only maintain reverse points-to when the analysis is field-sensitive, as objects turning</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// field-insensitive is all it is used for.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">bool</span> maintainRevPts = <a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">Options::MaxFieldLimit</a> != 0;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutDiffPTDataTy&gt;(maintainRevPts);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersDiffPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), maintainRevPts);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Steensgaard is only field-insensitive (for now?), so no reverse points-to.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutDiffPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersDiffPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">FSSPARSE_WPA</a>)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">Options::INCDFPTData</a>)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutIncDFPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersIncDFPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutDFPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersDFPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;MutVersionedPTDataTy&gt;(<span class="keyword">false</span>);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = std::make_unique&lt;PersVersionedPTDataTy&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no points-to data available&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">SVF::PointerAnalysis::CFLFSCS_WPA</a></div><div class="ttdoc">Flow-, context-, CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00080">PointerAnalysis.h:80</a></div></div>
811
809
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">SVF::PointerAnalysis::BVDataImpl</a></div><div class="ttdoc">Represents BVDataPTAImpl. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00097">PointerAnalysis.h:97</a></div></div>
812
810
  <div class="ttc" id="classSVF_1_1Options_html_a9ec1d22e20b655e364fea03ba7d923a2"><div class="ttname"><a href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">SVF::Options::ptDataBacking</a></div><div class="ttdeci">static const llvm::cl::opt&lt; BVDataPTAImpl::PTBackingType &gt; ptDataBacking</div><div class="ttdoc">PTData type. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00069">Options.h:69</a></div></div>
813
811
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">SVF::PointerAnalysis::CFLFICI_WPA</a></div><div class="ttdoc">Flow-, context-, insensitive CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00078">PointerAnalysis.h:78</a></div></div>
@@ -817,13 +815,13 @@ Additional Inherited Members</h2></td></tr>
817
815
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">SVF::PointerAnalysis::Steensgaard_WPA</a></div><div class="ttdoc">Steensgaard PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00071">PointerAnalysis.h:71</a></div></div>
818
816
  <div class="ttc" id="classSVF_1_1Options_html_a5896e2aaf59305441a74ede0dfb85845"><div class="ttname"><a href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">SVF::Options::INCDFPTData</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; INCDFPTData</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00146">Options.h:146</a></div></div>
819
817
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
820
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
818
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
821
819
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_afaeae813ff38e010bbe8fe61befb345c"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#afaeae813ff38e010bbe8fe61befb345c">SVF::BVDataPTAImpl::getPtCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; &amp; getPtCache()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00076">PointerAnalysisImpl.h:76</a></div></div>
822
820
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">SVF::PointerAnalysis::AndersenWaveDiff_WPA</a></div><div class="ttdoc">Diff wave propagation andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00070">PointerAnalysis.h:70</a></div></div>
823
821
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">SVF::PointerAnalysis::Andersen_WPA</a></div><div class="ttdoc">Andersen PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00067">PointerAnalysis.h:67</a></div></div>
824
822
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">SVF::PointerAnalysis::AndersenSFR_WPA</a></div><div class="ttdoc">Stride-based field representation. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00069">PointerAnalysis.h:69</a></div></div>
825
823
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">SVF::PointerAnalysis::FSSPARSE_WPA</a></div><div class="ttdoc">Sparse flow sensitive WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00075">PointerAnalysis.h:75</a></div></div>
826
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00206">PointerAnalysisImpl.h:206</a></div></div>
824
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00205">PointerAnalysisImpl.h:205</a></div></div>
827
825
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5d3c3094e263bf16a4f312a118c1bd36"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">SVF::PointerAnalysis::ptaImplTy</a></div><div class="ttdeci">PTAImplTy ptaImplTy</div><div class="ttdoc">PTA implementation type. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00148">PointerAnalysis.h:148</a></div></div>
828
826
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">SVF::PointerAnalysis::Andersen_BASE</a></div><div class="ttdoc">Base Andersen PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00066">PointerAnalysis.h:66</a></div></div>
829
827
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">SVF::PointerAnalysis::FlowS_DDA</a></div><div class="ttdoc">Flow sensitive DDA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00085">PointerAnalysis.h:85</a></div></div>
@@ -895,7 +893,7 @@ Additional Inherited Members</h2></td></tr>
895
893
  </div><div class="memdoc">
896
894
 
897
895
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00121">121</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
898
- <div class="fragment"><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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;addPts(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
896
+ <div class="fragment"><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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;addPts(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
899
897
  </div><!-- fragment -->
900
898
  </div>
901
899
  </div>
@@ -938,10 +936,10 @@ Additional Inherited Members</h2></td></tr>
938
936
 
939
937
  <p>Implements <a class="el" href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">SVF::PointerAnalysis</a>.</p>
940
938
 
941
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00514">514</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
942
- <div class="fragment"><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;{</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(V2));</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;}</div><div class="ttc" id="classSVF_1_1IRGraph_html_a43514023a4f4d0c32f536f51443b0efc"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const SVFValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00128">IRGraph.h:128</a></div></div>
939
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00538">538</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
940
+ <div class="fragment"><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;{</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(V2));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;}</div><div class="ttc" id="classSVF_1_1IRGraph_html_a43514023a4f4d0c32f536f51443b0efc"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const SVFValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00128">IRGraph.h:128</a></div></div>
943
941
  <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#l00142">PointerAnalysis.h:142</a></div></div>
944
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a236d3e9c894fd7c34c8d7a77ac11dd48"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">SVF::BVDataPTAImpl::alias</a></div><div class="ttdeci">AliasResult alias(const SVFValue *V1, const SVFValue *V2) override</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Value infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00514">PointerAnalysisImpl.cpp:514</a></div></div>
942
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a236d3e9c894fd7c34c8d7a77ac11dd48"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">SVF::BVDataPTAImpl::alias</a></div><div class="ttdeci">AliasResult alias(const SVFValue *V1, const SVFValue *V2) override</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Value infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00538">PointerAnalysisImpl.cpp:538</a></div></div>
945
943
  </div><!-- fragment -->
946
944
  </div>
947
945
  </div>
@@ -984,9 +982,9 @@ Additional Inherited Members</h2></td></tr>
984
982
 
985
983
  <p>Implements <a class="el" href="classSVF_1_1PointerAnalysis.html#a0f712ead1f31750879948c36b2fc77cf">SVF::PointerAnalysis</a>.</p>
986
984
 
987
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00523">523</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
988
- <div class="fragment"><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;{</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(node1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(node2));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac9897a09cad8a99169f2da2116807b1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">const PointsTo &amp; getPts(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00088">PointerAnalysisImpl.h:88</a></div></div>
989
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a236d3e9c894fd7c34c8d7a77ac11dd48"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">SVF::BVDataPTAImpl::alias</a></div><div class="ttdeci">AliasResult alias(const SVFValue *V1, const SVFValue *V2) override</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Value infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00514">PointerAnalysisImpl.cpp:514</a></div></div>
985
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00547">547</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
986
+ <div class="fragment"><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;{</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(node1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(node2));</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac9897a09cad8a99169f2da2116807b1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">const PointsTo &amp; getPts(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00088">PointerAnalysisImpl.h:88</a></div></div>
987
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a236d3e9c894fd7c34c8d7a77ac11dd48"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a236d3e9c894fd7c34c8d7a77ac11dd48">SVF::BVDataPTAImpl::alias</a></div><div class="ttdeci">AliasResult alias(const SVFValue *V1, const SVFValue *V2) override</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Value infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00538">PointerAnalysisImpl.cpp:538</a></div></div>
990
988
  </div><!-- fragment -->
991
989
  </div>
992
990
  </div>
@@ -1027,11 +1025,11 @@ Additional Inherited Members</h2></td></tr>
1027
1025
  <p>Interface expose to users of our pointer analysis, given two pts. </p>
1028
1026
  <p>Return alias results based on our points-to/alias analysis </p>
1029
1027
 
1030
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00531">531</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1031
- <div class="fragment"><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;{</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts1;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p1,pts1);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts2;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p2,pts2);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts2) || pts1.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(pts2))</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a56368369bc37e37b13f19e5eb1890063"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">SVF::PointerAnalysis::containBlackHoleNode</a></div><div class="ttdeci">bool containBlackHoleNode(const PointsTo &amp;pts)</div><div class="ttdoc">Determine whether a points-to contains a black hole or constant node. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00292">PointerAnalysis.h:292</a></div></div>
1028
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00555">555</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1029
+ <div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts1;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p1,pts1);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts2;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p2,pts2);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts2) || pts1.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(pts2))</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a56368369bc37e37b13f19e5eb1890063"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">SVF::PointerAnalysis::containBlackHoleNode</a></div><div class="ttdeci">bool containBlackHoleNode(const PointsTo &amp;pts)</div><div class="ttdoc">Determine whether a points-to contains a black hole or constant node. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00292">PointerAnalysis.h:292</a></div></div>
1032
1030
  <div class="ttc" id="classSVF_1_1PointsTo_html_ad78e4109c839914c4f7e37ca78046f1d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">SVF::PointsTo::intersects</a></div><div class="ttdeci">bool intersects(const PointsTo &amp;rhs) const</div><div class="ttdoc">Returns true if this set and rhs share any elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00189">PointsTo.cpp:189</a></div></div>
1033
1031
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">SVF::MayAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00461">SVFType.h:461</a></div></div>
1034
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a798c84d5e861de2b61bcb1a86385f721"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">SVF::BVDataPTAImpl::expandFIObjs</a></div><div class="ttdeci">virtual void expandFIObjs(const PointsTo &amp;pts, PointsTo &amp;expandedPts)</div><div class="ttdoc">Expand FI objects. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00133">PointerAnalysisImpl.cpp:133</a></div></div>
1032
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a798c84d5e861de2b61bcb1a86385f721"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">SVF::BVDataPTAImpl::expandFIObjs</a></div><div class="ttdeci">virtual void expandFIObjs(const PointsTo &amp;pts, PointsTo &amp;expandedPts)</div><div class="ttdoc">Expand FI objects. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00132">PointerAnalysisImpl.cpp:132</a></div></div>
1035
1033
  <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#l00028">PointsTo.h:28</a></div></div>
1036
1034
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">SVF::NoAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00460">SVFType.h:460</a></div></div>
1037
1035
  </div><!-- fragment -->
@@ -1092,7 +1090,7 @@ Additional Inherited Members</h2></td></tr>
1092
1090
  <p>Clear all data. </p>
1093
1091
 
1094
1092
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00128">128</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1095
- <div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;clear();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1093
+ <div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;clear();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1096
1094
  </div><!-- fragment -->
1097
1095
  </div>
1098
1096
  </div>
@@ -1123,7 +1121,7 @@ Additional Inherited Members</h2></td></tr>
1123
1121
  <p>Clear points-to set of id. </p>
1124
1122
 
1125
1123
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00105">105</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1126
- <div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;clearFullPts(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1124
+ <div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;clearFullPts(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1127
1125
  </div><!-- fragment -->
1128
1126
  </div>
1129
1127
  </div>
@@ -1164,7 +1162,7 @@ Additional Inherited Members</h2></td></tr>
1164
1162
  <p>Remove element from the points-to set of id. </p>
1165
1163
 
1166
1164
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00099">99</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1167
- <div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;clearPts(<span class="keywordtype">id</span>, element);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1165
+ <div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;clearPts(<span class="keywordtype">id</span>, element);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1168
1166
  </div><!-- fragment -->
1169
1167
  </div>
1170
1168
  </div>
@@ -1194,8 +1192,8 @@ Additional Inherited Members</h2></td></tr>
1194
1192
 
1195
1193
  <p>Reimplemented from <a class="el" href="classSVF_1_1PointerAnalysis.html#a861554c2fdeaa406131c2c920b4c7908">SVF::PointerAnalysis</a>.</p>
1196
1194
 
1197
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00411">411</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1198
- <div class="fragment"><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;{</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> pagNodes;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; pagNodes.insert(it-&gt;first);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> : pagNodes)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">dumpPts</a>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>, this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>));</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</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#l00369">GenericGraph.h:369</a></div></div>
1195
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00435">435</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1196
+ <div class="fragment"><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;{</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> pagNodes;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; pagNodes.insert(it-&gt;first);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> : pagNodes)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">dumpPts</a>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>, this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>));</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</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#l00369">GenericGraph.h:369</a></div></div>
1199
1197
  <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1200
1198
  <div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
1201
1199
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a1a6cee7e690ccb3e53cdc4c3e67b386d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">SVF::PointerAnalysis::dumpPts</a></div><div class="ttdeci">virtual void dumpPts(NodeID ptr, const PointsTo &amp;pts)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00258">PointerAnalysis.cpp:258</a></div></div>
@@ -1235,8 +1233,8 @@ Additional Inherited Members</h2></td></tr>
1235
1233
 
1236
1234
  <p>Reimplemented from <a class="el" href="classSVF_1_1PointerAnalysis.html#ad409cbf61271743394b9e5868f3fd197">SVF::PointerAnalysis</a>.</p>
1237
1235
 
1238
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00221">221</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1239
- <div class="fragment"><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;dumpPTData();</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1236
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00220">220</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1237
+ <div class="fragment"><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;dumpPTData();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1240
1238
  </div><!-- fragment -->
1241
1239
  </div>
1242
1240
  </div>
@@ -1268,8 +1266,8 @@ Additional Inherited Members</h2></td></tr>
1268
1266
 
1269
1267
  <p>Reimplemented in <a class="el" href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a">SVF::Andersen</a>.</p>
1270
1268
 
1271
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00378">378</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1272
- <div class="fragment"><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nNodeID &quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">empty</a>())</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>().flush();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a60b111647e000cc983aa52513f90afbc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">SVF::PointerAnalysis::getAllValidPtrs</a></div><div class="ttdeci">OrderedNodeSet &amp; getAllValidPtrs()</div><div class="ttdoc">Get all Valid Pointers for resolution. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00218">PointerAnalysis.h:218</a></div></div>
1269
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00402">402</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1270
+ <div class="fragment"><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;{</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nNodeID &quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">empty</a>())</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>();</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>().flush();</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a60b111647e000cc983aa52513f90afbc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">SVF::PointerAnalysis::getAllValidPtrs</a></div><div class="ttdeci">OrderedNodeSet &amp; getAllValidPtrs()</div><div class="ttdoc">Get all Valid Pointers for resolution. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00218">PointerAnalysis.h:218</a></div></div>
1273
1271
  <div class="ttc" id="classSVF_1_1PointsTo_html_a13746982a11d0cab57e5919d53bfbec8"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00098">PointsTo.cpp:98</a></div></div>
1274
1272
  <div class="ttc" id="classSVF_1_1PointsTo_html_a6e2ff63437d07a30cc6db35de032728a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00132">PointsTo.h:132</a></div></div>
1275
1273
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
@@ -1321,8 +1319,8 @@ Additional Inherited Members</h2></td></tr>
1321
1319
  <p>Expand FI objects. </p>
1322
1320
  <p>Expand all fields of an aggregate in all points-to sets </p>
1323
1321
 
1324
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00133">133</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1325
- <div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; expandedPts = pts;;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> pit = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), epit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); pit!=epit; ++pit)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(*pit) == *pit || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*pit))</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(*pit);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointsTo_html_a6e2ff63437d07a30cc6db35de032728a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00132">PointsTo.h:132</a></div></div>
1322
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00132">132</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1323
+ <div class="fragment"><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;{</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; expandedPts = pts;;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> pit = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), epit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); pit!=epit; ++pit)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(*pit) == *pit || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*pit))</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(*pit);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointsTo_html_a6e2ff63437d07a30cc6db35de032728a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00132">PointsTo.h:132</a></div></div>
1326
1324
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
1327
1325
  <div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00425">SVFIR.h:425</a></div></div>
1328
1326
  <div class="ttc" id="classSVF_1_1SVFIR_html_a7276e82b4648ed0e1b3d1b8b37b24089"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVF::SVFIR::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjVars(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00475">SVFIR.cpp:475</a></div></div>
@@ -1368,8 +1366,8 @@ Additional Inherited Members</h2></td></tr>
1368
1366
 
1369
1367
  <p>TODO: remove repetition. </p>
1370
1368
 
1371
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00145">145</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1372
- <div class="fragment"><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; expandedPts = pts;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> o : pts)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(o) == o || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(o);</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; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1369
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00144">144</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1370
+ <div class="fragment"><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; expandedPts = pts;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> o : pts)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(o) == o || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1373
1371
  <div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00425">SVFIR.h:425</a></div></div>
1374
1372
  <div class="ttc" id="classSVF_1_1SVFIR_html_a7276e82b4648ed0e1b3d1b8b37b24089"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVF::SVFIR::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjVars(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00475">SVFIR.cpp:475</a></div></div>
1375
1373
  <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#l00142">PointerAnalysis.h:142</a></div></div>
@@ -1406,8 +1404,8 @@ Additional Inherited Members</h2></td></tr>
1406
1404
 
1407
1405
  <p>Reimplemented in <a class="el" href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c">SVF::Andersen</a>, <a class="el" href="classSVF_1_1FlowSensitive.html#a911aa7dd8d696b96a85d85af852e1e58">SVF::FlowSensitive</a>, <a class="el" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">SVF::AndersenBase</a>, <a class="el" href="classSVF_1_1TypeAnalysis.html#a8efef079c8b33e2215f92ac3629789e6">SVF::TypeAnalysis</a>, and <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ad955fda89f4f749151a1bd14562b03f6">SVF::VersionedFlowSensitive</a>.</p>
1408
1406
 
1409
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00093">93</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1410
- <div class="fragment"><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="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a>)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>()-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">getModuleIdentifier</a>());</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; std::vector&lt;std::string&gt; names = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">SVFUtil::split</a>(moduleName,<span class="charliteral">&#39;/&#39;</span>);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span> (names.size() &gt; 1)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; moduleName = names[names.size() - 1];</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="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> subtitle;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;= <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;= <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; subtitle = <span class="stringliteral">&quot;Andersen&#39;s analysis bitvector&quot;</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a62281bc39fea50a88e55edf605620322">FSDATAFLOW_WPA</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a43837619e78e03dc95ec6e88959faf82">FSCS_WPA</a>)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; subtitle = <span class="stringliteral">&quot;flow-sensitive analysis bitvector&quot;</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">CFLFICI_WPA</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">CFLFSCS_WPA</a>)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; subtitle = <span class="stringliteral">&quot;CFL analysis bitvector&quot;</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a>)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; subtitle = <span class="stringliteral">&quot;Type analysis bitvector&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abe1d8104c77bfe4bbc201a64410c7f61">FieldS_DDA</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a0ab6564c48897595c9d23382a026e0a8">Cxt_DDA</a>)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; subtitle = <span class="stringliteral">&quot;DDA bitvector&quot;</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; subtitle = <span class="stringliteral">&quot;bitvector&quot;</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n****Persistent Points-To Cache Statistics: &quot;</span> &lt;&lt; subtitle &lt;&lt; <span class="stringliteral">&quot;****\n&quot;</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;################ (program : &quot;</span> &lt;&lt; moduleName &lt;&lt; <span class="stringliteral">&quot;)###############\n&quot;</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flags(std::ios::left);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.printStats(<span class="stringliteral">&quot;bitvector&quot;</span>);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;#######################################################&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">SVF::PointerAnalysis::CFLFSCS_WPA</a></div><div class="ttdoc">Flow-, context-, CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00080">PointerAnalysis.h:80</a></div></div>
1407
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00092">92</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1408
+ <div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a>)</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="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>()-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">getModuleIdentifier</a>());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::vector&lt;std::string&gt; names = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">SVFUtil::split</a>(moduleName,<span class="charliteral">&#39;/&#39;</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (names.size() &gt; 1)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; moduleName = names[names.size() - 1];</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> subtitle;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;= <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;= <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; subtitle = <span class="stringliteral">&quot;Andersen&#39;s analysis bitvector&quot;</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a62281bc39fea50a88e55edf605620322">FSDATAFLOW_WPA</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a43837619e78e03dc95ec6e88959faf82">FSCS_WPA</a>)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; subtitle = <span class="stringliteral">&quot;flow-sensitive analysis bitvector&quot;</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">CFLFICI_WPA</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">CFLFSCS_WPA</a>)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; subtitle = <span class="stringliteral">&quot;CFL analysis bitvector&quot;</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a>)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; subtitle = <span class="stringliteral">&quot;Type analysis bitvector&quot;</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &gt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abe1d8104c77bfe4bbc201a64410c7f61">FieldS_DDA</a> &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#ade83738ac754d5ffc2a3b497b600cad4">ptaTy</a> &lt;=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a0ab6564c48897595c9d23382a026e0a8">Cxt_DDA</a>)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; subtitle = <span class="stringliteral">&quot;DDA bitvector&quot;</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; subtitle = <span class="stringliteral">&quot;bitvector&quot;</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n****Persistent Points-To Cache Statistics: &quot;</span> &lt;&lt; subtitle &lt;&lt; <span class="stringliteral">&quot;****\n&quot;</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;################ (program : &quot;</span> &lt;&lt; moduleName &lt;&lt; <span class="stringliteral">&quot;)###############\n&quot;</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flags(std::ios::left);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.printStats(<span class="stringliteral">&quot;bitvector&quot;</span>);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;#######################################################&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab87dcf990c05d31f91b9bfdfcfb54b7d">SVF::PointerAnalysis::CFLFSCS_WPA</a></div><div class="ttdoc">Flow-, context-, CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00080">PointerAnalysis.h:80</a></div></div>
1411
1409
  <div class="ttc" id="classSVF_1_1Options_html_a9ec1d22e20b655e364fea03ba7d923a2"><div class="ttname"><a href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">SVF::Options::ptDataBacking</a></div><div class="ttdeci">static const llvm::cl::opt&lt; BVDataPTAImpl::PTBackingType &gt; ptDataBacking</div><div class="ttdoc">PTData type. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00069">Options.h:69</a></div></div>
1412
1410
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">SVF::PointerAnalysis::CFLFICI_WPA</a></div><div class="ttdoc">Flow-, context-, insensitive CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00078">PointerAnalysis.h:78</a></div></div>
1413
1411
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85abe1d8104c77bfe4bbc201a64410c7f61"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abe1d8104c77bfe4bbc201a64410c7f61">SVF::PointerAnalysis::FieldS_DDA</a></div><div class="ttdoc">Field sensitive DDA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00084">PointerAnalysis.h:84</a></div></div>
@@ -1419,8 +1417,8 @@ Additional Inherited Members</h2></td></tr>
1419
1417
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af54e70082388bbd70868250aaa0bc86b"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">SVF::SVFUtil::split</a></div><div class="ttdeci">std::vector&lt; std::string &gt; split(const std::string &amp;s, char seperator)</div><div class="ttdoc">Split into two substrings around the first occurrence of a separator string. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00211">SVFUtil.h:211</a></div></div>
1420
1418
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
1421
1419
  <div class="ttc" id="classSVF_1_1SVFModule_html_aa8bab1ad6cab332fe24066b9cf487344"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">SVF::SVFModule::getModuleIdentifier</a></div><div class="ttdeci">const std::string &amp; getModuleIdentifier() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00196">SVFModule.h:196</a></div></div>
1422
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a2026cffd7043208333083ed1a6603e7b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">SVF::BVDataPTAImpl::normalizePointsTo</a></div><div class="ttdeci">virtual void normalizePointsTo()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00455">PointerAnalysisImpl.cpp:455</a></div></div>
1423
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00206">PointerAnalysisImpl.h:206</a></div></div>
1420
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a2026cffd7043208333083ed1a6603e7b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">SVF::BVDataPTAImpl::normalizePointsTo</a></div><div class="ttdeci">virtual void normalizePointsTo()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00479">PointerAnalysisImpl.cpp:479</a></div></div>
1421
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00205">PointerAnalysisImpl.h:205</a></div></div>
1424
1422
  <div class="ttc" id="classSVF_1_1SVFIR_html_ad6e18f520f6b559f2304002792f6b701"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">SVF::SVFIR::getModule</a></div><div class="ttdeci">SVFModule * getModule()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00153">SVFIR.h:153</a></div></div>
1425
1423
  <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#l00142">PointerAnalysis.h:142</a></div></div>
1426
1424
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">SVF::PointerAnalysis::Andersen_BASE</a></div><div class="ttdoc">Base Andersen PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00066">PointerAnalysis.h:66</a></div></div>
@@ -1454,10 +1452,10 @@ Additional Inherited Members</h2></td></tr>
1454
1452
  </table>
1455
1453
  </div><div class="memdoc">
1456
1454
 
1457
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00174">174</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1458
- <div class="fragment"><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">DFPTDataTy</a>* df = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">DFPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; assert(df &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getDFPTDataTy: not a DFPTDataTy!&quot;</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> df;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1455
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00173">173</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1456
+ <div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">DFPTDataTy</a>* df = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">DFPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; assert(df &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getDFPTDataTy: not a DFPTDataTy!&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> df;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1459
1457
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a5c2288519153467142e74c8dd4e77180"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">SVF::BVDataPTAImpl::DFPTDataTy</a></div><div class="ttdeci">DFPTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; DFPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00048">PointerAnalysisImpl.h:48</a></div></div>
1460
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1458
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1461
1459
  </div><!-- fragment -->
1462
1460
  </div>
1463
1461
  </div>
@@ -1484,9 +1482,9 @@ Additional Inherited Members</h2></td></tr>
1484
1482
  </table>
1485
1483
  </div><div class="memdoc">
1486
1484
 
1487
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00167">167</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1488
- <div class="fragment"><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; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">DiffPTDataTy</a>* diff = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">DiffPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; assert(diff &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getDiffPTDataTy: not a DiffPTDataTy!&quot;</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> diff;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1489
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1485
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00166">166</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1486
+ <div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">DiffPTDataTy</a>* diff = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">DiffPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; assert(diff &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getDiffPTDataTy: not a DiffPTDataTy!&quot;</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> diff;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1487
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1490
1488
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_abd8bb73e9beac5e39667091b1e211bd3"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">SVF::BVDataPTAImpl::DiffPTDataTy</a></div><div class="ttdeci">DiffPTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; DiffPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00047">PointerAnalysisImpl.h:47</a></div></div>
1491
1489
  </div><!-- fragment -->
1492
1490
  </div>
@@ -1514,10 +1512,10 @@ Additional Inherited Members</h2></td></tr>
1514
1512
  </table>
1515
1513
  </div><div class="memdoc">
1516
1514
 
1517
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00181">181</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1518
- <div class="fragment"><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>* mdf = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; assert(mdf &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getMutDFPTDataTy: not a MutDFPTDataTy!&quot;</span>);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> mdf;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1515
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00180">180</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1516
+ <div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>* mdf = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; assert(mdf &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getMutDFPTDataTy: not a MutDFPTDataTy!&quot;</span>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">return</span> mdf;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1519
1517
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac130bf326911b8e5396f57daa78566e7"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">SVF::BVDataPTAImpl::MutDFPTDataTy</a></div><div class="ttdeci">MutableDFPTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; MutDFPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00053">PointerAnalysisImpl.h:53</a></div></div>
1520
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1518
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1521
1519
  </div><!-- fragment -->
1522
1520
  </div>
1523
1521
  </div>
@@ -1545,7 +1543,7 @@ Additional Inherited Members</h2></td></tr>
1545
1543
  </div><div class="memdoc">
1546
1544
 
1547
1545
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00076">76</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1548
- <div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00206">PointerAnalysisImpl.h:206</a></div></div>
1546
+ <div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00205">PointerAnalysisImpl.h:205</a></div></div>
1549
1547
  </div><!-- fragment -->
1550
1548
  </div>
1551
1549
  </div>
@@ -1574,8 +1572,8 @@ Additional Inherited Members</h2></td></tr>
1574
1572
 
1575
1573
  <p>Get points-to data structure. </p>
1576
1574
 
1577
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00151">151</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1578
- <div class="fragment"><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1575
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00150">150</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1576
+ <div class="fragment"><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1579
1577
  </div><!-- fragment -->
1580
1578
  </div>
1581
1579
  </div>
@@ -1609,7 +1607,7 @@ Additional Inherited Members</h2></td></tr>
1609
1607
  <p>Reimplemented in <a class="el" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen</a>, and <a class="el" href="classSVF_1_1Steensgaard.html#adbcb9af660ab9bb0202bd32342280486">SVF::Steensgaard</a>.</p>
1610
1608
 
1611
1609
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00088">88</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1612
- <div class="fragment"><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; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;getPts(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1610
+ <div class="fragment"><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; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;getPts(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1613
1611
  </div><!-- fragment -->
1614
1612
  </div>
1615
1613
  </div>
@@ -1641,7 +1639,7 @@ Additional Inherited Members</h2></td></tr>
1641
1639
  <p>Implements <a class="el" href="classSVF_1_1PointerAnalysis.html#ad9af9655a13f3faeaf265ba370d1f280">SVF::PointerAnalysis</a>.</p>
1642
1640
 
1643
1641
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00092">92</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1644
- <div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;getRevPts(nodeId);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1642
+ <div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;getRevPts(nodeId);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1645
1643
  </div><!-- fragment -->
1646
1644
  </div>
1647
1645
  </div>
@@ -1668,10 +1666,10 @@ Additional Inherited Members</h2></td></tr>
1668
1666
  </table>
1669
1667
  </div><div class="memdoc">
1670
1668
 
1671
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00188">188</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1672
- <div class="fragment"><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">VersionedPTDataTy</a>* v = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">VersionedPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; assert(v &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getVersionedPTDataTy: not a VersionedPTDataTy!&quot;</span>);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a8bc5e039958280b18e5a00a56e0bdc94"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">SVF::BVDataPTAImpl::VersionedPTDataTy</a></div><div class="ttdeci">VersionedPTData&lt; NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set&lt; VersionedVar &gt; &gt; VersionedPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00049">PointerAnalysisImpl.h:49</a></div></div>
1669
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00187">187</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1670
+ <div class="fragment"><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">VersionedPTDataTy</a>* v = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">VersionedPTDataTy</a>&gt;(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>.get());</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; assert(v &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::getVersionedPTDataTy: not a VersionedPTDataTy!&quot;</span>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a8bc5e039958280b18e5a00a56e0bdc94"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">SVF::BVDataPTAImpl::VersionedPTDataTy</a></div><div class="ttdeci">VersionedPTData&lt; NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set&lt; VersionedVar &gt; &gt; VersionedPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00049">PointerAnalysisImpl.h:49</a></div></div>
1673
1671
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt; dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
1674
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1672
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1675
1673
  </div><!-- fragment -->
1676
1674
  </div>
1677
1675
  </div>
@@ -1702,8 +1700,8 @@ Additional Inherited Members</h2></td></tr>
1702
1700
 
1703
1701
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">SVF::AndersenBase</a>.</p>
1704
1702
 
1705
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00455">455</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1706
- <div class="fragment"><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>();</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVFIR::NodeLocationSetMap</a> &amp;GepObjVarMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>();</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="comment">// collect each gep node whose base node has been set as field-insensitive</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> dropNodes;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: memToFieldsMap)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base = t.first;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; assert(memObj &amp;&amp; <span class="stringliteral">&quot;Invalid memobj in memToFieldsMap&quot;</span>);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (memObj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <span class="keywordtype">id</span> : t.second)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepObjVar&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>)))</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; dropNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; assert(<span class="keywordtype">id</span> == base &amp;&amp; <span class="stringliteral">&quot;Not a GepObj Node or a baseObj Node?&quot;</span>);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// remove the collected redundant gep nodes in each pointers&#39;s pts</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = nIter-&gt;first;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;tmpPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(n);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> obj : tmpPts)</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> (!dropNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(obj))</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> baseObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(obj);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64">clearPts</a>(n, obj);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(n, baseObj);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// clear GepObjVarMap and memToFieldsMap for redundant gepnodes</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="comment">// and remove those nodes from pag</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> n: dropNodes)</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(n);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n));</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a553e648804b39c503e7288dd0434c339">getLocationSet</a>();</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; GepObjVarMap.erase(std::make_pair(base, ls));</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; memToFieldsMap[base].reset(n);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(gepNode);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map&lt; NodeLocationSet, NodeID &gt; NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
1703
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00479">479</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1704
+ <div class="fragment"><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;{</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVFIR::NodeLocationSetMap</a> &amp;GepObjVarMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="comment">// collect each gep node whose base node has been set as field-insensitive</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> dropNodes;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: memToFieldsMap)</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base = t.first;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; assert(memObj &amp;&amp; <span class="stringliteral">&quot;Invalid memobj in memToFieldsMap&quot;</span>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span> (memObj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <span class="keywordtype">id</span> : t.second)</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepObjVar&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>)))</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; dropNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; assert(<span class="keywordtype">id</span> == base &amp;&amp; <span class="stringliteral">&quot;Not a GepObj Node or a baseObj Node?&quot;</span>);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="comment">// remove the collected redundant gep nodes in each pointers&#39;s pts</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = nIter-&gt;first;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;tmpPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(n);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> obj : tmpPts)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span> (!dropNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(obj))</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> baseObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(obj);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64">clearPts</a>(n, obj);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(n, baseObj);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// clear GepObjVarMap and memToFieldsMap for redundant gepnodes</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// and remove those nodes from pag</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> n: dropNodes)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(n);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n));</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a553e648804b39c503e7288dd0434c339">getLocationSet</a>();</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; GepObjVarMap.erase(std::make_pair(base, ls));</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; memToFieldsMap[base].reset(n);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(gepNode);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map&lt; NodeLocationSet, NodeID &gt; NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
1707
1705
  <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#l00369">GenericGraph.h:369</a></div></div>
1708
1706
  <div class="ttc" id="classSVF_1_1SVFIR_html_a6f46446d667258b32ddc1ccab48f651c"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">SVF::SVFIR::getMemToFieldsMap</a></div><div class="ttdeci">MemObjToFieldsMap &amp; getMemToFieldsMap()</div><div class="ttdoc">Return memToFieldsMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00121">SVFIR.h:121</a></div></div>
1709
1707
  <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#l00348">SymbolTableInfo.h:348</a></div></div>
@@ -1772,8 +1770,8 @@ Additional Inherited Members</h2></td></tr>
1772
1770
 
1773
1771
  <p>Reimplemented in <a class="el" href="classSVF_1_1CFLAlias.html#a25b38896aef06dad19532f7678291b37">SVF::CFLAlias</a>.</p>
1774
1772
 
1775
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00434">434</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1776
- <div class="fragment"><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;{</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">for</span>(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = iter-&gt;first;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()).isVirtualCall())</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()).getVtablePtr();</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; assert(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a401ec65771a3d2dcc8eb60574aadd354">hasValueNode</a>(vtbl));</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> vtblId = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(vtbl);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac04b64a5884710508b304f93da88c7ba">resolveCPPIndCalls</a>(cs, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(vtblId), newEdges);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8d128246f86f28fdf4981d91169ab440">resolveIndCalls</a>(iter-&gt;first,<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(iter-&gt;second),newEdges);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8d128246f86f28fdf4981d91169ab440"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8d128246f86f28fdf4981d91169ab440">SVF::PointerAnalysis::resolveIndCalls</a></div><div class="ttdeci">virtual void resolveIndCalls(const CallICFGNode *cs, const PointsTo &amp;target, CallEdgeMap &amp;newEdges)</div><div class="ttdoc">Resolve indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00386">PointerAnalysis.cpp:386</a></div></div>
1773
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00458">458</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1774
+ <div class="fragment"><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">for</span>(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = iter-&gt;first;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()).isVirtualCall())</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* vtbl = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()).getVtablePtr();</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; assert(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a401ec65771a3d2dcc8eb60574aadd354">hasValueNode</a>(vtbl));</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> vtblId = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(vtbl);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac04b64a5884710508b304f93da88c7ba">resolveCPPIndCalls</a>(cs, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(vtblId), newEdges);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8d128246f86f28fdf4981d91169ab440">resolveIndCalls</a>(iter-&gt;first,<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(iter-&gt;second),newEdges);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8d128246f86f28fdf4981d91169ab440"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8d128246f86f28fdf4981d91169ab440">SVF::PointerAnalysis::resolveIndCalls</a></div><div class="ttdeci">virtual void resolveIndCalls(const CallICFGNode *cs, const PointsTo &amp;target, CallEdgeMap &amp;newEdges)</div><div class="ttdoc">Resolve indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00386">PointerAnalysis.cpp:386</a></div></div>
1777
1775
  <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1778
1776
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00194">SVFUtil.h:194</a></div></div>
1779
1777
  <div class="ttc" id="classSVF_1_1IRGraph_html_a43514023a4f4d0c32f536f51443b0efc"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const SVFValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00128">IRGraph.h:128</a></div></div>
@@ -1812,54 +1810,22 @@ Additional Inherited Members</h2></td></tr>
1812
1810
  </div><div class="memdoc">
1813
1811
  <p>Load pointer analysis result form a file. It populates <a class="el" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> with the points-to data, and updates <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> with the <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> offset nodes created during <a class="el" href="classSVF_1_1Andersen.html">Andersen</a>'s solving stage. </p>
1814
1812
 
1815
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00243">243</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1816
- <div class="fragment"><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;{</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// If the module annotations are available, read from there instead</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (mainModule-&gt;getNamedMetadata(<span class="stringliteral">&quot;SVFIR-Annotated&quot;</span>) != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; {</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading pointer analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; ifstream F(filename.c_str());</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span> (!F.is_open())</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// Read analysis results from file</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">PTDataTy</a> *<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// Read points-to sets</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordtype">string</span> delimiter1 = <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordtype">string</span> delimiter2 = <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; map&lt;NodeID, string&gt; nodePtsMap;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; map&lt;string, PointsTo&gt; strPtsMap;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Parse a single line in the form of &quot;var -&gt; { obj1 obj2 obj3 }&quot;</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; getline(F, line);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordtype">size_t</span> pos = line.find(delimiter1);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (pos == string::npos) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (line.back() != <span class="charliteral">&#39;}&#39;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// var</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> var = atoi(line.substr(0, pos).c_str());</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// objs</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; pos = pos + delimiter1.length();</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">size_t</span> len = line.length() - pos - delimiter2.length();</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">string</span> objs = line.substr(pos, len);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> dstPts;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (!objs.empty())</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// map the variable ID to its unique string pointer set</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; nodePtsMap[var] = objs;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (strPtsMap.count(objs)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; istringstream ss(objs);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> obj;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; ss &gt;&gt; obj;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(obj);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// map the string pointer set to the parsed PointsTo set</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; strPtsMap[objs] = dstPts;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// map the variable ID to its pointer set</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: nodePtsMap)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; ptD-&gt;unionPts(t.first, strPtsMap[t.second]);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// Read SVFIR offset nodes</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; getline(F, line);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// Read BaseNode insensitivity</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; getline(F, line);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// Parse a single line in the form of &quot;ID baseNodeID offset&quot;</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> id;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; ss &gt;&gt; <span class="keywordtype">id</span> &gt;&gt; base &gt;&gt; <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(base, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset));</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordtype">bool</span> matched = (<span class="keywordtype">id</span> == <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; (void)matched;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;Error adding GepObjNode into SVFIR!&quot;</span>);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// Update callgraph</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>());</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; F.close();</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae94cea78b71fb75837ee2a17b5ed0e81"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">SVF::BVDataPTAImpl::getPTDataTy</a></div><div class="ttdeci">PTDataTy * getPTDataTy() const</div><div class="ttdoc">Get points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00151">PointerAnalysisImpl.h:151</a></div></div>
1813
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00280">280</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1814
+ <div class="fragment"><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;{</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading pointer analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; ifstream F(filename.c_str());</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (!F.is_open())</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// Read ObjVar</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; getline(F, line);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// Read analysis results from file</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">PTDataTy</a> *<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// Read points-to sets</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordtype">string</span> delimiter1 = <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordtype">string</span> delimiter2 = <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; map&lt;NodeID, string&gt; nodePtsMap;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; map&lt;string, PointsTo&gt; strPtsMap;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// Parse a single line in the form of &quot;var -&gt; { obj1 obj2 obj3 }&quot;</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; getline(F, line);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">size_t</span> pos = line.find(delimiter1);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (pos == string::npos) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (line.back() != <span class="charliteral">&#39;}&#39;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// var</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> var = atoi(line.substr(0, pos).c_str());</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// objs</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; pos = pos + delimiter1.length();</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordtype">size_t</span> len = line.length() - pos - delimiter2.length();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">string</span> objs = line.substr(pos, len);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> dstPts;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (!objs.empty())</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="comment">// map the variable ID to its unique string pointer set</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; nodePtsMap[var] = objs;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span> (strPtsMap.count(objs)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; istringstream ss(objs);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> obj;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; ss &gt;&gt; obj;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(obj);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// map the string pointer set to the parsed PointsTo set</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; strPtsMap[objs] = dstPts;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// map the variable ID to its pointer set</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: nodePtsMap)</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; ptD-&gt;unionPts(t.first, strPtsMap[t.second]);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Read BaseNode insensitivity</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; getline(F, line);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">// Parse a single line in the form of &quot;ID baseNodeID offset&quot;</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> id;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; ss &gt;&gt; <span class="keywordtype">id</span> &gt;&gt; base &gt;&gt; <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(base, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset));</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">bool</span> matched = (<span class="keywordtype">id</span> == <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; (void)matched;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;Error adding GepObjNode into SVFIR!&quot;</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// //update ObjVar status</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; getline(F, line);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> base;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// Update callgraph</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>());</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; F.close();</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae94cea78b71fb75837ee2a17b5ed0e81"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">SVF::BVDataPTAImpl::getPTDataTy</a></div><div class="ttdeci">PTDataTy * getPTDataTy() const</div><div class="ttdoc">Get points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00150">PointerAnalysisImpl.h:150</a></div></div>
1817
1815
  <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1818
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a857cdacfc8cafdeb1431bdfa077ef9b5"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">SVF::BVDataPTAImpl::readFromModule</a></div><div class="ttdeci">virtual bool readFromModule()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00368">PointerAnalysisImpl.cpp:368</a></div></div>
1819
- <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a9fe3fa15a6a0ec25864cb8439a45596e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">SVF::LLVMModuleSet::getMainLLVMModule</a></div><div class="ttdeci">Module * getMainLLVMModule() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00306">LLVMModule.h:306</a></div></div>
1820
1816
  <div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
1821
1817
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac5683fe2e24b393ccc5cb6d8bc92cf2b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">SVF::PointerAnalysis::setObjFieldInsensitive</a></div><div class="ttdeci">void setObjFieldInsensitive(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00349">PointerAnalysis.h:349</a></div></div>
1822
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1818
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1823
1819
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
1824
1820
  <div class="ttc" id="classSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00157">PointsTo.cpp:157</a></div></div>
1825
1821
  <div class="ttc" id="cJSON_8cpp_html_a95bf816579e97b6f33bdb5e25ed6d5de"><div class="ttname"><a href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a></div><div class="ttdeci">buffer offset</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l01113">cJSON.cpp:1113</a></div></div>
1826
- <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
1827
1822
  <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>
1828
1823
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_acfdb43f20bbcababc928cc4df93a8483"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">SVF::BVDataPTAImpl::PTDataTy</a></div><div class="ttdeci">PTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00046">PointerAnalysisImpl.h:46</a></div></div>
1829
1824
  <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#l00142">PointerAnalysis.h:142</a></div></div>
1830
1825
  <div class="ttc" id="classSVF_1_1SVFIR_html_a2d2131128ceb3362b5dc89317cfd88a0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">SVF::SVFIR::getIndirectCallsites</a></div><div class="ttdeci">const CallSiteToFunPtrMap &amp; getIndirectCallsites() const</div><div class="ttdoc">Add/get indirect callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00318">SVFIR.h:318</a></div></div>
1831
1826
  <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#l00028">PointsTo.h:28</a></div></div>
1832
1827
  <div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00422">SVFIR.cpp:422</a></div></div>
1833
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aa534e475fa34fa322c567bc376a3da70"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">SVF::BVDataPTAImpl::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;)</div><div class="ttdoc">Update callgraph. This should be implemented by its subclass. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00161">PointerAnalysisImpl.h:161</a></div></div>
1834
- </div><!-- fragment -->
1835
- </div>
1836
- </div>
1837
- <a id="a857cdacfc8cafdeb1431bdfa077ef9b5"></a>
1838
- <h2 class="memtitle"><span class="permalink"><a href="#a857cdacfc8cafdeb1431bdfa077ef9b5">&#9670;&nbsp;</a></span>readFromModule()</h2>
1839
-
1840
- <div class="memitem">
1841
- <div class="memproto">
1842
- <table class="mlabels">
1843
- <tr>
1844
- <td class="mlabels-left">
1845
- <table class="memname">
1846
- <tr>
1847
- <td class="memname">bool BVDataPTAImpl::readFromModule </td>
1848
- <td>(</td>
1849
- <td class="paramname"></td><td>)</td>
1850
- <td></td>
1851
- </tr>
1852
- </table>
1853
- </td>
1854
- <td class="mlabels-right">
1855
- <span class="mlabels"><span class="mlabel">virtual</span></span> </td>
1856
- </tr>
1857
- </table>
1858
- </div><div class="memdoc">
1859
- <p>Load pointer analysis result from the metadata in the module. It populates <a class="el" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> with the points-to data, and updates <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> with the <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> offset nodes created during <a class="el" href="classSVF_1_1Andersen.html">Andersen</a>'s solving stage. </p>
1860
-
1861
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00368">368</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1862
- <div class="fragment"><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;{</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div><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#l00142">PointerAnalysis.h:142</a></div></div>
1828
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aa534e475fa34fa322c567bc376a3da70"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">SVF::BVDataPTAImpl::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;)</div><div class="ttdoc">Update callgraph. This should be implemented by its subclass. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00160">PointerAnalysisImpl.h:160</a></div></div>
1863
1829
  </div><!-- fragment -->
1864
1830
  </div>
1865
1831
  </div>
@@ -1881,8 +1847,8 @@ Additional Inherited Members</h2></td></tr>
1881
1847
 
1882
1848
  <p>Remap all points-to sets to use the current mapping. </p>
1883
1849
 
1884
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00157">157</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1885
- <div class="fragment"><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; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">remapAllPts</a>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae94cea78b71fb75837ee2a17b5ed0e81"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">SVF::BVDataPTAImpl::getPTDataTy</a></div><div class="ttdeci">PTDataTy * getPTDataTy() const</div><div class="ttdoc">Get points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00151">PointerAnalysisImpl.h:151</a></div></div>
1850
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00156">156</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1851
+ <div class="fragment"><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;{</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">remapAllPts</a>();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae94cea78b71fb75837ee2a17b5ed0e81"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">SVF::BVDataPTAImpl::getPTDataTy</a></div><div class="ttdeci">PTDataTy * getPTDataTy() const</div><div class="ttdoc">Get points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00150">PointerAnalysisImpl.h:150</a></div></div>
1886
1852
  <div class="ttc" id="classSVF_1_1PTData_html_af2f176027169e18730848c7a583aed93"><div class="ttname"><a href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">SVF::PTData::remapAllPts</a></div><div class="ttdeci">virtual void remapAllPts(void)=0</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div></div>
1887
1853
  </div><!-- fragment -->
1888
1854
  </div>
@@ -1925,7 +1891,7 @@ Additional Inherited Members</h2></td></tr>
1925
1891
  <p>Reimplemented in <a class="el" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">SVF::Andersen</a>, and <a class="el" href="classSVF_1_1Steensgaard.html#a61524c5a3521939b1546c78c68730c20">SVF::Steensgaard</a>.</p>
1926
1892
 
1927
1893
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00113">113</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1928
- <div class="fragment"><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;unionPts(<span class="keywordtype">id</span>, target);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1894
+ <div class="fragment"><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;unionPts(<span class="keywordtype">id</span>, target);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1929
1895
  </div><!-- fragment -->
1930
1896
  </div>
1931
1897
  </div>
@@ -1966,7 +1932,7 @@ Additional Inherited Members</h2></td></tr>
1966
1932
  <p>Reimplemented in <a class="el" href="classSVF_1_1Andersen.html#a8da98a9d33a6e9be329309f4af65e969">SVF::Andersen</a>, and <a class="el" href="classSVF_1_1Steensgaard.html#afcb7f051f50b65a09ec2bc065bb70735">SVF::Steensgaard</a>.</p>
1967
1933
 
1968
1934
  <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00117">117</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1969
- <div class="fragment"><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;unionPts(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00204">PointerAnalysisImpl.h:204</a></div></div>
1935
+ <div class="fragment"><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">ptD</a>-&gt;unionPts(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab283427a420ab349da4920ec10b7e1cd"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab283427a420ab349da4920ec10b7e1cd">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">std::unique_ptr&lt; PTDataTy &gt; ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00203">PointerAnalysisImpl.h:203</a></div></div>
1970
1936
  </div><!-- fragment -->
1971
1937
  </div>
1972
1938
  </div>
@@ -1998,12 +1964,12 @@ Additional Inherited Members</h2></td></tr>
1998
1964
 
1999
1965
  <p>Reimplemented in <a class="el" href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b">SVF::Andersen</a>, <a class="el" href="classSVF_1_1FlowSensitive.html#aad0bf334d3c749240ca27b4bcfd6eeab">SVF::FlowSensitive</a>, <a class="el" href="classSVF_1_1CFLAlias.html#a9637bcb592d250b5556b242d2ffc88fa">SVF::CFLAlias</a>, <a class="el" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">SVF::AndersenSCD</a>, and <a class="el" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065">SVF::AndersenBase</a>.</p>
2000
1966
 
2001
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00161">161</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
2002
- <div class="fragment"><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Virtual function not implemented!&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div></div><!-- fragment -->
1967
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00160">160</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
1968
+ <div class="fragment"><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Virtual function not implemented!&quot;</span>);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div></div><!-- fragment -->
2003
1969
  </div>
2004
1970
  </div>
2005
- <a id="a25c68f9d2b88437778e854ff0d741d1b"></a>
2006
- <h2 class="memtitle"><span class="permalink"><a href="#a25c68f9d2b88437778e854ff0d741d1b">&#9670;&nbsp;</a></span>writeToFile()</h2>
1971
+ <a id="a3279969934d6778a6cffe926ed724bfc"></a>
1972
+ <h2 class="memtitle"><span class="permalink"><a href="#a3279969934d6778a6cffe926ed724bfc">&#9670;&nbsp;</a></span>writeObjVarToFile()</h2>
2007
1973
 
2008
1974
  <div class="memitem">
2009
1975
  <div class="memproto">
@@ -2012,7 +1978,7 @@ Additional Inherited Members</h2></td></tr>
2012
1978
  <td class="mlabels-left">
2013
1979
  <table class="memname">
2014
1980
  <tr>
2015
- <td class="memname">void BVDataPTAImpl::writeToFile </td>
1981
+ <td class="memname">void BVDataPTAImpl::writeObjVarToFile </td>
2016
1982
  <td>(</td>
2017
1983
  <td class="paramtype">const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &amp;&#160;</td>
2018
1984
  <td class="paramname"><em>filename</em></td><td>)</td>
@@ -2026,12 +1992,8 @@ Additional Inherited Members</h2></td></tr>
2026
1992
  </table>
2027
1993
  </div><div class="memdoc">
2028
1994
 
2029
- <p>Interface for analysis result storage on filesystem. </p>
2030
- <p>Store pointer analysis result into a file. It includes the points-to relations, and all <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> nodes including those created when solving <a class="el" href="classSVF_1_1Andersen.html">Andersen</a>'s constraints. </p>
2031
-
2032
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00167">167</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
2033
- <div class="fragment"><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; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing pointer analysis results to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; error_code err;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (!f.good())</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// Write analysis results to file</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> var = it-&gt;first;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(var);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; stringstream ss;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; f &lt;&lt; var &lt;&lt; <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">empty</a>())</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>: pts)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; f &lt;&lt; <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjVar&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (NodeIDs.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; f &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; f &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; NodeIDs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(n);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// Write GepPAGNodes to file</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepObjPN = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pagNode))</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; f &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; f &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; f &lt;&lt; gepObjPN-&gt;getConstantFieldIdx() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; f.close();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</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#l00369">GenericGraph.h:369</a></div></div>
2034
- <div class="ttc" id="classSVF_1_1PointsTo_html_a13746982a11d0cab57e5919d53bfbec8"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00098">PointsTo.cpp:98</a></div></div>
1995
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00161">161</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
1996
+ <div class="fragment"><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing ObjVar to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; error_code err;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (!f.good())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjVar&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (NodeIDs.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; f &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; f &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; NodeIDs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(n);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; f.close();</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</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#l00369">GenericGraph.h:369</a></div></div>
2035
1997
  <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
2036
1998
  <div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00425">SVFIR.h:425</a></div></div>
2037
1999
  <div class="ttc" id="classSVF_1_1SparseBitVector_html_a112f2ede1240c95f9fe810f2882fab80"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">SVF::SparseBitVector::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00700">SparseBitVector.h:700</a></div></div>
@@ -2039,19 +2001,15 @@ Additional Inherited Members</h2></td></tr>
2039
2001
  <div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
2040
2002
  <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#l00373">GenericGraph.h:373</a></div></div>
2041
2003
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
2042
- <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00426">SVFVariables.h:426</a></div></div>
2043
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aa0ca07204a31004fb876c6e18d1ac1ca"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">SVF::BVDataPTAImpl::writeToModule</a></div><div class="ttdeci">virtual void writeToModule()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00356">PointerAnalysisImpl.cpp:356</a></div></div>
2044
2004
  <div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00454">SparseBitVector.h:454</a></div></div>
2045
- <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac9897a09cad8a99169f2da2116807b1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">const PointsTo &amp; getPts(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00088">PointerAnalysisImpl.h:88</a></div></div>
2046
2005
  <div class="ttc" id="classSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00739">SparseBitVector.h:739</a></div></div>
2047
2006
  <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#l00142">PointerAnalysis.h:142</a></div></div>
2048
2007
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0f71e4cd0948b294c7d33a690bde7dbe"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">SVF::PointerAnalysis::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00354">PointerAnalysis.h:354</a></div></div>
2049
- <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#l00028">PointsTo.h:28</a></div></div>
2050
2008
  </div><!-- fragment -->
2051
2009
  </div>
2052
2010
  </div>
2053
- <a id="aa0ca07204a31004fb876c6e18d1ac1ca"></a>
2054
- <h2 class="memtitle"><span class="permalink"><a href="#aa0ca07204a31004fb876c6e18d1ac1ca">&#9670;&nbsp;</a></span>writeToModule()</h2>
2011
+ <a id="a25c68f9d2b88437778e854ff0d741d1b"></a>
2012
+ <h2 class="memtitle"><span class="permalink"><a href="#a25c68f9d2b88437778e854ff0d741d1b">&#9670;&nbsp;</a></span>writeToFile()</h2>
2055
2013
 
2056
2014
  <div class="memitem">
2057
2015
  <div class="memproto">
@@ -2060,9 +2018,10 @@ Additional Inherited Members</h2></td></tr>
2060
2018
  <td class="mlabels-left">
2061
2019
  <table class="memname">
2062
2020
  <tr>
2063
- <td class="memname">void BVDataPTAImpl::writeToModule </td>
2021
+ <td class="memname">void BVDataPTAImpl::writeToFile </td>
2064
2022
  <td>(</td>
2065
- <td class="paramname"></td><td>)</td>
2023
+ <td class="paramtype">const <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &amp;&#160;</td>
2024
+ <td class="paramname"><em>filename</em></td><td>)</td>
2066
2025
  <td></td>
2067
2026
  </tr>
2068
2027
  </table>
@@ -2072,10 +2031,27 @@ Additional Inherited Members</h2></td></tr>
2072
2031
  </tr>
2073
2032
  </table>
2074
2033
  </div><div class="memdoc">
2075
- <p>Store pointer analysis result into the current LLVM module as metadata. It includes the points-to relations, and all <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> nodes including those created when solving <a class="el" href="classSVF_1_1Andersen.html">Andersen</a>'s constraints. </p>
2076
2034
 
2077
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00356">356</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
2078
- <div class="fragment"><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;{</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</div><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#l00142">PointerAnalysis.h:142</a></div></div>
2035
+ <p>Interface for analysis result storage on filesystem. </p>
2036
+ <p>Store pointer analysis result into a file. It includes the points-to relations, and all <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> nodes including those created when solving <a class="el" href="classSVF_1_1Andersen.html">Andersen</a>'s constraints. </p>
2037
+
2038
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8cpp_source.html#l00202">202</a> of file <a class="el" href="PointerAnalysisImpl_8cpp_source.html">PointerAnalysisImpl.cpp</a>.</p>
2039
+ <div class="fragment"><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing pointer analysis results to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; error_code err;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; std::fstream f(filename.c_str(), std::ios_base::app);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (!f.good())</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// Write analysis results to file</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> var = it-&gt;first;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">getPts</a>(var);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; stringstream ss;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; f &lt;&lt; var &lt;&lt; <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">empty</a>())</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>: pts)</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; f &lt;&lt; <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// Write GepPAGNodes to file</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepObjPN = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pagNode))</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; f &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; f &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; f &lt;&lt; gepObjPN-&gt;getConstantFieldIdx() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjVar&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(it-&gt;first);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (NodeIDs.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; f &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; f &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; NodeIDs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(n);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; f.close();</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;}</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#l00369">GenericGraph.h:369</a></div></div>
2040
+ <div class="ttc" id="classSVF_1_1PointsTo_html_a13746982a11d0cab57e5919d53bfbec8"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00098">PointsTo.cpp:98</a></div></div>
2041
+ <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
2042
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00425">SVFIR.h:425</a></div></div>
2043
+ <div class="ttc" id="classSVF_1_1SparseBitVector_html_a112f2ede1240c95f9fe810f2882fab80"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">SVF::SparseBitVector::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00700">SparseBitVector.h:700</a></div></div>
2044
+ <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#l00045">SVFVariables.h:45</a></div></div>
2045
+ <div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
2046
+ <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#l00373">GenericGraph.h:373</a></div></div>
2047
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
2048
+ <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00426">SVFVariables.h:426</a></div></div>
2049
+ <div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00454">SparseBitVector.h:454</a></div></div>
2050
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac9897a09cad8a99169f2da2116807b1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac9897a09cad8a99169f2da2116807b1b">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">const PointsTo &amp; getPts(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00088">PointerAnalysisImpl.h:88</a></div></div>
2051
+ <div class="ttc" id="classSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00739">SparseBitVector.h:739</a></div></div>
2052
+ <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#l00142">PointerAnalysis.h:142</a></div></div>
2053
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0f71e4cd0948b294c7d33a690bde7dbe"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">SVF::PointerAnalysis::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00354">PointerAnalysis.h:354</a></div></div>
2054
+ <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#l00028">PointsTo.h:28</a></div></div>
2079
2055
  </div><!-- fragment -->
2080
2056
  </div>
2081
2057
  </div>
@@ -2100,7 +2076,7 @@ Additional Inherited Members</h2></td></tr>
2100
2076
  </table>
2101
2077
  </div><div class="memdoc">
2102
2078
 
2103
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00206">206</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
2079
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00205">205</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
2104
2080
 
2105
2081
  </div>
2106
2082
  </div>
@@ -2126,7 +2102,7 @@ Additional Inherited Members</h2></td></tr>
2126
2102
 
2127
2103
  <p>Points-to data. </p>
2128
2104
 
2129
- <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00204">204</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
2105
+ <p class="definition">Definition at line <a class="el" href="PointerAnalysisImpl_8h_source.html#l00203">203</a> of file <a class="el" href="PointerAnalysisImpl_8h_source.html">PointerAnalysisImpl.h</a>.</p>
2130
2106
 
2131
2107
  </div>
2132
2108
  </div>