svf-tools 1.0.813 → 1.0.815

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 (270) hide show
  1. package/SVF-doxygen/html/AccessPath_8cpp_source.html +124 -121
  2. package/SVF-doxygen/html/AccessPath_8h_source.html +97 -88
  3. package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/ConsGEdge_8h_source.html +2 -2
  5. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +184 -183
  6. package/SVF-doxygen/html/ContextDDA_8h_source.html +5 -5
  7. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +191 -190
  10. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +4 -4
  11. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +695 -688
  12. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +15 -15
  13. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +883 -881
  14. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +32 -32
  15. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +120 -118
  16. package/SVF-doxygen/html/SVFIR_8cpp_source.html +2 -2
  17. package/SVF-doxygen/html/SVFStatements_8h_source.html +5 -5
  18. package/SVF-doxygen/html/SVFVariables_8h_source.html +2 -2
  19. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +7 -5
  20. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +237 -162
  21. package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
  22. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +176 -175
  23. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
  24. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +2 -2
  25. package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
  26. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +9 -9
  27. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +2 -2
  28. package/SVF-doxygen/html/classSVF_1_1NormalGepCGEdge.html +2 -2
  29. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +2 -2
  30. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +186 -185
  31. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +667 -660
  32. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +942 -938
  33. package/SVF-doxygen/html/functions_a.html +1 -1
  34. package/SVF-doxygen/html/functions_func.html +1 -1
  35. package/SVF-doxygen/html/functions_func_g.html +22 -17
  36. package/SVF-doxygen/html/functions_func_p.html +1 -1
  37. package/SVF-doxygen/html/functions_g.html +20 -12
  38. package/SVF-doxygen/html/functions_i.html +1 -1
  39. package/SVF-doxygen/html/functions_o.html +7 -7
  40. package/SVF-doxygen/html/functions_p.html +11 -11
  41. package/SVF-doxygen/html/functions_r.html +2 -2
  42. package/SVF-doxygen/html/functions_s.html +17 -17
  43. package/SVF-doxygen/html/functions_v.html +7 -9
  44. package/SVF-doxygen/html/functions_vars_g.html +3 -0
  45. package/SVF-doxygen/html/functions_w.html +1 -1
  46. package/SVF-doxygen/html/search/all_1.js +1 -1
  47. package/SVF-doxygen/html/search/all_10.js +324 -324
  48. package/SVF-doxygen/html/search/all_11.js +222 -222
  49. package/SVF-doxygen/html/search/all_12.js +544 -544
  50. package/SVF-doxygen/html/search/all_13.js +191 -191
  51. package/SVF-doxygen/html/search/all_14.js +67 -67
  52. package/SVF-doxygen/html/search/all_15.js +167 -167
  53. package/SVF-doxygen/html/search/all_16.js +63 -63
  54. package/SVF-doxygen/html/search/all_17.js +1 -1
  55. package/SVF-doxygen/html/search/all_18.js +1 -1
  56. package/SVF-doxygen/html/search/all_19.js +11 -11
  57. package/SVF-doxygen/html/search/all_1a.js +172 -172
  58. package/SVF-doxygen/html/search/all_7.js +891 -888
  59. package/SVF-doxygen/html/search/all_8.js +197 -197
  60. package/SVF-doxygen/html/search/all_9.js +607 -607
  61. package/SVF-doxygen/html/search/all_a.js +46 -46
  62. package/SVF-doxygen/html/search/all_b.js +26 -26
  63. package/SVF-doxygen/html/search/all_c.js +116 -116
  64. package/SVF-doxygen/html/search/all_d.js +196 -196
  65. package/SVF-doxygen/html/search/all_e.js +207 -207
  66. package/SVF-doxygen/html/search/all_f.js +115 -115
  67. package/SVF-doxygen/html/search/classes_0.js +26 -26
  68. package/SVF-doxygen/html/search/classes_1.js +9 -9
  69. package/SVF-doxygen/html/search/classes_10.js +73 -73
  70. package/SVF-doxygen/html/search/classes_11.js +15 -15
  71. package/SVF-doxygen/html/search/classes_12.js +2 -2
  72. package/SVF-doxygen/html/search/classes_13.js +10 -10
  73. package/SVF-doxygen/html/search/classes_14.js +14 -14
  74. package/SVF-doxygen/html/search/classes_15.js +1 -1
  75. package/SVF-doxygen/html/search/classes_2.js +80 -80
  76. package/SVF-doxygen/html/search/classes_3.js +37 -37
  77. package/SVF-doxygen/html/search/classes_4.js +9 -9
  78. package/SVF-doxygen/html/search/classes_5.js +28 -28
  79. package/SVF-doxygen/html/search/classes_6.js +104 -104
  80. package/SVF-doxygen/html/search/classes_7.js +33 -33
  81. package/SVF-doxygen/html/search/classes_8.js +56 -56
  82. package/SVF-doxygen/html/search/classes_9.js +1 -1
  83. package/SVF-doxygen/html/search/classes_a.js +12 -12
  84. package/SVF-doxygen/html/search/classes_b.js +29 -29
  85. package/SVF-doxygen/html/search/classes_c.js +6 -6
  86. package/SVF-doxygen/html/search/classes_d.js +18 -18
  87. package/SVF-doxygen/html/search/classes_e.js +36 -36
  88. package/SVF-doxygen/html/search/classes_f.js +25 -25
  89. package/SVF-doxygen/html/search/defines_0.js +3 -3
  90. package/SVF-doxygen/html/search/defines_1.js +2 -2
  91. package/SVF-doxygen/html/search/defines_2.js +30 -30
  92. package/SVF-doxygen/html/search/defines_3.js +21 -21
  93. package/SVF-doxygen/html/search/defines_4.js +2 -2
  94. package/SVF-doxygen/html/search/defines_5.js +4 -4
  95. package/SVF-doxygen/html/search/defines_6.js +2 -2
  96. package/SVF-doxygen/html/search/defines_7.js +5 -5
  97. package/SVF-doxygen/html/search/defines_8.js +11 -11
  98. package/SVF-doxygen/html/search/defines_9.js +9 -9
  99. package/SVF-doxygen/html/search/defines_a.js +2 -2
  100. package/SVF-doxygen/html/search/defines_b.js +1 -1
  101. package/SVF-doxygen/html/search/defines_c.js +3 -3
  102. package/SVF-doxygen/html/search/defines_d.js +2 -2
  103. package/SVF-doxygen/html/search/defines_e.js +7 -7
  104. package/SVF-doxygen/html/search/defines_f.js +3 -3
  105. package/SVF-doxygen/html/search/enums_0.js +3 -3
  106. package/SVF-doxygen/html/search/enums_1.js +2 -2
  107. package/SVF-doxygen/html/search/enums_10.js +1 -1
  108. package/SVF-doxygen/html/search/enums_11.js +1 -1
  109. package/SVF-doxygen/html/search/enums_2.js +8 -8
  110. package/SVF-doxygen/html/search/enums_3.js +1 -1
  111. package/SVF-doxygen/html/search/enums_4.js +3 -3
  112. package/SVF-doxygen/html/search/enums_5.js +1 -1
  113. package/SVF-doxygen/html/search/enums_6.js +2 -2
  114. package/SVF-doxygen/html/search/enums_7.js +2 -2
  115. package/SVF-doxygen/html/search/enums_8.js +4 -4
  116. package/SVF-doxygen/html/search/enums_9.js +1 -1
  117. package/SVF-doxygen/html/search/enums_a.js +1 -1
  118. package/SVF-doxygen/html/search/enums_b.js +7 -7
  119. package/SVF-doxygen/html/search/enums_c.js +1 -1
  120. package/SVF-doxygen/html/search/enums_d.js +4 -4
  121. package/SVF-doxygen/html/search/enums_e.js +2 -2
  122. package/SVF-doxygen/html/search/enums_f.js +4 -4
  123. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  124. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  125. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  126. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  127. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  128. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  129. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  130. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  131. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  132. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  133. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  134. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  135. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  136. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  137. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  138. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  139. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  140. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  141. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  142. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  143. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  144. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  145. package/SVF-doxygen/html/search/files_0.js +13 -13
  146. package/SVF-doxygen/html/search/files_1.js +7 -7
  147. package/SVF-doxygen/html/search/files_10.js +8 -8
  148. package/SVF-doxygen/html/search/files_11.js +8 -8
  149. package/SVF-doxygen/html/search/files_12.js +2 -2
  150. package/SVF-doxygen/html/search/files_2.js +55 -55
  151. package/SVF-doxygen/html/search/files_3.js +14 -14
  152. package/SVF-doxygen/html/search/files_4.js +5 -5
  153. package/SVF-doxygen/html/search/files_5.js +13 -13
  154. package/SVF-doxygen/html/search/files_6.js +9 -9
  155. package/SVF-doxygen/html/search/files_7.js +14 -14
  156. package/SVF-doxygen/html/search/files_8.js +13 -13
  157. package/SVF-doxygen/html/search/files_9.js +18 -18
  158. package/SVF-doxygen/html/search/files_a.js +3 -3
  159. package/SVF-doxygen/html/search/files_b.js +2 -2
  160. package/SVF-doxygen/html/search/files_c.js +20 -20
  161. package/SVF-doxygen/html/search/files_d.js +4 -4
  162. package/SVF-doxygen/html/search/files_e.js +62 -62
  163. package/SVF-doxygen/html/search/files_f.js +8 -8
  164. package/SVF-doxygen/html/search/functions_0.js +12 -12
  165. package/SVF-doxygen/html/search/functions_1.js +360 -360
  166. package/SVF-doxygen/html/search/functions_10.js +140 -140
  167. package/SVF-doxygen/html/search/functions_11.js +138 -138
  168. package/SVF-doxygen/html/search/functions_12.js +279 -279
  169. package/SVF-doxygen/html/search/functions_13.js +59 -59
  170. package/SVF-doxygen/html/search/functions_14.js +39 -39
  171. package/SVF-doxygen/html/search/functions_15.js +71 -71
  172. package/SVF-doxygen/html/search/functions_16.js +32 -32
  173. package/SVF-doxygen/html/search/functions_17.js +3 -3
  174. package/SVF-doxygen/html/search/functions_18.js +172 -172
  175. package/SVF-doxygen/html/search/functions_2.js +87 -87
  176. package/SVF-doxygen/html/search/functions_3.js +257 -257
  177. package/SVF-doxygen/html/search/functions_4.js +75 -75
  178. package/SVF-doxygen/html/search/functions_5.js +53 -53
  179. package/SVF-doxygen/html/search/functions_6.js +59 -59
  180. package/SVF-doxygen/html/search/functions_7.js +854 -852
  181. package/SVF-doxygen/html/search/functions_8.js +149 -149
  182. package/SVF-doxygen/html/search/functions_9.js +423 -423
  183. package/SVF-doxygen/html/search/functions_a.js +30 -30
  184. package/SVF-doxygen/html/search/functions_b.js +2 -2
  185. package/SVF-doxygen/html/search/functions_c.js +26 -26
  186. package/SVF-doxygen/html/search/functions_d.js +77 -77
  187. package/SVF-doxygen/html/search/functions_e.js +35 -35
  188. package/SVF-doxygen/html/search/functions_f.js +56 -56
  189. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  190. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  191. package/SVF-doxygen/html/search/related_0.js +2 -2
  192. package/SVF-doxygen/html/search/related_1.js +2 -2
  193. package/SVF-doxygen/html/search/related_2.js +2 -2
  194. package/SVF-doxygen/html/search/related_3.js +2 -2
  195. package/SVF-doxygen/html/search/related_4.js +2 -2
  196. package/SVF-doxygen/html/search/related_5.js +1 -1
  197. package/SVF-doxygen/html/search/related_6.js +2 -2
  198. package/SVF-doxygen/html/search/related_7.js +4 -4
  199. package/SVF-doxygen/html/search/related_8.js +2 -2
  200. package/SVF-doxygen/html/search/related_9.js +4 -4
  201. package/SVF-doxygen/html/search/related_a.js +19 -19
  202. package/SVF-doxygen/html/search/related_b.js +4 -4
  203. package/SVF-doxygen/html/search/related_c.js +1 -1
  204. package/SVF-doxygen/html/search/related_d.js +12 -12
  205. package/SVF-doxygen/html/search/related_e.js +2 -2
  206. package/SVF-doxygen/html/search/related_f.js +2 -2
  207. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  208. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  209. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  210. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  211. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  212. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  213. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  214. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  215. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  216. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  217. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  218. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  219. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  220. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  221. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  222. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  223. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  224. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  225. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  226. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  227. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  228. package/SVF-doxygen/html/search/variables_0.js +151 -151
  229. package/SVF-doxygen/html/search/variables_1.js +75 -75
  230. package/SVF-doxygen/html/search/variables_10.js +97 -97
  231. package/SVF-doxygen/html/search/variables_11.js +44 -44
  232. package/SVF-doxygen/html/search/variables_12.js +92 -92
  233. package/SVF-doxygen/html/search/variables_13.js +75 -75
  234. package/SVF-doxygen/html/search/variables_14.js +14 -14
  235. package/SVF-doxygen/html/search/variables_15.js +48 -48
  236. package/SVF-doxygen/html/search/variables_16.js +9 -9
  237. package/SVF-doxygen/html/search/variables_17.js +1 -1
  238. package/SVF-doxygen/html/search/variables_18.js +2 -2
  239. package/SVF-doxygen/html/search/variables_2.js +38 -38
  240. package/SVF-doxygen/html/search/variables_3.js +142 -142
  241. package/SVF-doxygen/html/search/variables_4.js +55 -55
  242. package/SVF-doxygen/html/search/variables_5.js +37 -37
  243. package/SVF-doxygen/html/search/variables_6.js +66 -66
  244. package/SVF-doxygen/html/search/variables_7.js +34 -33
  245. package/SVF-doxygen/html/search/variables_8.js +7 -7
  246. package/SVF-doxygen/html/search/variables_9.js +78 -78
  247. package/SVF-doxygen/html/search/variables_a.js +4 -4
  248. package/SVF-doxygen/html/search/variables_b.js +10 -10
  249. package/SVF-doxygen/html/search/variables_c.js +45 -45
  250. package/SVF-doxygen/html/search/variables_d.js +56 -56
  251. package/SVF-doxygen/html/search/variables_e.js +123 -123
  252. package/SVF-doxygen/html/search/variables_f.js +29 -29
  253. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +10 -10
  254. package/SVF-doxygen/html/svf-ex_8cpp.html +11 -11
  255. package/SVF-doxygen/html/svf-ex_8cpp_source.html +11 -11
  256. package/package.json +1 -1
  257. package/svf/include/Graphs/ConsGEdge.h +1 -1
  258. package/svf/include/MemoryModel/AccessPath.h +14 -5
  259. package/svf/include/SVFIR/SVFStatements.h +2 -2
  260. package/svf/include/SVFIR/SVFVariables.h +1 -1
  261. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -1
  262. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -0
  263. package/svf/lib/DDA/ContextDDA.cpp +2 -1
  264. package/svf/lib/DDA/FlowDDA.cpp +1 -1
  265. package/svf/lib/MemoryModel/AccessPath.cpp +7 -5
  266. package/svf/lib/SVFIR/SVFIR.cpp +1 -1
  267. package/svf/lib/WPA/Andersen.cpp +1 -1
  268. package/svf/lib/WPA/FlowSensitive.cpp +1 -1
  269. package/svf-llvm/lib/SVFIRBuilder.cpp +6 -4
  270. package/svf-llvm/lib/SVFIRExtAPI.cpp +7 -5
