svf-tools 1.0.818 → 1.0.820

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 (242) hide show
  1. package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp.html +1 -0
  2. package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp_source.html +212 -175
  3. package/SVF-doxygen/html/CFBasicBlockGBuilder_8h_source.html +5 -5
  4. package/SVF-doxygen/html/SVFBugReport_8cpp_source.html +81 -69
  5. package/SVF-doxygen/html/SVFBugReport_8h_source.html +135 -121
  6. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder.html +190 -161
  7. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  8. package/SVF-doxygen/html/classSVF_1_1FileChecker.html +1 -1
  9. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +1 -1
  10. package/SVF-doxygen/html/classSVF_1_1SVFBugReport-members.html +9 -5
  11. package/SVF-doxygen/html/classSVF_1_1SVFBugReport.html +307 -161
  12. package/SVF-doxygen/html/functions_c.html +24 -19
  13. package/SVF-doxygen/html/functions_func_i.html +1 -1
  14. package/SVF-doxygen/html/functions_func_s.html +25 -22
  15. package/SVF-doxygen/html/functions_i.html +1 -1
  16. package/SVF-doxygen/html/functions_l.html +3 -3
  17. package/SVF-doxygen/html/functions_m.html +4 -3
  18. package/SVF-doxygen/html/functions_n.html +4 -4
  19. package/SVF-doxygen/html/functions_o.html +4 -4
  20. package/SVF-doxygen/html/functions_p.html +11 -11
  21. package/SVF-doxygen/html/functions_r.html +4 -6
  22. package/SVF-doxygen/html/functions_s.html +26 -21
  23. package/SVF-doxygen/html/functions_t.html +8 -5
  24. package/SVF-doxygen/html/functions_v.html +6 -6
  25. package/SVF-doxygen/html/functions_vars_c.html +3 -0
  26. package/SVF-doxygen/html/functions_vars_m.html +1 -0
  27. package/SVF-doxygen/html/functions_vars_t.html +3 -0
  28. package/SVF-doxygen/html/functions_w.html +1 -1
  29. package/SVF-doxygen/html/search/all_10.js +324 -324
  30. package/SVF-doxygen/html/search/all_11.js +222 -222
  31. package/SVF-doxygen/html/search/all_12.js +545 -544
  32. package/SVF-doxygen/html/search/all_13.js +192 -191
  33. package/SVF-doxygen/html/search/all_14.js +67 -67
  34. package/SVF-doxygen/html/search/all_15.js +167 -167
  35. package/SVF-doxygen/html/search/all_16.js +63 -63
  36. package/SVF-doxygen/html/search/all_17.js +1 -1
  37. package/SVF-doxygen/html/search/all_18.js +1 -1
  38. package/SVF-doxygen/html/search/all_19.js +11 -11
  39. package/SVF-doxygen/html/search/all_1a.js +172 -172
  40. package/SVF-doxygen/html/search/all_3.js +138 -137
  41. package/SVF-doxygen/html/search/all_4.js +233 -233
  42. package/SVF-doxygen/html/search/all_5.js +119 -119
  43. package/SVF-doxygen/html/search/all_6.js +225 -225
  44. package/SVF-doxygen/html/search/all_7.js +1044 -1044
  45. package/SVF-doxygen/html/search/all_8.js +197 -197
  46. package/SVF-doxygen/html/search/all_9.js +607 -607
  47. package/SVF-doxygen/html/search/all_a.js +46 -46
  48. package/SVF-doxygen/html/search/all_b.js +26 -26
  49. package/SVF-doxygen/html/search/all_c.js +116 -116
  50. package/SVF-doxygen/html/search/all_d.js +196 -196
  51. package/SVF-doxygen/html/search/all_e.js +207 -207
  52. package/SVF-doxygen/html/search/all_f.js +115 -115
  53. package/SVF-doxygen/html/search/classes_0.js +26 -26
  54. package/SVF-doxygen/html/search/classes_1.js +9 -9
  55. package/SVF-doxygen/html/search/classes_10.js +73 -73
  56. package/SVF-doxygen/html/search/classes_11.js +15 -15
  57. package/SVF-doxygen/html/search/classes_12.js +2 -2
  58. package/SVF-doxygen/html/search/classes_13.js +10 -10
  59. package/SVF-doxygen/html/search/classes_14.js +14 -14
  60. package/SVF-doxygen/html/search/classes_15.js +1 -1
  61. package/SVF-doxygen/html/search/classes_2.js +80 -80
  62. package/SVF-doxygen/html/search/classes_3.js +37 -37
  63. package/SVF-doxygen/html/search/classes_4.js +9 -9
  64. package/SVF-doxygen/html/search/classes_5.js +28 -28
  65. package/SVF-doxygen/html/search/classes_6.js +104 -104
  66. package/SVF-doxygen/html/search/classes_7.js +33 -33
  67. package/SVF-doxygen/html/search/classes_8.js +56 -56
  68. package/SVF-doxygen/html/search/classes_9.js +1 -1
  69. package/SVF-doxygen/html/search/classes_a.js +12 -12
  70. package/SVF-doxygen/html/search/classes_b.js +29 -29
  71. package/SVF-doxygen/html/search/classes_c.js +6 -6
  72. package/SVF-doxygen/html/search/classes_d.js +18 -18
  73. package/SVF-doxygen/html/search/classes_e.js +36 -36
  74. package/SVF-doxygen/html/search/classes_f.js +25 -25
  75. package/SVF-doxygen/html/search/defines_0.js +3 -3
  76. package/SVF-doxygen/html/search/defines_1.js +2 -2
  77. package/SVF-doxygen/html/search/defines_2.js +30 -30
  78. package/SVF-doxygen/html/search/defines_3.js +21 -21
  79. package/SVF-doxygen/html/search/defines_4.js +2 -2
  80. package/SVF-doxygen/html/search/defines_5.js +4 -4
  81. package/SVF-doxygen/html/search/defines_6.js +2 -2
  82. package/SVF-doxygen/html/search/defines_7.js +5 -5
  83. package/SVF-doxygen/html/search/defines_8.js +11 -11
  84. package/SVF-doxygen/html/search/defines_9.js +9 -9
  85. package/SVF-doxygen/html/search/defines_a.js +2 -2
  86. package/SVF-doxygen/html/search/defines_b.js +1 -1
  87. package/SVF-doxygen/html/search/defines_c.js +3 -3
  88. package/SVF-doxygen/html/search/defines_d.js +2 -2
  89. package/SVF-doxygen/html/search/defines_e.js +7 -7
  90. package/SVF-doxygen/html/search/defines_f.js +3 -3
  91. package/SVF-doxygen/html/search/enums_0.js +3 -3
  92. package/SVF-doxygen/html/search/enums_1.js +2 -2
  93. package/SVF-doxygen/html/search/enums_10.js +1 -1
  94. package/SVF-doxygen/html/search/enums_11.js +1 -1
  95. package/SVF-doxygen/html/search/enums_2.js +8 -8
  96. package/SVF-doxygen/html/search/enums_3.js +1 -1
  97. package/SVF-doxygen/html/search/enums_4.js +3 -3
  98. package/SVF-doxygen/html/search/enums_5.js +1 -1
  99. package/SVF-doxygen/html/search/enums_6.js +2 -2
  100. package/SVF-doxygen/html/search/enums_7.js +2 -2
  101. package/SVF-doxygen/html/search/enums_8.js +4 -4
  102. package/SVF-doxygen/html/search/enums_9.js +1 -1
  103. package/SVF-doxygen/html/search/enums_a.js +1 -1
  104. package/SVF-doxygen/html/search/enums_b.js +7 -7
  105. package/SVF-doxygen/html/search/enums_c.js +1 -1
  106. package/SVF-doxygen/html/search/enums_d.js +4 -4
  107. package/SVF-doxygen/html/search/enums_e.js +2 -2
  108. package/SVF-doxygen/html/search/enums_f.js +4 -4
  109. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  110. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  111. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  112. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  113. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  114. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  115. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  116. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  117. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  118. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  119. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  120. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  121. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  122. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  123. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  124. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  125. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  126. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  127. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  128. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  129. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  130. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  131. package/SVF-doxygen/html/search/files_0.js +13 -13
  132. package/SVF-doxygen/html/search/files_1.js +7 -7
  133. package/SVF-doxygen/html/search/files_10.js +8 -8
  134. package/SVF-doxygen/html/search/files_11.js +8 -8
  135. package/SVF-doxygen/html/search/files_12.js +2 -2
  136. package/SVF-doxygen/html/search/files_2.js +55 -55
  137. package/SVF-doxygen/html/search/files_3.js +14 -14
  138. package/SVF-doxygen/html/search/files_4.js +5 -5
  139. package/SVF-doxygen/html/search/files_5.js +13 -13
  140. package/SVF-doxygen/html/search/files_6.js +9 -9
  141. package/SVF-doxygen/html/search/files_7.js +14 -14
  142. package/SVF-doxygen/html/search/files_8.js +13 -13
  143. package/SVF-doxygen/html/search/files_9.js +18 -18
  144. package/SVF-doxygen/html/search/files_a.js +3 -3
  145. package/SVF-doxygen/html/search/files_b.js +2 -2
  146. package/SVF-doxygen/html/search/files_c.js +20 -20
  147. package/SVF-doxygen/html/search/files_d.js +4 -4
  148. package/SVF-doxygen/html/search/files_e.js +62 -62
  149. package/SVF-doxygen/html/search/files_f.js +8 -8
  150. package/SVF-doxygen/html/search/functions_0.js +12 -12
  151. package/SVF-doxygen/html/search/functions_1.js +360 -360
  152. package/SVF-doxygen/html/search/functions_10.js +140 -140
  153. package/SVF-doxygen/html/search/functions_11.js +138 -138
  154. package/SVF-doxygen/html/search/functions_12.js +280 -279
  155. package/SVF-doxygen/html/search/functions_13.js +59 -59
  156. package/SVF-doxygen/html/search/functions_14.js +39 -39
  157. package/SVF-doxygen/html/search/functions_15.js +71 -71
  158. package/SVF-doxygen/html/search/functions_16.js +32 -32
  159. package/SVF-doxygen/html/search/functions_17.js +3 -3
  160. package/SVF-doxygen/html/search/functions_18.js +172 -172
  161. package/SVF-doxygen/html/search/functions_2.js +87 -87
  162. package/SVF-doxygen/html/search/functions_3.js +257 -257
  163. package/SVF-doxygen/html/search/functions_4.js +75 -75
  164. package/SVF-doxygen/html/search/functions_5.js +53 -53
  165. package/SVF-doxygen/html/search/functions_6.js +59 -59
  166. package/SVF-doxygen/html/search/functions_7.js +854 -854
  167. package/SVF-doxygen/html/search/functions_8.js +149 -149
  168. package/SVF-doxygen/html/search/functions_9.js +423 -423
  169. package/SVF-doxygen/html/search/functions_a.js +30 -30
  170. package/SVF-doxygen/html/search/functions_b.js +2 -2
  171. package/SVF-doxygen/html/search/functions_c.js +26 -26
  172. package/SVF-doxygen/html/search/functions_d.js +77 -77
  173. package/SVF-doxygen/html/search/functions_e.js +35 -35
  174. package/SVF-doxygen/html/search/functions_f.js +56 -56
  175. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  176. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  177. package/SVF-doxygen/html/search/related_0.js +2 -2
  178. package/SVF-doxygen/html/search/related_1.js +2 -2
  179. package/SVF-doxygen/html/search/related_2.js +2 -2
  180. package/SVF-doxygen/html/search/related_3.js +2 -2
  181. package/SVF-doxygen/html/search/related_4.js +2 -2
  182. package/SVF-doxygen/html/search/related_5.js +1 -1
  183. package/SVF-doxygen/html/search/related_6.js +2 -2
  184. package/SVF-doxygen/html/search/related_7.js +4 -4
  185. package/SVF-doxygen/html/search/related_8.js +2 -2
  186. package/SVF-doxygen/html/search/related_9.js +4 -4
  187. package/SVF-doxygen/html/search/related_a.js +19 -19
  188. package/SVF-doxygen/html/search/related_b.js +4 -4
  189. package/SVF-doxygen/html/search/related_c.js +1 -1
  190. package/SVF-doxygen/html/search/related_d.js +12 -12
  191. package/SVF-doxygen/html/search/related_e.js +2 -2
  192. package/SVF-doxygen/html/search/related_f.js +2 -2
  193. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  194. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  195. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  196. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  197. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  198. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  199. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  200. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  201. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  202. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  203. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  204. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  205. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  206. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  207. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  208. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  209. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  210. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  211. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  212. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  213. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  214. package/SVF-doxygen/html/search/variables_0.js +151 -151
  215. package/SVF-doxygen/html/search/variables_1.js +75 -75
  216. package/SVF-doxygen/html/search/variables_10.js +97 -97
  217. package/SVF-doxygen/html/search/variables_11.js +44 -44
  218. package/SVF-doxygen/html/search/variables_12.js +92 -92
  219. package/SVF-doxygen/html/search/variables_13.js +76 -75
  220. package/SVF-doxygen/html/search/variables_14.js +14 -14
  221. package/SVF-doxygen/html/search/variables_15.js +48 -48
  222. package/SVF-doxygen/html/search/variables_16.js +9 -9
  223. package/SVF-doxygen/html/search/variables_17.js +1 -1
  224. package/SVF-doxygen/html/search/variables_18.js +2 -2
  225. package/SVF-doxygen/html/search/variables_2.js +38 -38
  226. package/SVF-doxygen/html/search/variables_3.js +143 -142
  227. package/SVF-doxygen/html/search/variables_4.js +55 -55
  228. package/SVF-doxygen/html/search/variables_5.js +37 -37
  229. package/SVF-doxygen/html/search/variables_6.js +66 -66
  230. package/SVF-doxygen/html/search/variables_7.js +34 -34
  231. package/SVF-doxygen/html/search/variables_8.js +7 -7
  232. package/SVF-doxygen/html/search/variables_9.js +78 -78
  233. package/SVF-doxygen/html/search/variables_a.js +4 -4
  234. package/SVF-doxygen/html/search/variables_b.js +10 -10
  235. package/SVF-doxygen/html/search/variables_c.js +45 -45
  236. package/SVF-doxygen/html/search/variables_d.js +56 -56
  237. package/SVF-doxygen/html/search/variables_e.js +123 -123
  238. package/SVF-doxygen/html/search/variables_f.js +29 -29
  239. package/package.json +1 -1
  240. package/svf/include/Util/SVFBugReport.h +10 -0
  241. package/svf/lib/Util/CFBasicBlockGBuilder.cpp +56 -28
  242. package/svf/lib/Util/SVFBugReport.cpp +46 -32