@@ -350,7 +350,7 @@ $(function() {
350
350
  <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">continue</span>;</div>
351
351
  <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> idx = op-&gt;getSExtValue();</div>
352
352
  <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(arrTy), idx);</div>
353
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">getConstantFieldIdx</a>() + <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
353
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>() + <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
354
354
  <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
355
355
  <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *ST = SVFUtil::dyn_cast&lt;StructType&gt;(gepTy))</div>
356
356
  <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
@@ -358,7 +358,7 @@ $(function() {
358
358
  <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">//The actual index</span></div>
359
359
  <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> idx = op-&gt;getSExtValue();</div>
360
360
  <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(ST), idx);</div>
361
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">getConstantFieldIdx</a>() + <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
361
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>() + <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
362
362
  <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
363
363
  <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gepTy-&gt;isSingleValueType())</div>
364
364
  <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
@@ -389,905 +389,907 @@ $(function() {
389
389
  <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = gepce-&gt;getOperand(0);</div>
390
390
  <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// handle recursive constant express case (gep (bitcast (gep X 1)) 1)</span></div>
391
391
  <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; processCE(opnd);</div>
392
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap;</div>
393
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(gepce, ap);</div>
394
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div>
395
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
396
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
397
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; setCurrentLocation(gepce, <span class="keyword">nullptr</span>);</div>
398
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">/*</span></div>
399
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div>
400
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div>
401
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"> */</span></div>
402
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; addGepEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gepce)), ap, constGep);</div>
403
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; setCurrentLocation(cval, cbb);</div>
404
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div>
405
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* castce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">isCastConstantExpr</a>(ref))</div>
406
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div>
407
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle cast constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
408
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce-&gt;getOperand(0);</div>
409
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; processCE(opnd);</div>
410
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
411
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
412
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; setCurrentLocation(castce, <span class="keyword">nullptr</span>);</div>
413
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(castce)));</div>
414
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; setCurrentLocation(cval, cbb);</div>
415
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div>
416
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* selectce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">isSelectConstantExpr</a>(ref))</div>
417
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div>
418
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle select constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
419
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce-&gt;getOperand(1);</div>
420
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce-&gt;getOperand(2);</div>
421
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; processCE(src1);</div>
422
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; processCE(src2);</div>
423
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
424
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
425
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; setCurrentLocation(selectce, <span class="keyword">nullptr</span>);</div>
426
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce-&gt;getOperand(0)));</div>
427
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src1));</div>
428
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src2));</div>
429
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce));</div>
430
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; addSelectStmt(nres,nsrc1, nsrc2, cond);</div>
431
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; setCurrentLocation(cval, cbb);</div>
432
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div>
433
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div>
434
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* int2Ptrce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">isInt2PtrConstantExpr</a>(ref))</div>
435
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div>
436
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; addGlobalBlackHoleAddrEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(int2Ptrce)), int2Ptrce);</div>
437
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
438
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* ptr2Intce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">isPtr2IntConstantExpr</a>(ref))</div>
439
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div>
440
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div>
441
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; processCE(opnd);</div>
442
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
443
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
444
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; setCurrentLocation(ptr2Intce, <span class="keyword">nullptr</span>);</div>
445
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ptr2Intce)));</div>
446
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; setCurrentLocation(cval, cbb);</div>
447
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
448
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">isCmpConstantExpr</a>(ref))</div>
449
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div>
450
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div>
451
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
452
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
453
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
454
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
455
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; addBlackHoleAddrEdge(dst);</div>
456
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; setCurrentLocation(cval, cbb);</div>
457
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
458
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">isBinaryConstantExpr</a>(ref))</div>
459
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div>
460
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div>
461
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
462
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
463
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
464
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
465
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; addBlackHoleAddrEdge(dst);</div>
466
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; setCurrentLocation(cval, cbb);</div>
467
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div>
468
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">isUnaryConstantExpr</a>(ref))</div>
469
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div>
470
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div>
471
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
472
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
473
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
474
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
475
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; addBlackHoleAddrEdge(dst);</div>
476
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; setCurrentLocation(cval, cbb);</div>
477
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div>
478
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div>
479
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
480
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// we don&#39;t handle constant aggregate like constant vectors</span></div>
481
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div>
482
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div>
483
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div>
484
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
485
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
486
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
487
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
488
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
489
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
490
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), dst);</div>
491
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; setCurrentLocation(cval, cbb);</div>
492
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div>
493
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">else</span></div>
494
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div>
495
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div>
496
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we don&#39;t handle all other constant expression for now!&quot;</span>);</div>
497
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div>
498
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
499
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;}</div>
500
- <div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd"> 461</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGlobalVarField(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* tpy)</div>
501
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;{</div>
502
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; </div>
503
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
504
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> == 0 &amp;&amp; gvar-&gt;getInitializer()-&gt;getType()-&gt;isSingleValueType())</div>
505
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div>
506
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span> getValueNode(gvar);</div>
507
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div>
508
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">else</span></div>
509
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div>
510
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">return</span> getGepValVar(gvar, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>), tpy);</div>
511
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
512
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;}</div>
513
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
514
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment">/*For global variable initialization</span></div>
515
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment"> * Give a simple global variable</span></div>
516
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment"> * int x = 10; // store 10 x (constant, non pointer) |</span></div>
517
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment"> * int *y = &amp;x; // store x y (pointer type)</span></div>
518
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment"> * Given a struct</span></div>
519
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"> * struct Z { int s; int *t;};</span></div>
520
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment"> * Global initialization:</span></div>
521
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"> * struct Z z = {10,&amp;x}; // store x z.t (struct type)</span></div>
522
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> * struct Z *m = &amp;z; // store z m (pointer type)</span></div>
523
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"> * struct Z n = {10,&amp;z.s}; // store z.s n , &amp;z.s constant expression (constant expression)</span></div>
524
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> */</span></div>
525
- <div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250"> 488</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::InitialGlobal(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C,</div>
526
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>)</div>
527
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;{</div>
528
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;global &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; constant initializer: &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(C)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
529
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div>
530
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div>
531
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(C);</div>
532
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
533
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
534
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = getGlobalVarField(gvar, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()));</div>
535
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; </div>
536
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable, Function&gt;(C))</div>
537
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div>
538
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
539
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; addStoreEdge(src, field);</div>
540
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div>
541
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div>
542
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div>
543
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div>
544
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; processCE(C);</div>
545
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
546
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; addStoreEdge(src, field);</div>
547
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div>
548
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div>
549
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div>
550
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
551
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
552
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; processCE(C);</div>
553
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
554
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), src);</div>
555
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div>
556
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">else</span></div>
557
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div>
558
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
559
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; addStoreEdge(src, field);</div>
560
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != pag-&gt;getNullPtr())</div>
561
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; addCopyEdge(pag-&gt;getNullPtr(), src);</div>
562
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
563
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div>
564
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray, ConstantStruct&gt;(C))</div>
565
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div>
566
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(gvar) &amp;&amp; !Options::VtableInSVFIR())</div>
567
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">return</span>;</div>
568
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0, e = C-&gt;getNumOperands(); i != e; i++)</div>
569
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div>
570
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
571
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; InitialGlobal(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
572
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
573
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
574
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* data = SVFUtil::dyn_cast&lt;ConstantData&gt;(C))</div>
575
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; {</div>
576
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span>(Options::ModelConsts())</div>
577
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
578
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(data))</div>
579
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
580
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; seq-&gt;getNumElements(); i++)</div>
581
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
582
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
583
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq-&gt;getElementAsConstant(i);</div>
584
- <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; InitialGlobal(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
585
- <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
586
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div>
587
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">else</span></div>
588
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div>
589
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; assert((SVFUtil::isa&lt;ConstantAggregateZero, UndefValue&gt;(data)) &amp;&amp; <span class="stringliteral">&quot;Single value type data should have been handled!&quot;</span>);</div>
590
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
591
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div>
592
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div>
593
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">else</span></div>
594
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; {</div>
595
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">//TODO:assert(SVFUtil::isa&lt;ConstantVector&gt;(C),&quot;what else do we have&quot;);</span></div>
596
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
597
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;}</div>
598
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
599
- <div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8"> 566</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGlobal(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div>
600
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;{</div>
601
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
602
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMModules())</div>
603
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div>
604
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</div>
605
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
606
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &amp;*I;</div>
607
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(gvar);</div>
608
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(gvar);</div>
609
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; </div>
610
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
611
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; addAddrEdge(obj, idx);</div>
612
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; </div>
613
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div>
614
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div>
615
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div>
616
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global var node &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
617
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; InitialGlobal(gvar, C, 0);</div>
618
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div>
619
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div>
620
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; </div>
621
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; </div>
622
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)</div>
623
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div>
624
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &amp;*I;</div>
625
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(fun);</div>
626
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(fun);</div>
627
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
628
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global function node &quot;</span> &lt;&lt; fun-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
629
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; setCurrentLocation(fun, <span class="keyword">nullptr</span>);</div>
630
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; addAddrEdge(obj, idx);</div>
631
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div>
632
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; </div>
633
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="comment">// Handle global aliases (due to linkage of multiple bc files), e.g., @x = internal alias @y. We need to add a copy from y to x.</span></div>
634
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</div>
635
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div>
636
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &amp;*I;</div>
637
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias));</div>
638
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias-&gt;getAliasee()));</div>
639
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; processCE(alias-&gt;getAliasee());</div>
640
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; setCurrentLocation(alias, <span class="keyword">nullptr</span>);</div>
641
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; addCopyEdge(src,dst);</div>
642
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div>
643
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</div>
644
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;}</div>
645
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; </div>
646
- <div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4be150eb37b75e4c081dfe38429f2089"> 619</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitAllocaInst(<a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> &amp;inst)</div>
647
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;{</div>
648
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; </div>
649
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div>
650
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
651
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; </div>
652
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process alloca &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
653
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
654
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
655
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getObjectNode(&amp;inst);</div>
392
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">auto</span> &amp;GEPOp = llvm::cast&lt;llvm::GEPOperator&gt;(*gepce);</div>
393
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *pType = GEPOp.getSourceElementType();</div>
394
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(pType));</div>
395
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(gepce, ap);</div>
396
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div>
397
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
398
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
399
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; setCurrentLocation(gepce, <span class="keyword">nullptr</span>);</div>
400
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">/*</span></div>
401
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div>
402
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div>
403
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment"> */</span></div>
404
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; addGepEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gepce)), ap, constGep);</div>
405
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; setCurrentLocation(cval, cbb);</div>
406
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
407
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* castce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">isCastConstantExpr</a>(ref))</div>
408
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
409
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle cast constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
410
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce-&gt;getOperand(0);</div>
411
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; processCE(opnd);</div>
412
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
413
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
414
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; setCurrentLocation(castce, <span class="keyword">nullptr</span>);</div>
415
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(castce)));</div>
416
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; setCurrentLocation(cval, cbb);</div>
417
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
418
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* selectce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">isSelectConstantExpr</a>(ref))</div>
419
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div>
420
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle select constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
421
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce-&gt;getOperand(1);</div>
422
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce-&gt;getOperand(2);</div>
423
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; processCE(src1);</div>
424
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; processCE(src2);</div>
425
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
426
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
427
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; setCurrentLocation(selectce, <span class="keyword">nullptr</span>);</div>
428
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce-&gt;getOperand(0)));</div>
429
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src1));</div>
430
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src2));</div>
431
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce));</div>
432
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; addSelectStmt(nres,nsrc1, nsrc2, cond);</div>
433
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; setCurrentLocation(cval, cbb);</div>
434
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
435
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div>
436
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* int2Ptrce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">isInt2PtrConstantExpr</a>(ref))</div>
437
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div>
438
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; addGlobalBlackHoleAddrEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(int2Ptrce)), int2Ptrce);</div>
439
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div>
440
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* ptr2Intce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">isPtr2IntConstantExpr</a>(ref))</div>
441
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div>
442
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div>
443
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; processCE(opnd);</div>
444
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
445
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
446
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; setCurrentLocation(ptr2Intce, <span class="keyword">nullptr</span>);</div>
447
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ptr2Intce)));</div>
448
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; setCurrentLocation(cval, cbb);</div>
449
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
450
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">isCmpConstantExpr</a>(ref))</div>
451
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; {</div>
452
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div>
453
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
454
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
455
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
456
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
457
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; addBlackHoleAddrEdge(dst);</div>
458
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; setCurrentLocation(cval, cbb);</div>
459
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div>
460
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">isBinaryConstantExpr</a>(ref))</div>
461
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
462
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div>
463
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
464
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
465
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
466
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
467
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; addBlackHoleAddrEdge(dst);</div>
468
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; setCurrentLocation(cval, cbb);</div>
469
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div>
470
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">isUnaryConstantExpr</a>(ref))</div>
471
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div>
472
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div>
473
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
474
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
475
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
476
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
477
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; addBlackHoleAddrEdge(dst);</div>
478
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; setCurrentLocation(cval, cbb);</div>
479
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div>
480
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div>
481
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
482
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// we don&#39;t handle constant aggregate like constant vectors</span></div>
483
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
484
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div>
485
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
486
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
487
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
488
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
489
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
490
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
491
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
492
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), dst);</div>
493
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; setCurrentLocation(cval, cbb);</div>
494
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
495
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">else</span></div>
496
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div>
497
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div>
498
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we don&#39;t handle all other constant expression for now!&quot;</span>);</div>
499
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
500
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
501
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;}</div>
502
+ <div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd"> 463</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGlobalVarField(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* tpy)</div>
503
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;{</div>
504
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; </div>
505
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
506
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> == 0 &amp;&amp; gvar-&gt;getInitializer()-&gt;getType()-&gt;isSingleValueType())</div>
507
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
508
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> getValueNode(gvar);</div>
509
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
510
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">else</span></div>
511
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div>
512
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> getGepValVar(gvar, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>), tpy);</div>
513
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
514
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;}</div>
515
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; </div>
516
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment">/*For global variable initialization</span></div>
517
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment"> * Give a simple global variable</span></div>
518
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment"> * int x = 10; // store 10 x (constant, non pointer) |</span></div>
519
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"> * int *y = &amp;x; // store x y (pointer type)</span></div>
520
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment"> * Given a struct</span></div>
521
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"> * struct Z { int s; int *t;};</span></div>
522
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> * Global initialization:</span></div>
523
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"> * struct Z z = {10,&amp;x}; // store x z.t (struct type)</span></div>
524
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> * struct Z *m = &amp;z; // store z m (pointer type)</span></div>
525
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"> * struct Z n = {10,&amp;z.s}; // store z.s n , &amp;z.s constant expression (constant expression)</span></div>
526
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> */</span></div>
527
+ <div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250"> 490</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::InitialGlobal(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C,</div>
528
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>)</div>
529
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;{</div>
530
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;global &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; constant initializer: &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(C)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
531
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div>
532
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; {</div>
533
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(C);</div>
534
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
535
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
536
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = getGlobalVarField(gvar, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()));</div>
537
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
538
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable, Function&gt;(C))</div>
539
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
540
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
541
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; addStoreEdge(src, field);</div>
542
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div>
543
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div>
544
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div>
545
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div>
546
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; processCE(C);</div>
547
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
548
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; addStoreEdge(src, field);</div>
549
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div>
550
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div>
551
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div>
552
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
553
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
554
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; processCE(C);</div>
555
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
556
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), src);</div>
557
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
558
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span></div>
559
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div>
560
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
561
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; addStoreEdge(src, field);</div>
562
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != pag-&gt;getNullPtr())</div>
563
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; addCopyEdge(pag-&gt;getNullPtr(), src);</div>
564
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div>
565
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
566
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray, ConstantStruct&gt;(C))</div>
567
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; {</div>
568
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(gvar) &amp;&amp; !Options::VtableInSVFIR())</div>
569
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span>;</div>
570
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0, e = C-&gt;getNumOperands(); i != e; i++)</div>
571
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; {</div>
572
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
573
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; InitialGlobal(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
574
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div>
575
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
576
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* data = SVFUtil::dyn_cast&lt;ConstantData&gt;(C))</div>
577
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
578
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span>(Options::ModelConsts())</div>
579
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
580
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(data))</div>
581
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
582
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; seq-&gt;getNumElements(); i++)</div>
583
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div>
584
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
585
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq-&gt;getElementAsConstant(i);</div>
586
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; InitialGlobal(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
587
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; }</div>
588
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
589
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">else</span></div>
590
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
591
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; assert((SVFUtil::isa&lt;ConstantAggregateZero, UndefValue&gt;(data)) &amp;&amp; <span class="stringliteral">&quot;Single value type data should have been handled!&quot;</span>);</div>
592
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div>
593
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; }</div>
594
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
595
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">else</span></div>
596
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div>
597
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">//TODO:assert(SVFUtil::isa&lt;ConstantVector&gt;(C),&quot;what else do we have&quot;);</span></div>
598
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; }</div>
599
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;}</div>
600
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; </div>
601
+ <div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8"> 568</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGlobal(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div>
602
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;{</div>
603
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
604
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMModules())</div>
605
+ <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
606
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</div>
607
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div>
608
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &amp;*I;</div>
609
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(gvar);</div>
610
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(gvar);</div>
611
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
612
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
613
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; addAddrEdge(obj, idx);</div>
614
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
615
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div>
616
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div>
617
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div>
618
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global var node &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
619
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; InitialGlobal(gvar, C, 0);</div>
620
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div>
621
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div>
622
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; </div>
623
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; </div>
624
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)</div>
625
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div>
626
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &amp;*I;</div>
627
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(fun);</div>
628
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(fun);</div>
629
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
630
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global function node &quot;</span> &lt;&lt; fun-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
631
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; setCurrentLocation(fun, <span class="keyword">nullptr</span>);</div>
632
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; addAddrEdge(obj, idx);</div>
633
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div>
634
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
635
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// Handle global aliases (due to linkage of multiple bc files), e.g., @x = internal alias @y. We need to add a copy from y to x.</span></div>
636
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</div>
637
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div>
638
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &amp;*I;</div>
639
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias));</div>
640
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias-&gt;getAliasee()));</div>
641
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; processCE(alias-&gt;getAliasee());</div>
642
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; setCurrentLocation(alias, <span class="keyword">nullptr</span>);</div>
643
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; addCopyEdge(src,dst);</div>
644
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div>
645
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div>
646
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;}</div>
647
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
648
+ <div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4be150eb37b75e4c081dfe38429f2089"> 621</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitAllocaInst(<a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> &amp;inst)</div>
649
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;{</div>
650
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
651
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div>
652
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
653
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
654
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process alloca &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
655
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
656
656
  <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
657
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; addAddrEdge(src, dst);</div>
657
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getObjectNode(&amp;inst);</div>
658
658
  <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; </div>
659
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;}</div>
659
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; addAddrEdge(src, dst);</div>
660
660
  <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; </div>