@@ -99,197 +99,234 @@ $(function() {
99
99
  <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div>
100
100
  <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CFBasicBlockGBuilder_8h.html">Util/CFBasicBlockGBuilder.h</a>&quot;</span></div>
101
101
  <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
102
- <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div>
103
- <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
104
- <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
105
- <div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6"> 40</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">CFBasicBlockGBuilder::initCFBasicBlockGNodes</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
106
- <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
107
- <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
108
- <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;node : *icfg)</div>
109
- <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
110
- <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a> *pNode;</div>
111
- <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *bb = node.second-&gt;getBB())</div>
112
- <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
113
- <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node.second))</div>
114
- <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
115
- <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the CallICFGNode</span></div>
116
- <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({callNode});</div>
117
- <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; bbToNodes[bb].push_back(pNode);</div>
118
- <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
119
- <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
120
- <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the corresponding RetICFGNode</span></div>
121
- <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">auto</span> *retNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({callNode-&gt;getRetICFGNode()});</div>
122
- <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; bbToNodes[bb].push_back(retNode);</div>
123
- <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(retNode);</div>
124
- <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
125
- <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SVFUtil::isa&lt;RetICFGNode&gt;(node.second))</div>
126
- <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
127
- <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (bbToNodes.find(bb) == bbToNodes.end())</div>
128
- <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
129
- <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the non-CallICFGNode</span></div>
130
- <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({node.second});</div>
131
- <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; bbToNodes[node.second-&gt;getBB()] = {pNode};</div>
132
- <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
133
- <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
134
- <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">else</span></div>
135
- <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
136
- <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; pNode = bbToNodes[node.second-&gt;getBB()].back();</div>
137
- <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;RetICFGNode&gt;(pNode-&gt;<a class="code" href="classSVF_1_1CFBasicBlockNode.html#afdad57a83c392a8b14b838ecb58f9ff7">getICFGNodes</a>()[0]))</div>
138
- <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
139
- <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Add the non-CallICFGNode to the existing CFBasicBlockNode</span></div>
140
- <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; pNode-&gt;<a class="code" href="classSVF_1_1CFBasicBlockNode.html#a5374f4567cee38325f61940f4edbb142">addNode</a>(node.second);</div>
141
- <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
142
- <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">else</span></div>
143
- <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
144
- <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the non-CallICFGNode</span></div>
145
- <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({node.second});</div>
146
- <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; bbToNodes[node.second-&gt;getBB()].push_back(pNode);</div>
147
- <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
148
- <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
149
- <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
150
- <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
151
- <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
152
- <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
153
- <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div>
154
- <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
155
- <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
156
- <div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608"> 97</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">CFBasicBlockGBuilder::addInterBBEdge</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
157
- <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
158
- <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div>
159
- <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Connect inter-BB BBNodes</span></div>
160
- <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;node : *icfg)</div>
161
- <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
162
- <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;succ : node.second-&gt;getOutEdges())</div>
163
- <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
164
- <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Check if it&#39;s an intraCFGEdge in case of recursive functions</span></div>
165
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// if recursive functions, node_fun == succ_fun but they are different call context</span></div>
166
- <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// edges related to recursive functions would be added in addInterProceduralEdge()</span></div>
167
- <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (succ-&gt;isIntraCFGEdge())</div>
168
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
169
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *node_fun = node.second-&gt;getFun();</div>
170
- <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *succ_fun = succ-&gt;getDstNode()-&gt;getFun();</div>
171
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *node_bb = node.second-&gt;getBB();</div>
172
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *succ_bb = succ-&gt;getDstNode()-&gt;getBB();</div>
173
- <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span> (node_fun == succ_fun)</div>
174
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div>
175
- <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (node_bb != succ_bb)</div>
176
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div>
177
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// Create a new CFBasicBlockEdge connecting the last node of the source BB</span></div>
178
- <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// and the first node of the destination BB</span></div>
179
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(</div>
180
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; bbToNodes[node_bb].back(),</div>
181
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; bbToNodes[succ_bb].front(), succ);</div>
182
- <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
183
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div>
184
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
185
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
186
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div>
187
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
188
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div>
189
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
190
- <div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31"> 137</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">CFBasicBlockGBuilder::addIntraBBEdge</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
191
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
192
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div>
193
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// Connect intra-BB BBNodes</span></div>
194
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;bbNodes : bbToNodes)</div>
195
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
196
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; bbNodes.second.size() - 1; ++i)</div>
197
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
198
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Check if an intraCFGEdge exists between the last node of the source BB and the first node of the destination BB</span></div>
199
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a> *icfgEdge = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5dd4ac55123501c47c628adcf27e2475">getICFGEdge</a>(</div>
200
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *<span class="keyword">&gt;</span>(bbNodes.second[i]-&gt;getICFGNodes().back()),</div>
201
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *<span class="keyword">&gt;</span>(bbNodes.second[i + 1]-&gt;getICFGNodes().front()),</div>
202
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">ICFGEdge::IntraCF</a>))</div>
203
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
204
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(bbNodes.second[i], bbNodes.second[i + 1], icfgEdge);</div>
205
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
206
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
207
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">else</span></div>
208
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
209
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// No intra-procedural edge found, possibly an external API call</span></div>
210
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
211
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
212
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
213
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div>
214
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
215
- <div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913"> 168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">CFBasicBlockGBuilder::addInterProceduralEdge</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
216
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
217
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div>
218
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// Connect inter-procedural BBNodes</span></div>
219
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;bbNodes : bbToNodes)</div>
220
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
221
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; bbNodes.second.size(); ++i)</div>
222
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div>
223
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callICFGNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(</div>
224
- <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; bbNodes.second[i]-&gt;getICFGNodes().front()))</div>
102
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="SVFIR_8h.html">SVFIR/SVFIR.h</a>&gt;</span></div>
103
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
104
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div>
105
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
106
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
107
+ <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">CFBasicBlockGBuilder::initCFBasicBlockGNodes</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
108
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
109
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div>
110
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;func : *<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>()-&gt;getModule())</div>
111
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
112
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; bb: *func)</div>
113
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
114
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; inst: *bb)</div>
115
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
116
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#abb2bbf6e0dc5adae2140a519259e6f17">SVFUtil::isIntrinsicInst</a>(inst)) <span class="keywordflow">continue</span>;</div>
117
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst);</div>
118
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(icfgNode))</div>
119
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
120
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the CallICFGNode</span></div>
121
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>* pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({callNode});</div>
122
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; bbToNodes[bb].push_back(pNode);</div>
123
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
124
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
125
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the corresponding RetICFGNode</span></div>
126
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">auto</span> *retNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({callNode-&gt;getRetICFGNode()});</div>
127
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; bbToNodes[bb].push_back(retNode);</div>
128
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(retNode);</div>
129
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
130
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span></div>
131
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
132
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (bbToNodes.find(bb) == bbToNodes.end())</div>
133
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
134
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the non-CallICFGNode</span></div>
135
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>* pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({icfgNode});</div>
136
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; bbToNodes[bb] = {pNode};</div>
137
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
138
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
139
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">else</span></div>
140
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
141
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>* pNode = bbToNodes[bb].back();</div>
142
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;RetICFGNode&gt;(pNode-&gt;<a class="code" href="classSVF_1_1CFBasicBlockNode.html#afdad57a83c392a8b14b838ecb58f9ff7">getICFGNodes</a>()[0]))</div>
143
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
144
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// Add the non-CallICFGNode to the existing CFBasicBlockNode</span></div>
145
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; pNode-&gt;<a class="code" href="classSVF_1_1CFBasicBlockNode.html#a5374f4567cee38325f61940f4edbb142">addNode</a>(icfgNode);</div>
146
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
147
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">else</span></div>
148
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
149
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// Create a new CFBasicBlockNode for the non-CallICFGNode</span></div>
150
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({icfgNode});</div>
151
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; bbToNodes[bb].push_back(pNode);</div>
152
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
153
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
154
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
155
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
156
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
157
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
158
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
159
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* funEntryNode = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(func))</div>
160
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
161
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* bb = funEntryNode-&gt;getBB())</div>
162
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
163
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; std::vector&lt;CFBasicBlockNode *&gt;&amp; <a class="code" href="namespaceSVF.html#ae6c7046834fe00382052ece7d06eb0ac">nodes</a> = bbToNodes[bb];</div>
164
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>* pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({funEntryNode});</div>
165
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespaceSVF.html#ae6c7046834fe00382052ece7d06eb0ac">nodes</a>.insert(<a class="code" href="namespaceSVF.html#ae6c7046834fe00382052ece7d06eb0ac">nodes</a>.begin(), pNode);</div>
166
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
167
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
168
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
169
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
170
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* funExitNode = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(func))</div>
171
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
172
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* bb = funExitNode-&gt;getBB())</div>
173
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
174
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; std::vector&lt;CFBasicBlockNode *&gt;&amp; <a class="code" href="namespaceSVF.html#ae6c7046834fe00382052ece7d06eb0ac">nodes</a> = bbToNodes[bb];</div>
175
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>* pNode = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a>({funExitNode});</div>
176
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespaceSVF.html#ae6c7046834fe00382052ece7d06eb0ac">nodes</a>.push_back(pNode);</div>
177
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
178
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
179
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
180
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
181
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div>
182
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
183
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
184
+ <div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608"> 125</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">CFBasicBlockGBuilder::addInterBBEdge</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
185
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
186
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;{</div>
187
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// Connect inter-BB BBNodes</span></div>
188
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;node : *icfg)</div>
189
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
190
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;succ : node.second-&gt;getOutEdges())</div>
191
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
192
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Check if it&#39;s an intraCFGEdge in case of recursive functions</span></div>
193
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// if recursive functions, node_fun == succ_fun but they are different call context</span></div>
194
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">// edges related to recursive functions would be added in addInterProceduralEdge()</span></div>
195
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (succ-&gt;isIntraCFGEdge())</div>
196
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
197
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *node_fun = node.second-&gt;getFun();</div>
198
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *succ_fun = succ-&gt;getDstNode()-&gt;getFun();</div>
199
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *node_bb = node.second-&gt;getBB();</div>
200
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *succ_bb = succ-&gt;getDstNode()-&gt;getBB();</div>
201
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (node_fun == succ_fun)</div>
202
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
203
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">if</span> (node_bb != succ_bb)</div>
204
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div>
205
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Create a new CFBasicBlockEdge connecting the last node of the source BB</span></div>
206
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// and the first node of the destination BB</span></div>
207
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(</div>
208
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; bbToNodes[node_bb].back(),</div>
209
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; bbToNodes[succ_bb].front(), succ);</div>
210
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
211
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div>
212
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
213
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div>
214
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
215
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
216
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div>
217
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
218
+ <div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31"> 165</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">CFBasicBlockGBuilder::addIntraBBEdge</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
219
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
220
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div>
221
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// Connect intra-BB BBNodes</span></div>
222
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;bbNodes : bbToNodes)</div>
223
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div>
224
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; bbNodes.second.size() - 1; ++i)</div>
225
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div>
226
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// Check if an intraCFGEdge exists between the last node of the source BB and the first node of the destination BB</span></div>
227
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a> *icfgEdge = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5dd4ac55123501c47c628adcf27e2475">getICFGEdge</a>(</div>
228
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *<span class="keyword">&gt;</span>(bbNodes.second[i]-&gt;getICFGNodes().back()),</div>
229
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *<span class="keyword">&gt;</span>(bbNodes.second[i + 1]-&gt;getICFGNodes().front()),</div>
230
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">ICFGEdge::IntraCF</a>))</div>
225
231
  <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div>
226
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;icfgEdge : callICFGNode-&gt;getOutEdges())</div>
227
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div>
228
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a> *callEdge = SVFUtil::dyn_cast&lt;CallCFGEdge&gt;(icfgEdge))</div>
229
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
230
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(bbNodes.second[i],</div>
231
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; bbToNodes[callEdge-&gt;getDstNode()-&gt;getBB()].front(),</div>
232
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; callEdge);</div>
233
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
234
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
235
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
236
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
237
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a> *retICFGNode = SVFUtil::dyn_cast&lt;RetICFGNode&gt;(</div>
238
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; bbNodes.second[i]-&gt;getICFGNodes().front()))</div>
239
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
240
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;icfgEdge : retICFGNode-&gt;getInEdges())</div>
241
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div>
242
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a> *retEdge = SVFUtil::dyn_cast&lt;RetCFGEdge&gt;(icfgEdge))</div>
243
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div>
244
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// no return function</span></div>
245
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span>(!retEdge-&gt;getSrcNode()-&gt;getFun()-&gt;hasReturn()) <span class="keywordflow">continue</span>;</div>
246
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(bbToNodes[retEdge-&gt;getSrcNode()-&gt;getBB()].back(),</div>
247
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; bbNodes.second[i],</div>
248
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; retEdge);</div>
249
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
250
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
251
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div>
252
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
253
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">else</span></div>
254
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; {</div>
255
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Other nodes are intra-procedural</span></div>
256
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
257
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div>
258
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
259
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;}</div>
260
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
261
- <div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf"> 219</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf">CFBasicBlockGBuilder::build</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg)</div>
262
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;{</div>
263
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockGraph.html">CFBasicBlockGraph</a>();</div>
264
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFBasicBlock *, std::vector&lt;CFBasicBlockNode *&gt;</a>&gt; bbToNodes;</div>
265
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
266
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">initCFBasicBlockGNodes</a>(icfg, bbToNodes);</div>
267
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">addInterBBEdge</a>(icfg, bbToNodes);</div>
268
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">addIntraBBEdge</a>(icfg, bbToNodes);</div>
269
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">addInterProceduralEdge</a>(icfg, bbToNodes);</div>
270
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
271
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
272
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;}</div>
232
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(bbNodes.second[i], bbNodes.second[i + 1], icfgEdge);</div>
233
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
234
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
235
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">else</span></div>
236
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div>
237
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// No intra-procedural edge found, possibly an external API call</span></div>
238
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div>
239
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
240
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
241
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;}</div>
242
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
243
+ <div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913"> 196</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">CFBasicBlockGBuilder::addInterProceduralEdge</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg,</div>
244
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *, std::vector&lt;CFBasicBlockNode *&gt;&gt; &amp;bbToNodes)</div>
245
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;{</div>
246
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Connect inter-procedural BBNodes</span></div>
247
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;bbNodes : bbToNodes)</div>
248
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div>
249
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; bbNodes.second.size(); ++i)</div>
250
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
251
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callICFGNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(</div>
252
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; bbNodes.second[i]-&gt;getICFGNodes().front()))</div>
253
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
254
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;icfgEdge : callICFGNode-&gt;getOutEdges())</div>
255
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div>
256
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a> *callEdge = SVFUtil::dyn_cast&lt;CallCFGEdge&gt;(icfgEdge))</div>
257
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
258
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(bbNodes.second[i],</div>
259
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; bbToNodes[callEdge-&gt;getDstNode()-&gt;getBB()].front(),</div>
260
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; callEdge);</div>
261
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
262
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
263
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div>
264
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div>
265
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a> *retICFGNode = SVFUtil::dyn_cast&lt;RetICFGNode&gt;(</div>
266
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; bbNodes.second[i]-&gt;getICFGNodes().front()))</div>
267
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
268
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;icfgEdge : retICFGNode-&gt;getInEdges())</div>
269
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
270
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a> *retEdge = SVFUtil::dyn_cast&lt;RetCFGEdge&gt;(icfgEdge))</div>
271
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
272
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// no return function</span></div>
273
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span>(!retEdge-&gt;getSrcNode()-&gt;getFun()-&gt;hasReturn()) <span class="keywordflow">continue</span>;</div>
274
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a> *pEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockEdge.html">CFBasicBlockEdge</a>(bbToNodes[retEdge-&gt;getSrcNode()-&gt;getBB()].back(),</div>
275
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; bbNodes.second[i],</div>
276
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; retEdge);</div>
277
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-&gt;<a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
278
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
279
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
280
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
281
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">else</span></div>
282
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div>
283
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Other nodes are intra-procedural</span></div>
284
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div>
285
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div>
286
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
287
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;}</div>
288
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
289
+ <div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf"> 247</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf">CFBasicBlockGBuilder::build</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a> *icfg)</div>
290
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;{</div>
291
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CFBasicBlockGraph.html">CFBasicBlockGraph</a>();</div>
292
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFBasicBlock *, std::vector&lt;CFBasicBlockNode *&gt;</a>&gt; bbToNodes;</div>
293
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
294
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">initCFBasicBlockGNodes</a>(icfg, bbToNodes);</div>
295
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">addInterBBEdge</a>(icfg, bbToNodes);</div>
296
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">addIntraBBEdge</a>(icfg, bbToNodes);</div>
297
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">addInterProceduralEdge</a>(icfg, bbToNodes);</div>
298
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div>
299
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
300
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
273
301
  </div><!-- fragment --></div><!-- contents -->
274
- <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a43c0cba051306acc6440f60165b835e6"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">SVF::CFBasicBlockGBuilder::initCFBasicBlockGNodes</a></div><div class="ttdeci">void initCFBasicBlockGNodes(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00040">CFBasicBlockGBuilder.cpp:40</a></div></div>
302
+ <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a43c0cba051306acc6440f60165b835e6"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">SVF::CFBasicBlockGBuilder::initCFBasicBlockGNodes</a></div><div class="ttdeci">void initCFBasicBlockGNodes(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00042">CFBasicBlockGBuilder.cpp:42</a></div></div>
275
303
  <div class="ttc" id="aclassSVF_1_1CallCFGEdge_html"><div class="ttname"><a href="classSVF_1_1CallCFGEdge.html">SVF::CallCFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00176">ICFGEdge.h:176</a></div></div>
276
304
  <div class="ttc" id="aclassSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00044">ICFGEdge.h:44</a></div></div>
305
+ <div class="ttc" id="aclassSVF_1_1FunEntryICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunEntryICFGNode.html">SVF::FunEntryICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00261">ICFGNode.h:261</a></div></div>
277
306
  <div class="ttc" id="aclassSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00487">ICFGNode.h:487</a></div></div>
278
307
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
279
- <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2c9f8c120522e31124364f485e873608"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">SVF::CFBasicBlockGBuilder::addInterBBEdge</a></div><div class="ttdeci">void addInterBBEdge(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00097">CFBasicBlockGBuilder.cpp:97</a></div></div>
308
+ <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2c9f8c120522e31124364f485e873608"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">SVF::CFBasicBlockGBuilder::addInterBBEdge</a></div><div class="ttdeci">void addInterBBEdge(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00125">CFBasicBlockGBuilder.cpp:125</a></div></div>
280
309
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockEdge_html"><div class="ttname"><a href="classSVF_1_1CFBasicBlockEdge.html">SVF::CFBasicBlockEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00043">CFBasicBlockG.h:43</a></div></div>
281
310
  <div class="ttc" id="aclassSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
282
311
  <div class="ttc" id="aclassSVF_1_1RetCFGEdge_html"><div class="ttname"><a href="classSVF_1_1RetCFGEdge.html">SVF::RetCFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00227">ICFGEdge.h:227</a></div></div>
283
312
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockGraph_html_acd6a4b291c9aab8abdc466f985975d0d"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">SVF::CFBasicBlockGraph::addCFBBEdge</a></div><div class="ttdeci">bool addCFBBEdge(CFBasicBlockEdge *edge)</div><div class="ttdoc">Add ICFGEdgeWrapper.</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00452">CFBasicBlockG.h:452</a></div></div>
284
313
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockGraph_html_a4a7a6e00d13b4099c34a3015b4f06a67"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">SVF::CFBasicBlockGraph::addCFBBNode</a></div><div class="ttdeci">virtual void addCFBBNode(CFBasicBlockNode *node)</div><div class="ttdoc">Add a ICFGNodeWrapper.</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00462">CFBasicBlockG.h:462</a></div></div>
285
- <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_ae6c8497f1cd2e3ca63b899ea11757b31"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">SVF::CFBasicBlockGBuilder::addIntraBBEdge</a></div><div class="ttdeci">void addIntraBBEdge(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00137">CFBasicBlockGBuilder.cpp:137</a></div></div>
314
+ <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_ae6c8497f1cd2e3ca63b899ea11757b31"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">SVF::CFBasicBlockGBuilder::addIntraBBEdge</a></div><div class="ttdeci">void addIntraBBEdge(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00165">CFBasicBlockGBuilder.cpp:165</a></div></div>
315
+ <div class="ttc" id="aclassSVF_1_1ICFG_html_af1b2d2839f811a00103df87342dfc919"><div class="ttname"><a href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">SVF::ICFG::getFunExitICFGNode</a></div><div class="ttdeci">FunExitICFGNode * getFunExitICFGNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function exit node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00279">ICFG.cpp:279</a></div></div>
286
316
  <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html">SVF::SVFBasicBlock</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00522">SVFValue.h:522</a></div></div>
317
+ <div class="ttc" id="aclassSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00114">SVFIR.h:114</a></div></div>
287
318
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00385">ICFGNode.h:385</a></div></div>
288
- <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2a72cd05458304eaae145532448cf913"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">SVF::CFBasicBlockGBuilder::addInterProceduralEdge</a></div><div class="ttdeci">void addInterProceduralEdge(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00168">CFBasicBlockGBuilder.cpp:168</a></div></div>
319
+ <div class="ttc" id="anamespaceSVF_html_ae6c7046834fe00382052ece7d06eb0ac"><div class="ttname"><a href="namespaceSVF.html#ae6c7046834fe00382052ece7d06eb0ac">SVF::nodes</a></div><div class="ttdeci">iter_range&lt; typename GenericGraphTraits&lt; GraphType &gt;::nodes_iterator &gt; nodes(const GraphType &amp;G)</div><div class="ttdef"><b>Definition:</b> <a href="GraphTraits_8h_source.html#l00111">GraphTraits.h:111</a></div></div>
320
+ <div class="ttc" id="aSVFIR_8h_html"><div class="ttname"><a href="SVFIR_8h.html">SVFIR.h</a></div></div>
321
+ <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2a72cd05458304eaae145532448cf913"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">SVF::CFBasicBlockGBuilder::addInterProceduralEdge</a></div><div class="ttdeci">void addInterProceduralEdge(ICFG *icfg, Map&lt; const SVFBasicBlock *, std::vector&lt; CFBasicBlockNode * &gt;&gt; &amp;bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00196">CFBasicBlockGBuilder.cpp:196</a></div></div>
322
+ <div class="ttc" id="aclassSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00088">ICFG.h:88</a></div></div>
289
323
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
290
- <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a25f0496187622b156bafc49f34fffeaf"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf">SVF::CFBasicBlockGBuilder::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00219">CFBasicBlockGBuilder.cpp:219</a></div></div>
324
+ <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a25f0496187622b156bafc49f34fffeaf"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf">SVF::CFBasicBlockGBuilder::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00247">CFBasicBlockGBuilder.cpp:247</a></div></div>
291
325
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockNode_html_afdad57a83c392a8b14b838ecb58f9ff7"><div class="ttname"><a href="classSVF_1_1CFBasicBlockNode.html#afdad57a83c392a8b14b838ecb58f9ff7">SVF::CFBasicBlockNode::getICFGNodes</a></div><div class="ttdeci">const std::vector&lt; const ICFGNode * &gt; &amp; getICFGNodes() const</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00147">CFBasicBlockG.h:147</a></div></div>
326
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_abb2bbf6e0dc5adae2140a519259e6f17"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#abb2bbf6e0dc5adae2140a519259e6f17">SVF::SVFUtil::isIntrinsicInst</a></div><div class="ttdeci">bool isIntrinsicInst(const SVFInstruction *inst)</div><div class="ttdoc">Return true if it is an llvm intrinsic instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00247">SVFUtil.cpp:247</a></div></div>
327
+ <div class="ttc" id="aclassSVF_1_1ICFG_html_a0dca4655c2f6112a5be1f921b8e81076"><div class="ttname"><a href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">SVF::ICFG::getFunEntryICFGNode</a></div><div class="ttdeci">FunEntryICFGNode * getFunEntryICFGNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function entry node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00270">ICFG.cpp:270</a></div></div>
292
328
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockNode_html"><div class="ttname"><a href="classSVF_1_1CFBasicBlockNode.html">SVF::CFBasicBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00114">CFBasicBlockG.h:114</a></div></div>
329
+ <div class="ttc" id="aclassSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00324">ICFGNode.h:324</a></div></div>
293
330
  <div class="ttc" id="aclassSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00047">ICFG.h:47</a></div></div>
294
331
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a4a298a45e54cbaf41cdf44aeea1a63f3"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">SVF::CFBasicBlockGBuilder::_CFBasicBlockG</a></div><div class="ttdeci">CFBasicBlockGraph * _CFBasicBlockG</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8h_source.html#l00039">CFBasicBlockGBuilder.h:39</a></div></div>
295
332
  <div class="ttc" id="aclassSVF_1_1CFBasicBlockGraph_html"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGraph.html">SVF::CFBasicBlockGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00350">CFBasicBlockG.h:350</a></div></div>