661
- <div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aade60fa102a29f332af36a8615c75471"> 637</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitPHINode(<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> &amp;inst)</div>
662
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;{</div>
663
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
664
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process phi &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
661
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</div>
662
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; </div>
663
+ <div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aade60fa102a29f332af36a8615c75471"> 639</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitPHINode(<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> &amp;inst)</div>
664
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;{</div>
665
665
  <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; </div>
666
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
666
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process phi &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
667
667
  <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
668
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</div>
669
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; {</div>
670
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
671
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = SVFUtil::dyn_cast&lt;Instruction&gt;(val);</div>
672
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
673
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; incomingInst-&gt;getFunction() == inst.getFunction());</div>
674
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
675
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;incomingInst&#39;s Function incorrect&quot;</span>);</div>
676
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &amp;inst.getIncomingBlock(i)-&gt;back();</div>
677
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(predInst);</div>
678
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfPrevInst);</div>
679
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(val);</div>
680
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; addPhiStmt(dst,src,icfgNode);</div>
681
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; }</div>
682
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;}</div>
683
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; </div>
684
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="comment">/*</span></div>
685
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="comment"> * Visit load instructions</span></div>
686
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="comment"> */</span></div>
687
- <div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a17638b08f85d4543e663eeb739915bdc"> 663</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitLoadInst(<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> &amp;inst)</div>
688
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;{</div>
689
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process load &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
690
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; </div>
691
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
668
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
669
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
670
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</div>
671
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div>
672
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
673
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = SVFUtil::dyn_cast&lt;Instruction&gt;(val);</div>
674
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
675
+ <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; incomingInst-&gt;getFunction() == inst.getFunction());</div>
676
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
677
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;incomingInst&#39;s Function incorrect&quot;</span>);</div>
678
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &amp;inst.getIncomingBlock(i)-&gt;back();</div>
679
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(predInst);</div>
680
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfPrevInst);</div>
681
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(val);</div>
682
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; addPhiStmt(dst,src,icfgNode);</div>
683
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
684
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</div>
685
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; </div>
686
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="comment">/*</span></div>
687
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment"> * Visit load instructions</span></div>
688
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="comment"> */</span></div>
689
+ <div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a17638b08f85d4543e663eeb739915bdc"> 665</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitLoadInst(<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> &amp;inst)</div>
690
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;{</div>
691
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process load &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
692
692
  <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
693
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
693
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
694
694
  <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
695
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; addLoadEdge(src, dst);</div>
696
- <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;}</div>
697
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; </div>
698
- <div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a51d75ff7f490ddfef3d4f8779872633c"> 677</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitStoreInst(<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> &amp;inst)</div>
699
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div>
700
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
701
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
702
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; </div>
703
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process store &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
695
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
696
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
697
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; addLoadEdge(src, dst);</div>
698
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;}</div>
699
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; </div>
700
+ <div class="line"><a name="l00679"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a51d75ff7f490ddfef3d4f8779872633c"> 679</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitStoreInst(<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> &amp;inst)</div>
701
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;{</div>
702
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
703
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
704
704
  <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; </div>
705
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(inst.getPointerOperand());</div>
705
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process store &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
706
706
  <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
707
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getValueOperand());</div>
707
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(inst.getPointerOperand());</div>
708
708
  <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; </div>
709
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; addStoreEdge(src, dst);</div>
709
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getValueOperand());</div>
710
710
  <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; </div>
711
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;}</div>
711
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; addStoreEdge(src, dst);</div>
712
712
  <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
713
- <div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4a945eafd262f81b4f9cc1fa61b57371"> 695</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGetElementPtrInst(<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> &amp;inst)</div>
714
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;{</div>
715
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
716
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
717
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
718
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div>
719
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div>
720
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div>
721
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; addBlackHoleAddrEdge(dst);</div>
722
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">return</span>;</div>
723
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; }</div>
724
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; </div>
725
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
713
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;}</div>
714
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
715
+ <div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4a945eafd262f81b4f9cc1fa61b57371"> 697</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGetElementPtrInst(<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> &amp;inst)</div>
716
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;{</div>
717
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
718
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
719
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
720
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div>
721
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div>
722
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div>
723
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; addBlackHoleAddrEdge(dst);</div>
724
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">return</span>;</div>
725
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div>
726
726
  <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; </div>
727
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process gep &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
727
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
728
728
  <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; </div>
729
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
729
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process gep &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
730
730
  <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; </div>
731
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap;</div>
732
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(&amp;inst, ap);</div>
733
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; addGepEdge(src, dst, ap, constGep);</div>
734
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;}</div>
735
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; </div>
736
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="comment">/*</span></div>
737
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="comment"> * Visit cast instructions</span></div>
738
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="comment"> */</span></div>
739
- <div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#acf5a61d45c1abc1206f6e6c813f8634b"> 721</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCastInst(<a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> &amp;inst)</div>
740
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;{</div>
741
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; </div>
742
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process cast &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
743
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
744
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; </div>
745
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</div>
746
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div>
747
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; addBlackHoleAddrEdge(dst);</div>
748
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div>
749
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">else</span></div>
750
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div>
751
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
752
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div>
753
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(opnd);</div>
754
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; </div>
755
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
756
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; addCopyEdge(src, dst);</div>
757
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div>
758
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;}</div>
759
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; </div>
760
- <div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aeb5f3cc92ef2d146c7c9cc86375b4c1e"> 745</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBinaryOperator(<a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a> &amp;inst)</div>
761
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;{</div>
762
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
763
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div>
764
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
765
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
766
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
767
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
768
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
769
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; addBinaryOPEdge(op1Node, op2Node, dst, opcode);</div>
770
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;}</div>
771
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; </div>
772
- <div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae80891bb2a162b3ad24fa7cf6380df30"> 760</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitUnaryOperator(<a class="code" href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">UnaryOperator</a> &amp;inst)</div>
773
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;{</div>
774
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
775
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; assert(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div>
776
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
777
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
778
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
779
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; addUnaryOPEdge(src, dst, opcode);</div>
780
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;}</div>
781
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; </div>
782
- <div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac61e0c5f667ebeb4788d07253e6a733c"> 773</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCmpInst(<a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> &amp;inst)</div>
783
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;{</div>
784
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
785
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div>
786
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
787
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
788
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
789
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
790
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
791
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; addCmpEdge(op1Node, op2Node, dst, predicate);</div>
792
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;}</div>
793
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; </div>
794
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; </div>
795
- <div class="line"><a name="l00789"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc836736ea16d99921c0e734cf0a3c72"> 789</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSelectInst(<a class="code" href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SelectInst</a> &amp;inst)</div>
796
- <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;{</div>
797
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; </div>
798
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process select &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
731
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
732
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; </div>
733
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(inst.getSourceElementType()));</div>
734
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(&amp;inst, ap);</div>
735
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; addGepEdge(src, dst, ap, constGep);</div>
736
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;}</div>
737
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; </div>
738
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="comment">/*</span></div>
739
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;<span class="comment"> * Visit cast instructions</span></div>
740
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;<span class="comment"> */</span></div>
741
+ <div class="line"><a name="l00723"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#acf5a61d45c1abc1206f6e6c813f8634b"> 723</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCastInst(<a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> &amp;inst)</div>
742
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;{</div>
743
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; </div>
744
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process cast &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
745
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
746
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; </div>
747
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</div>
748
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div>
749
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; addBlackHoleAddrEdge(dst);</div>
750
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; }</div>
751
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">else</span></div>
752
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div>
753
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
754
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div>
755
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(opnd);</div>
756
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; </div>
757
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
758
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; addCopyEdge(src, dst);</div>
759
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
760
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;}</div>
761
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; </div>
762
+ <div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aeb5f3cc92ef2d146c7c9cc86375b4c1e"> 747</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBinaryOperator(<a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a> &amp;inst)</div>
763
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;{</div>
764
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
765
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div>
766
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
767
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
768
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
769
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
770
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
771
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; addBinaryOPEdge(op1Node, op2Node, dst, opcode);</div>
772
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;}</div>
773
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; </div>
774
+ <div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae80891bb2a162b3ad24fa7cf6380df30"> 762</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitUnaryOperator(<a class="code" href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">UnaryOperator</a> &amp;inst)</div>
775
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;{</div>
776
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
777
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; assert(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div>
778
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
779
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
780
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
781
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; addUnaryOPEdge(src, dst, opcode);</div>
782
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</div>
783
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; </div>
784
+ <div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac61e0c5f667ebeb4788d07253e6a733c"> 775</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCmpInst(<a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> &amp;inst)</div>
785
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;{</div>
786
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
787
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div>
788
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
789
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
790
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
791
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
792
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
793
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; addCmpEdge(op1Node, op2Node, dst, predicate);</div>
794
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;}</div>
795
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; </div>
796
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; </div>
797
+ <div class="line"><a name="l00791"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc836736ea16d99921c0e734cf0a3c72"> 791</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSelectInst(<a class="code" href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SelectInst</a> &amp;inst)</div>
798
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;{</div>
799
799
  <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; </div>
800
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
801
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = getValueNode(inst.getTrueValue());</div>
802
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = getValueNode(inst.getFalseValue());</div>
803
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
804
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; addSelectStmt(dst,src1,src2, cond);</div>
805
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;}</div>
806
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; </div>
807
- <div class="line"><a name="l00802"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a421708269d991987d8d4e93cec750a8d"> 802</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallInst(<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> &amp;i)</div>
808
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;{</div>
809
- <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; visitCallSite(&amp;i);</div>
810
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;}</div>
811
- <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; </div>
812
- <div class="line"><a name="l00807"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a39577da11f4b85066988f105e3c18d7c"> 807</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitInvokeInst(<a class="code" href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">InvokeInst</a> &amp;i)</div>
813
- <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div>
814
- <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; visitCallSite(&amp;i);</div>
815
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;}</div>
816
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; </div>
817
- <div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a62da871a2bace42fa96baf8b9862d4db"> 812</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallBrInst(<a class="code" href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">CallBrInst</a> &amp;i)</div>
818
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;{</div>
819
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; visitCallSite(&amp;i);</div>
820
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;}</div>
821
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; </div>
822
- <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;<span class="comment">/*</span></div>
823
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="comment"> * Visit callsites</span></div>
824
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;<span class="comment"> */</span></div>
825
- <div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c"> 820</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallSite(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
826
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;{</div>
827
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; </div>
828
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="comment">// skip llvm intrinsics</span></div>
829
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
830
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">return</span>;</div>
831
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; </div>
832
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
800
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process select &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
801
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; </div>
802
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
803
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = getValueNode(inst.getTrueValue());</div>
804
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = getValueNode(inst.getFalseValue());</div>
805
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
806
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; addSelectStmt(dst,src1,src2, cond);</div>
807
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;}</div>
808
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; </div>
809
+ <div class="line"><a name="l00804"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a421708269d991987d8d4e93cec750a8d"> 804</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallInst(<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> &amp;i)</div>
810
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;{</div>
811
+ <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; visitCallSite(&amp;i);</div>
812
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;}</div>
813
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; </div>
814
+ <div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a39577da11f4b85066988f105e3c18d7c"> 809</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitInvokeInst(<a class="code" href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">InvokeInst</a> &amp;i)</div>
815
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;{</div>
816
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; visitCallSite(&amp;i);</div>
817
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;}</div>
818
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; </div>
819
+ <div class="line"><a name="l00814"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a62da871a2bace42fa96baf8b9862d4db"> 814</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallBrInst(<a class="code" href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">CallBrInst</a> &amp;i)</div>
820
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;{</div>
821
+ <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; visitCallSite(&amp;i);</div>
822
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div>
823
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; </div>
824
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;<span class="comment">/*</span></div>
825
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;<span class="comment"> * Visit callsites</span></div>
826
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="comment"> */</span></div>
827
+ <div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c"> 822</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallSite(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
828
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;{</div>
829
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; </div>
830
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="comment">// skip llvm intrinsics</span></div>
831
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
832
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">return</span>;</div>
833
833
  <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
834
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
835
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process callsite &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
836
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; </div>
837
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
838
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfcall);</div>
839
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; </div>
840
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
834
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
835
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
836
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
837
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process callsite &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
838
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; </div>
839
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
840
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfcall);</div>
841
841
  <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div>
842
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cs-&gt;arg_size(); i++)</div>
843
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(getValueNode(cs-&gt;getArgOperand(i))));</div>
844
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; </div>
845
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">if</span>(!cs-&gt;getType()-&gt;isVoidTy())</div>
846
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(getValueNode(cs)));</div>
847
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; </div>
848
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">LLVMUtil::getCallee</a>(cs))</div>
849
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div>
850
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
851
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
852
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
853
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {</div>
854
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; handleExtCall(cs, svfcallee);</div>
855
- <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div>
856
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">else</span></div>
857
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; {</div>
858
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; handleDirectCall(cs, callee);</div>
859
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; }</div>
860
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; }</div>
861
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">else</span></div>
862
- <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; {</div>
863
- <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
864
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; handleIndCall(cs);</div>
865
- <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; }</div>
866
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;}</div>
867
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; </div>
868
- <div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 867</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &amp;inst)</div>
869
- <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;{</div>
870
- <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; </div>
871
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
872
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
873
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; </div>
874
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process return &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
842
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
843
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; </div>
844
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cs-&gt;arg_size(); i++)</div>
845
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(getValueNode(cs-&gt;getArgOperand(i))));</div>
846
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; </div>
847
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">if</span>(!cs-&gt;getType()-&gt;isVoidTy())</div>
848
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(getValueNode(cs)));</div>
849
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; </div>
850
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">LLVMUtil::getCallee</a>(cs))</div>
851
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div>
852
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
853
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
854
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
855
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div>
856
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; handleExtCall(cs, svfcallee);</div>
857
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</div>
858
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">else</span></div>
859
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div>
860
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; handleDirectCall(cs, callee);</div>
861
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div>
862
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div>
863
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">else</span></div>
864
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; {</div>
865
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
866
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; handleIndCall(cs);</div>
867
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</div>
868
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;}</div>
869
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; </div>
870
+ <div class="line"><a name="l00869"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 869</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &amp;inst)</div>
871
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;{</div>
872
+ <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; </div>
873
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
874
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
875
875
  <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; </div>
876
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
877
- <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; {</div>
878
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(inst.getParent()-&gt;getParent());</div>
879
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; </div>
880
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
881
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
882
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(&amp;inst);</div>
883
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfInst);</div>
884
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
885
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</div>
886
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div>
887
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;}</div>
888
- <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; </div>
889
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; </div>
890
- <div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 897</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &amp;inst)</div>
891
- <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;{</div>
892
- <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
893
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; addBlackHoleAddrEdge(dst);</div>
894
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;}</div>
895
- <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; </div>
896
- <div class="line"><a name="l00911"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 911</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &amp;inst)</div>
897
- <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;{</div>
898
- <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
899
- <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; addBlackHoleAddrEdge(dst);</div>
900
- <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;}</div>
901
- <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; </div>
902
- <div class="line"><a name="l00921"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 921</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &amp;inst)</div>
903
- <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;{</div>
904
- <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
905
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
906
- <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div>
907
- <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; cond = getValueNode(inst.getCondition());</div>
908
- <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">else</span></div>
909
- <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; cond = pag-&gt;getNullPtr();</div>
910
- <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; </div>
911
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; assert(inst.getNumSuccessors() &lt;= 2 &amp;&amp; <span class="stringliteral">&quot;if/else has more than two branches?&quot;</span>);</div>
876
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process return &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
877
+ <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; </div>
878
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
879
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; {</div>
880
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(inst.getParent()-&gt;getParent());</div>
881
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; </div>
882
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
883
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
884
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(&amp;inst);</div>
885
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfInst);</div>
886
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
887
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</div>
888
+ <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div>
889
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;}</div>
890
+ <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; </div>
891
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; </div>
892
+ <div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 899</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &amp;inst)</div>
893
+ <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;{</div>
894
+ <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
895
+ <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; addBlackHoleAddrEdge(dst);</div>
896
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;}</div>
897
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; </div>
898
+ <div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 913</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &amp;inst)</div>
899
+ <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;{</div>
900
+ <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
901
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; addBlackHoleAddrEdge(dst);</div>
902
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;}</div>
903
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; </div>
904
+ <div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 923</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &amp;inst)</div>
905
+ <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;{</div>
906
+ <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
907
+ <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
908
+ <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div>
909
+ <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; cond = getValueNode(inst.getCondition());</div>
910
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">else</span></div>
911
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; cond = pag-&gt;getNullPtr();</div>
912
912
  <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; </div>
913
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
914
- <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumSuccessors(); ++i)</div>
915
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; {</div>
916
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
917
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
918
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
919
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; successors.push_back(std::make_pair(icfgNode, 1-i));</div>
920
- <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; }</div>
921
- <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; addBranchStmt(brinst, cond,successors);</div>
922
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;}</div>
923
- <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; </div>
924
- <div class="line"><a name="l00943"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 943</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &amp;inst)</div>
925
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160;{</div>
926
- <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
927
- <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
928
- <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div>
929
- <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
913
+ <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; assert(inst.getNumSuccessors() &lt;= 2 &amp;&amp; <span class="stringliteral">&quot;if/else has more than two branches?&quot;</span>);</div>
914
+ <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; </div>
915
+ <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
916
+ <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumSuccessors(); ++i)</div>
917
+ <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; {</div>
918
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
919
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
920
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
921
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; successors.push_back(std::make_pair(icfgNode, 1-i));</div>
922
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; }</div>
923
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; addBranchStmt(brinst, cond,successors);</div>
924
+ <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;}</div>
925
+ <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; </div>
926
+ <div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 945</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &amp;inst)</div>
927
+ <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;{</div>
928
+ <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
929
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
930
930
  <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; </div>
931
- <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="comment">// get case successor basic block and related case value</span></div>
932
- <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
933
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
934
- <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
935
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div>
936
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(inst, succBB2CaseValue);</div>
937
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
938
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
939
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
940
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
941
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</div>
942
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; }</div>
943
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; addBranchStmt(brinst, cond, successors);</div>
944
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;}</div>
945
- <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; </div>
946
- <div class="line"><a name="l00970"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 970</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
947
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;{</div>
948
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
949
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
950
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
951
- <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; addCopyEdge(src,dst);</div>
952
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;}</div>
953
- <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; </div>
954
- <div class="line"><a name="l00982"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 982</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
955
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;{</div>
956
- <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
957
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumOperands(); i++)</div>
958
- <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; {</div>
959
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
960
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
961
- <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; addCopyEdge(src,dst);</div>
962
- <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; }</div>
963
- <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;}</div>
964
- <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; </div>
965
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; </div>
966
- <div class="line"><a name="l00997"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 997</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleDirectCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
967
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;{</div>
968
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
969
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
970
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
971
- <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
972
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
973
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
974
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; </div>
975
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
976
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
977
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
978
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
979
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; {</div>
980
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
981
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
982
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
983
- <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
984
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; }</div>
985
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
986
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
987
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_end();</div>
988
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
989
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
990
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
991
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; {</div>
992
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
993
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
994
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; {</div>
995
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
996
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">break</span>;</div>
997
- <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; }</div>
998
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA), *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div>
999
- <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; </div>
1000
- <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(AA)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
931
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
932
+ <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; </div>
933
+ <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="comment">// get case successor basic block and related case value</span></div>
934
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
935
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
936
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
937
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; {</div>
938
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(inst, succBB2CaseValue);</div>
939
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
940
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
941
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
942
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
943
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</div>
944
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; }</div>
945
+ <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; addBranchStmt(brinst, cond, successors);</div>
946
+ <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;}</div>
947
+ <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; </div>
948
+ <div class="line"><a name="l00972"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 972</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
949
+ <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;{</div>
950
+ <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
951
+ <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
952
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
953
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; addCopyEdge(src,dst);</div>
954
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;}</div>
955
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; </div>
956
+ <div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 984</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
957
+ <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;{</div>
958
+ <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
959
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumOperands(); i++)</div>
960
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; {</div>
961
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
962
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
963
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; addCopyEdge(src,dst);</div>
964
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div>
965
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;}</div>
966
+ <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
967
+ <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; </div>
968
+ <div class="line"><a name="l00999"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 999</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleDirectCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
969
+ <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;{</div>
970
+ <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; </div>
971
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
972
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
973
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
974
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
975
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
976
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; </div>
977
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
978
+ <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
979
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
980
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
981
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; {</div>
982
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
983
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
984
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
985
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
986
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; }</div>
987
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
988
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
989
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_end();</div>
990
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
991
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
992
+ <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
993
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; {</div>
994
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
995
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
996
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div>
997
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
998
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordflow">break</span>;</div>
999
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; }</div>
1000
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA), *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div>
1001
1001
  <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; </div>
1002
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1003
- <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1004
- <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1005
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1006
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1007
- <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; }</div>
1008
- <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1009
- <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1010
- <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; {</div>
1011
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1012
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
1013
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1014
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div>
1015
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1016
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1017
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1018
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1019
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1020
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; }</div>
1021
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; }</div>
1022
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1023
- <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; {</div>
1024
- <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
1025
- <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
1026
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; </div>
1027
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; }</div>
1028
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;}</div>
1029
- <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; </div>
1030
- <div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1063</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* SVFIRBuilder::getBaseValueForExtArg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div>
1031
- <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;{</div>
1032
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
1033
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1034
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(value))</div>
1035
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; {</div>
1036
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1037
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
1038
- <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; {</div>
1039
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div>
1040
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1041
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; }</div>
1042
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1043
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; value = gep-&gt;getPointerOperand();</div>
1044
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; }</div>
1045
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; </div>
1046
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
1047
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="comment">// further steps are necessary to find the correct base value</span></div>
1048
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="comment">//</span></div>
1049
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// (1)</span></div>
1050
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">// %call = malloc 80</span></div>
1051
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
1052
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
1053
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
1054
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">//</span></div>
1055
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="comment">// (2)</span></div>
1056
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
1057
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
1058
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">// %3 = load i8*, i8** %2</span></div>
1059
- <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
1060
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &amp;cxt = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
1061
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">if</span> (value-&gt;getType() == PointerType::getInt8PtrTy(cxt))</div>
1062
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; {</div>
1063
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="comment">// (1)</span></div>
1064
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1065
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; {</div>
1066
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cb);</div>
1067
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
1068
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; {</div>
1069
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">getUniqueUseViaCastInst</a>(cb))</div>
1070
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keywordflow">return</span> bitCast;</div>
1071
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; }</div>
1072
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; }</div>
1073
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">// (2)</span></div>
1074
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1075
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div>
1076
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(load-&gt;getPointerOperand()))</div>
1077
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">return</span> bitCast-&gt;getOperand(0);</div>
1078
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; }</div>
1079
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; }</div>
1080
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; </div>
1081
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keywordflow">return</span> value;</div>
1082
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;}</div>
1083
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; </div>
1084
- <div class="line"><a name="l01120"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1120</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1085
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;{</div>
1086
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1087
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(cs-&gt;getCalledOperand());</div>
1088
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; </div>
1089
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1090
- <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1091
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;}</div>
1092
- <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; </div>
1093
- <div class="line"><a name="l01129"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1129</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1094
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;{</div>
1095
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1096
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1097
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1098
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; {</div>
1099
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1100
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast&lt;CallBase&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
1101
- <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; assert(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div>
1102
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; functions = iter-&gt;second;</div>
1103
- <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1104
- <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; {</div>
1105
- <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast&lt;Function&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(*func_iter));</div>
1106
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; </div>
1107
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1108
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; {</div>
1109
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1110
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1111
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; handleExtCall(callbase, svfcallee);</div>
1112
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; }</div>
1113
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">else</span></div>
1114
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; {</div>
1115
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; setCurrentLocation(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
1116
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; handleDirectCall(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">&gt;</span>(callbase), callee);</div>
1117
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div>
1118
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; }</div>
1119
- <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; }</div>
1120
- <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; </div>
1121
- <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="comment">// dump SVFIR</span></div>
1122
- <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1123
- <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div>
1124
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;}</div>
1125
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; </div>
1126
- <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment">/*</span></div>
1127
- <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1128
- <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="comment"> */</span></div>
1129
- <div class="line"><a name="l01165"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1165</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1130
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;{</div>
1131
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;begin(); nIter != pag-&gt;end(); ++nIter)</div>
1132
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; {</div>
1133
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1134
- <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="comment">//TODO::</span></div>
1135
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1136
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1137
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1138
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1139
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1140
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1141
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1142
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1143
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1144
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1145
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1146
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1147
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; }</div>
1148
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;}</div>
1149
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; </div>
1150
- <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; </div>
1151
- <div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1191</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGepValVar(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType)</div>
1152
- <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;{</div>
1153
- <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseValVar(getValueNode(val));</div>
1154
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1155
- <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1156
- <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div>
1157
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 &amp;&amp; <span class="stringliteral">&quot;maximum limit of unsigned int is not -1?&quot;</span>);</div>
1158
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="comment">/*</span></div>
1159
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1160
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1161
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1162
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1163
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1164
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1165
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> */</span></div>
1166
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; assert((SVFUtil::isa&lt;SVFInstruction, SVFGlobalValue&gt;(curVal)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div>
1167
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; </div>
1168
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1169
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1170
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1171
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1172
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1173
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1174
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag-&gt;addGepValNode(curVal, llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, NodeIDAllocator::get()-&gt;allocateValueId(),elementType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
1175
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1176
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; setCurrentLocation(cval, cbb);</div>
1177
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1178
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; }</div>
1179
- <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">else</span></div>
1180
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1181
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;}</div>
1182
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; </div>
1183
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; </div>
1184
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;<span class="comment">/*</span></div>
1185
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1186
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1187
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1188
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1189
- <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1190
- <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1191
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1192
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1193
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1194
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1195
- <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1196
- <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"> */</span></div>
1197
- <div class="line"><a name="l01237"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1237</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1198
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;{</div>
1199
- <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1200
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">return</span>;</div>
1201
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; </div>
1202
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1203
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(curBB!=<span class="keyword">nullptr</span> ? curBB : <span class="keyword">nullptr</span>);</div>
1204
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1205
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1206
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1207
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1208
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(curVal))</div>
1209
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; {</div>
1210
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div>
1211
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div>
1212
- <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue()))</div>
1213
- <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; {</div>
1214
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; assert(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div>
1215
- <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; }</div>
1216
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue()))</div>
1217
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; {</div>
1218
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; assert(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div>
1219
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div>
1220
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; </div>
1221
- <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
1222
- <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1223
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; </div>
1224
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1225
- <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; {</div>
1226
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1227
- <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; }</div>
1228
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keywordflow">else</span></div>
1229
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; {</div>
1230
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1231
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1232
- <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">else</span></div>
1233
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1234
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; }</div>
1235
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; }</div>
1236
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVFArgument&gt;(curVal))</div>
1237
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; {</div>
1238
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1239
- <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1240
- <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; }</div>
1241
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1242
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1243
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1244
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; {</div>
1245
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1246
- <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1247
- <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">else</span></div>
1248
- <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; {</div>
1249
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1250
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }</div>
1251
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; }</div>
1252
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">else</span></div>
1253
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; {</div>
1254
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1255
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div>
1256
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; </div>
1257
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1258
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1259
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(edge))</div>
1260
- <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; {</div>
1261
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getCallSite());</div>
1262
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getFunEntryICFGNode());</div>
1263
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))</div>
1264
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</div>
1265
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; }</div>
1266
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(edge))</div>
1267
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; {</div>
1268
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getCallSite()-&gt;getRetICFGNode());</div>
1269
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getFunExitICFGNode());</div>
1270
- <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))</div>
1271
- <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</div>
1272
- <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; }</div>
1273
- <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;}</div>
1274
- <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; </div>
1275
- <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; </div>
1276
- <div class="line"><a name="l01324"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1324</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> SVFIRBuilder::getAccessPathFromBaseNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
1277
- <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;{</div>
1278
- <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1279
- <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; geps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(SVFStmt::Gep);</div>
1280
- <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1281
- <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1282
- <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; </div>
1283
- <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; assert(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div>
1284
- <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1285
- <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast&lt;GepStmt&gt;(*it);</div>
1286
- <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1287
- <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1288
- <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">else</span></div>
1289
- <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1290
- <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;}</div>
1002
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(AA)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
1003
+ <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; </div>
1004
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1005
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1006
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1007
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1008
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1009
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div>
1010
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1011
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1012
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; {</div>
1013
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1014
+ <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
1015
+ <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1016
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div>
1017
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1018
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1019
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1020
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1021
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1022
+ <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div>
1023
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div>
1024
+ <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1025
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; {</div>
1026
+ <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
1027
+ <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
1028
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; </div>
1029
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; }</div>
1030
+ <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;}</div>
1031
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; </div>
1032
+ <div class="line"><a name="l01065"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1065</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* SVFIRBuilder::getBaseValueForExtArg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div>
1033
+ <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;{</div>
1034
+ <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
1035
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1036
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(value))</div>
1037
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; {</div>
1038
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1039
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
1040
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; {</div>
1041
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div>
1042
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1043
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; }</div>
1044
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1045
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; value = gep-&gt;getPointerOperand();</div>
1046
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; }</div>
1047
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; </div>
1048
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
1049
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// further steps are necessary to find the correct base value</span></div>
1050
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">//</span></div>
1051
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="comment">// (1)</span></div>
1052
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// %call = malloc 80</span></div>
1053
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
1054
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
1055
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
1056
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">//</span></div>
1057
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// (2)</span></div>
1058
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
1059
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
1060
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="comment">// %3 = load i8*, i8** %2</span></div>
1061
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
1062
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &amp;cxt = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
1063
+ <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">if</span> (value-&gt;getType() == PointerType::getInt8PtrTy(cxt))</div>
1064
+ <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div>
1065
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="comment">// (1)</span></div>
1066
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1067
+ <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; {</div>
1068
+ <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cb);</div>
1069
+ <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
1070
+ <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div>
1071
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">getUniqueUseViaCastInst</a>(cb))</div>
1072
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">return</span> bitCast;</div>
1073
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; }</div>
1074
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; }</div>
1075
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="comment">// (2)</span></div>
1076
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1077
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; {</div>
1078
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(load-&gt;getPointerOperand()))</div>
1079
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">return</span> bitCast-&gt;getOperand(0);</div>
1080
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; }</div>
1081
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div>
1082
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; </div>
1083
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">return</span> value;</div>
1084
+ <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;}</div>
1085
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; </div>
1086
+ <div class="line"><a name="l01122"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1122</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1087
+ <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;{</div>
1088
+ <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1089
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(cs-&gt;getCalledOperand());</div>
1090
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; </div>
1091
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1092
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1093
+ <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;}</div>
1094
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; </div>
1095
+ <div class="line"><a name="l01131"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1131</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1096
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;{</div>
1097
+ <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1098
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1099
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1100
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; {</div>
1101
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1102
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast&lt;CallBase&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
1103
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; assert(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div>
1104
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; functions = iter-&gt;second;</div>
1105
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1106
+ <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; {</div>
1107
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast&lt;Function&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(*func_iter));</div>
1108
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; </div>
1109
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1110
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; {</div>
1111
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1112
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1113
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; handleExtCall(callbase, svfcallee);</div>
1114
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; }</div>
1115
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">else</span></div>
1116
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; {</div>
1117
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; setCurrentLocation(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
1118
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; handleDirectCall(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">&gt;</span>(callbase), callee);</div>
1119
+ <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; }</div>
1120
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; }</div>
1121
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; }</div>
1122
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; </div>
1123
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="comment">// dump SVFIR</span></div>
1124
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1125
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div>
1126
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;}</div>
1127
+ <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; </div>
1128
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="comment">/*</span></div>
1129
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1130
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment"> */</span></div>
1131
+ <div class="line"><a name="l01167"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1167</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1132
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;{</div>
1133
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;begin(); nIter != pag-&gt;end(); ++nIter)</div>
1134
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; {</div>
1135
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1136
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="comment">//TODO::</span></div>
1137
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1138
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1139
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1140
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1141
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1142
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1143
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1144
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1145
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1146
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1147
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1148
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1149
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; }</div>
1150
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;}</div>
1151
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
1152
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; </div>
1153
+ <div class="line"><a name="l01193"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1193</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGepValVar(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType)</div>
1154
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;{</div>
1155
+ <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseValVar(getValueNode(val));</div>
1156
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1157
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1158
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; {</div>
1159
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 &amp;&amp; <span class="stringliteral">&quot;maximum limit of unsigned int is not -1?&quot;</span>);</div>
1160
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="comment">/*</span></div>
1161
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1162
+ <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1163
+ <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1164
+ <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1165
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1166
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1167
+ <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> */</span></div>
1168
+ <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; assert((SVFUtil::isa&lt;SVFInstruction, SVFGlobalValue&gt;(curVal)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div>
1169
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; </div>
1170
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1171
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1172
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1173
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1174
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1175
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1176
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag-&gt;addGepValNode(curVal, llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, NodeIDAllocator::get()-&gt;allocateValueId(),elementType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
1177
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1178
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; setCurrentLocation(cval, cbb);</div>
1179
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1180
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div>
1181
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">else</span></div>
1182
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1183
+ <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;}</div>
1184
+ <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; </div>
1185
+ <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; </div>
1186
+ <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment">/*</span></div>
1187
+ <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1188
+ <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1189
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1190
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1191
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1192
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1193
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1194
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1195
+ <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1196
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1197
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1198
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="comment"> */</span></div>
1199
+ <div class="line"><a name="l01239"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1239</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1200
+ <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;{</div>
1201
+ <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1202
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">return</span>;</div>
1203
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; </div>
1204
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1205
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(curBB!=<span class="keyword">nullptr</span> ? curBB : <span class="keyword">nullptr</span>);</div>
1206
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1207
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1208
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1209
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1210
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(curVal))</div>
1211
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {</div>
1212
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div>
1213
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div>
1214
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue()))</div>
1215
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; {</div>
1216
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; assert(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div>
1217
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; }</div>
1218
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue()))</div>
1219
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; {</div>
1220
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; assert(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div>
1221
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; }</div>
1222
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; </div>
1223
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
1224
+ <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1225
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; </div>
1226
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1227
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; {</div>
1228
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1229
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; }</div>
1230
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">else</span></div>
1231
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; {</div>
1232
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1233
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1234
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">else</span></div>
1235
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1236
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; }</div>
1237
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; }</div>
1238
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVFArgument&gt;(curVal))</div>
1239
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; {</div>
1240
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1241
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1242
+ <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; }</div>
1243
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1244
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1245
+ <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1246
+ <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; {</div>
1247
+ <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1248
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1249
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">else</span></div>
1250
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; {</div>
1251
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1252
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; }</div>
1253
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; }</div>
1254
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">else</span></div>
1255
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; {</div>
1256
+ <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1257
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; }</div>
1258
+ <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; </div>
1259
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1260
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1261
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(edge))</div>
1262
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div>
1263
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getCallSite());</div>
1264
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getFunEntryICFGNode());</div>
1265
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))</div>
1266
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</div>
1267
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; }</div>
1268
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(edge))</div>
1269
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; {</div>
1270
+ <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getCallSite()-&gt;getRetICFGNode());</div>
1271
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getFunExitICFGNode());</div>
1272
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))</div>
1273
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</div>
1274
+ <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; }</div>
1275
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;}</div>
1276
+ <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
1277
+ <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; </div>
1278
+ <div class="line"><a name="l01326"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1326</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> SVFIRBuilder::getAccessPathFromBaseNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
1279
+ <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;{</div>
1280
+ <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1281
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; geps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(SVFStmt::Gep);</div>
1282
+ <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1283
+ <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1284
+ <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; </div>
1285
+ <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; assert(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div>
1286
+ <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1287
+ <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast&lt;GepStmt&gt;(*it);</div>
1288
+ <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1289
+ <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1290
+ <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keywordflow">else</span></div>
1291
+ <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1292
+ <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;}</div>
1291
1293
  </div><!-- fragment --></div><!-- contents -->
1292
1294
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
1293
1295
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a38ce45ae5f017c90115ce444b44d478c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">SVF::LLVMUtil::stripAllCasts</a></div><div class="ttdeci">const Value * stripAllCasts(const Value *val)</div><div class="ttdoc">Strip off the all casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00263">LLVMUtil.cpp:263</a></div></div>
@@ -1337,6 +1339,7 @@ $(function() {
1337
1339
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a3672b4797c400aac90c6d36ce29e0e57"><div class="ttname"><a href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">SVF::SVFType::getPointerTo</a></div><div class="ttdeci">const SVFPointerType * getPointerTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00297">SVFType.h:297</a></div></div>
1338
1340
  <div class="ttc" id="anamespacellvm_html_a7cfc92a12082d69711c97bb3d1b99c48"><div class="ttname"><a href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">llvm::bridge_gep_end</a></div><div class="ttdeci">bridge_gep_iterator bridge_gep_end(const User *GEP)</div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00157">GEPTypeBridgeIterator.h:157</a></div></div>
1339
1341
  <div class="ttc" id="aLLVMLoopAnalysis_8h_html"><div class="ttname"><a href="LLVMLoopAnalysis_8h.html">LLVMLoopAnalysis.h</a></div></div>
1342
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a5427d08c9eb9d86e66c2bff6aeba6bac"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">SVF::AccessPath::getConstantStructFldIdx</a></div><div class="ttdeci">APOffset getConstantStructFldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00100">AccessPath.h:100</a></div></div>
1340
1343
  <div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
1341
1344
  <div class="ttc" id="anamespaceSVF_html_afb88c4d723dd7c51bdfc7ba5893cb356"><div class="ttname"><a href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">SVF::ExtractElementInst</a></div><div class="ttdeci">llvm::ExtractElementInst ExtractElementInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00159">BasicTypes.h:159</a></div></div>
1342
1345
  <div class="ttc" id="aclassSVF_1_1CallPE_html"><div class="ttname"><a href="classSVF_1_1CallPE.html">SVF::CallPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00545">SVFStatements.h:545</a></div></div>
@@ -1352,7 +1355,6 @@ $(function() {
1352
1355
  <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
1353
1356
  <div class="ttc" id="anamespaceSVF_html_ac9a05dd7ab16e998625037aa242cd30f"><div class="ttname"><a href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">SVF::BranchInst</a></div><div class="ttdeci">llvm::BranchInst BranchInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00152">BasicTypes.h:152</a></div></div>
1354
1357
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a837d19c740902c419206287bdb21273b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">SVF::LLVMUtil::getUniqueUseViaCastInst</a></div><div class="ttdeci">const Value * getUniqueUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00349">LLVMUtil.cpp:349</a></div></div>
1355
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a68e49bb797a84ea035ea338549f2e054"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">SVF::AccessPath::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00098">AccessPath.h:98</a></div></div>
1356
1358
  <div class="ttc" id="aCppUtil_8h_html"><div class="ttname"><a href="CppUtil_8h.html">CppUtil.h</a></div></div>
1357
1359
  <div class="ttc" id="anamespaceSVF_html_a146d286041987860388da3d8bc85cee3"><div class="ttname"><a href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">SVF::ArrayType</a></div><div class="ttdeci">llvm::ArrayType ArrayType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
1358
1360
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_ab582424fdb6d9674c1bd4466cdfbe497"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab582424fdb6d9674c1bd4466cdfbe497">SVF::SymbolTableInfo::constantSymID</a></div><div class="ttdeci">SymID constantSymID() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00193">SymbolTableInfo.h:193</a></div></div>
@@ -1367,7 +1369,7 @@ $(function() {
1367
1369
  <div class="ttc" id="aclassSVF_1_1SVFType_html"><div class="ttname"><a href="classSVF_1_1SVFType.html">SVF::SVFType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00242">SVFType.h:242</a></div></div>
1368
1370
  <div class="ttc" id="anamespaceSVF_html_ac8d4990439af7a2ecca7e15383119674"><div class="ttname"><a href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">SVF::PHINode</a></div><div class="ttdeci">llvm::PHINode PHINode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00163">BasicTypes.h:163</a></div></div>
1369
1371
  <div class="ttc" id="aclassSVF_1_1GepStmt_html_a6c74f234a6b40bc5292bb14874c2e600"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">SVF::GepStmt::getAccessPath</a></div><div class="ttdeci">const AccessPath &amp; getAccessPath() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00491">SVFStatements.h:491</a></div></div>
1370
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_ab95df74c97fba13206df48e00131e15f"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">SVF::AccessPath::setFldIdx</a></div><div class="ttdeci">void setFldIdx(APOffset idx)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00102">AccessPath.h:102</a></div></div>
1372
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_ab95df74c97fba13206df48e00131e15f"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">SVF::AccessPath::setFldIdx</a></div><div class="ttdeci">void setFldIdx(APOffset idx)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00104">AccessPath.h:104</a></div></div>
1371
1373
  <div class="ttc" id="anamespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
1372
1374
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a946a2b51b848c45c6c52f03581ee05b8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">SVF::LLVMUtil::isTruncConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isTruncConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00284">LLVMUtil.h:284</a></div></div>
1373
1375
  <div class="ttc" id="anamespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00092">BasicTypes.h:92</a></div></div>