svf-tools 1.0.901 → 1.0.902

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 (311) hide show
  1. package/SVF-doxygen/html/AbstractExecution_8cpp_source.html +10 -10
  2. package/SVF-doxygen/html/AbstractExecution_8h_source.html +2 -2
  3. package/SVF-doxygen/html/Andersen_8h_source.html +1 -1
  4. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +2 -2
  5. package/SVF-doxygen/html/CSC_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/ConsGNode_8h_source.html +4 -4
  7. package/SVF-doxygen/html/ConsG_8cpp_source.html +760 -757
  8. package/SVF-doxygen/html/ConsG_8h_source.html +19 -19
  9. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +3 -3
  10. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +3 -3
  12. package/SVF-doxygen/html/ICFGEdge_8h_source.html +2 -2
  13. package/SVF-doxygen/html/ICFG_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/MSSAMuChi_8h_source.html +2 -2
  16. package/SVF-doxygen/html/MemRegion_8cpp_source.html +2 -2
  17. package/SVF-doxygen/html/MemRegion_8h_source.html +2 -2
  18. package/SVF-doxygen/html/MemSSA_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/MemSSA_8h_source.html +2 -2
  20. package/SVF-doxygen/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +14 -14
  22. package/SVF-doxygen/html/SVFFileSystem_8h_source.html +14 -14
  23. package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/SVFG_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +60 -60
  26. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +9 -9
  27. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +216 -206
  28. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +14 -14
  29. package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +35 -35
  30. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +800 -804
  31. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +59 -59
  32. package/SVF-doxygen/html/SVFIR_8cpp_source.html +20 -20
  33. package/SVF-doxygen/html/SVFIR_8h_source.html +197 -197
  34. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +20 -20
  35. package/SVF-doxygen/html/SVFStatements_8h_source.html +1001 -953
  36. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +7 -7
  37. package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +2 -2
  38. package/SVF-doxygen/html/Steensgaard_8h_source.html +1 -1
  39. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +485 -483
  40. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +14 -14
  41. package/SVF-doxygen/html/VFGNode_8h_source.html +10 -10
  42. package/SVF-doxygen/html/VFG_8cpp_source.html +16 -16
  43. package/SVF-doxygen/html/VFG_8h_source.html +13 -13
  44. package/SVF-doxygen/html/ae_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/classSVF_1_1AbstractExecution.html +15 -15
  46. package/SVF-doxygen/html/classSVF_1_1AddrCGEdge.html +11 -11
  47. package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
  48. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +2 -2
  49. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +68 -68
  50. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +51 -51
  51. package/SVF-doxygen/html/classSVF_1_1BranchVFGNode.html +3 -3
  52. package/SVF-doxygen/html/classSVF_1_1CSC.html +2 -2
  53. package/SVF-doxygen/html/classSVF_1_1CallPE.html +35 -35
  54. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +97 -97
  55. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph.html +514 -511
  56. package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +28 -28
  57. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +3 -3
  58. package/SVF-doxygen/html/classSVF_1_1CopyStmt-members.html +8 -2
  59. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +238 -35
  60. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +3 -3
  61. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +3 -3
  62. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +56 -56
  63. package/SVF-doxygen/html/classSVF_1_1ICFG.html +2 -2
  64. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +19 -19
  65. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +2 -2
  66. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +2 -2
  67. package/SVF-doxygen/html/classSVF_1_1MultiOpndStmt.html +48 -48
  68. package/SVF-doxygen/html/classSVF_1_1PAGBuilderFromFile.html +15 -15
  69. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +46 -46
  70. package/SVF-doxygen/html/classSVF_1_1RetPE.html +35 -35
  71. package/SVF-doxygen/html/classSVF_1_1SVFG.html +1 -1
  72. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +137 -136
  73. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +51 -51
  74. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +197 -187
  75. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +770 -775
  76. package/SVF-doxygen/html/classSVF_1_1SVFIRReader.html +1 -1
  77. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +7 -7
  78. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +38 -38
  79. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +17 -17
  81. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +466 -464
  82. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +22 -22
  83. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +21 -21
  84. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +44 -44
  85. package/SVF-doxygen/html/classSVF_1_1VFG.html +16 -16
  86. package/SVF-doxygen/html/functions_func_i.html +28 -10
  87. package/SVF-doxygen/html/functions_i.html +30 -12
  88. package/SVF-doxygen/html/functions_l.html +3 -3
  89. package/SVF-doxygen/html/functions_p.html +15 -11
  90. package/SVF-doxygen/html/functions_r.html +1 -1
  91. package/SVF-doxygen/html/functions_s.html +7 -7
  92. package/SVF-doxygen/html/functions_t.html +3 -3
  93. package/SVF-doxygen/html/functions_v.html +6 -6
  94. package/SVF-doxygen/html/functions_w.html +7 -13
  95. package/SVF-doxygen/html/namespaceSVF.html +1 -1
  96. package/SVF-doxygen/html/search/all_10.js +326 -326
  97. package/SVF-doxygen/html/search/all_11.js +226 -226
  98. package/SVF-doxygen/html/search/all_12.js +574 -574
  99. package/SVF-doxygen/html/search/all_13.js +208 -208
  100. package/SVF-doxygen/html/search/all_14.js +73 -73
  101. package/SVF-doxygen/html/search/all_15.js +176 -176
  102. package/SVF-doxygen/html/search/all_16.js +77 -77
  103. package/SVF-doxygen/html/search/all_17.js +1 -1
  104. package/SVF-doxygen/html/search/all_18.js +1 -1
  105. package/SVF-doxygen/html/search/all_19.js +27 -27
  106. package/SVF-doxygen/html/search/all_1a.js +179 -179
  107. package/SVF-doxygen/html/search/all_9.js +308 -302
  108. package/SVF-doxygen/html/search/all_a.js +46 -46
  109. package/SVF-doxygen/html/search/all_b.js +26 -26
  110. package/SVF-doxygen/html/search/all_c.js +115 -115
  111. package/SVF-doxygen/html/search/all_d.js +204 -204
  112. package/SVF-doxygen/html/search/all_e.js +209 -209
  113. package/SVF-doxygen/html/search/all_f.js +122 -122
  114. package/SVF-doxygen/html/search/classes_0.js +28 -28
  115. package/SVF-doxygen/html/search/classes_1.js +11 -11
  116. package/SVF-doxygen/html/search/classes_10.js +74 -74
  117. package/SVF-doxygen/html/search/classes_11.js +14 -14
  118. package/SVF-doxygen/html/search/classes_12.js +2 -2
  119. package/SVF-doxygen/html/search/classes_13.js +10 -10
  120. package/SVF-doxygen/html/search/classes_14.js +19 -19
  121. package/SVF-doxygen/html/search/classes_15.js +1 -1
  122. package/SVF-doxygen/html/search/classes_2.js +73 -73
  123. package/SVF-doxygen/html/search/classes_3.js +35 -35
  124. package/SVF-doxygen/html/search/classes_4.js +8 -8
  125. package/SVF-doxygen/html/search/classes_5.js +28 -28
  126. package/SVF-doxygen/html/search/classes_6.js +98 -98
  127. package/SVF-doxygen/html/search/classes_7.js +38 -38
  128. package/SVF-doxygen/html/search/classes_8.js +59 -59
  129. package/SVF-doxygen/html/search/classes_9.js +1 -1
  130. package/SVF-doxygen/html/search/classes_a.js +12 -12
  131. package/SVF-doxygen/html/search/classes_b.js +29 -29
  132. package/SVF-doxygen/html/search/classes_c.js +6 -6
  133. package/SVF-doxygen/html/search/classes_d.js +19 -19
  134. package/SVF-doxygen/html/search/classes_e.js +36 -36
  135. package/SVF-doxygen/html/search/classes_f.js +25 -25
  136. package/SVF-doxygen/html/search/defines_0.js +3 -3
  137. package/SVF-doxygen/html/search/defines_1.js +3 -3
  138. package/SVF-doxygen/html/search/defines_10.js +2 -2
  139. package/SVF-doxygen/html/search/defines_2.js +30 -30
  140. package/SVF-doxygen/html/search/defines_3.js +20 -20
  141. package/SVF-doxygen/html/search/defines_4.js +3 -3
  142. package/SVF-doxygen/html/search/defines_5.js +4 -4
  143. package/SVF-doxygen/html/search/defines_6.js +2 -2
  144. package/SVF-doxygen/html/search/defines_7.js +5 -5
  145. package/SVF-doxygen/html/search/defines_8.js +11 -11
  146. package/SVF-doxygen/html/search/defines_9.js +9 -9
  147. package/SVF-doxygen/html/search/defines_a.js +2 -2
  148. package/SVF-doxygen/html/search/defines_b.js +1 -1
  149. package/SVF-doxygen/html/search/defines_c.js +4 -4
  150. package/SVF-doxygen/html/search/defines_d.js +2 -2
  151. package/SVF-doxygen/html/search/defines_e.js +8 -8
  152. package/SVF-doxygen/html/search/defines_f.js +4 -4
  153. package/SVF-doxygen/html/search/enums_0.js +4 -4
  154. package/SVF-doxygen/html/search/enums_1.js +2 -2
  155. package/SVF-doxygen/html/search/enums_10.js +1 -1
  156. package/SVF-doxygen/html/search/enums_11.js +1 -1
  157. package/SVF-doxygen/html/search/enums_2.js +9 -9
  158. package/SVF-doxygen/html/search/enums_3.js +1 -1
  159. package/SVF-doxygen/html/search/enums_4.js +4 -4
  160. package/SVF-doxygen/html/search/enums_5.js +1 -1
  161. package/SVF-doxygen/html/search/enums_6.js +2 -2
  162. package/SVF-doxygen/html/search/enums_7.js +2 -2
  163. package/SVF-doxygen/html/search/enums_8.js +4 -4
  164. package/SVF-doxygen/html/search/enums_9.js +1 -1
  165. package/SVF-doxygen/html/search/enums_a.js +1 -1
  166. package/SVF-doxygen/html/search/enums_b.js +7 -7
  167. package/SVF-doxygen/html/search/enums_c.js +1 -1
  168. package/SVF-doxygen/html/search/enums_d.js +4 -4
  169. package/SVF-doxygen/html/search/enums_e.js +2 -2
  170. package/SVF-doxygen/html/search/enums_f.js +4 -4
  171. package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
  172. package/SVF-doxygen/html/search/enumvalues_1.js +16 -16
  173. package/SVF-doxygen/html/search/enumvalues_10.js +36 -36
  174. package/SVF-doxygen/html/search/enumvalues_11.js +5 -5
  175. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  176. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  177. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  178. package/SVF-doxygen/html/search/enumvalues_15.js +4 -4
  179. package/SVF-doxygen/html/search/enumvalues_2.js +37 -37
  180. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  181. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  182. package/SVF-doxygen/html/search/enumvalues_5.js +50 -50
  183. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  184. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  185. package/SVF-doxygen/html/search/enumvalues_8.js +24 -24
  186. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  187. package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
  188. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  189. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  190. package/SVF-doxygen/html/search/enumvalues_d.js +19 -19
  191. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  192. package/SVF-doxygen/html/search/enumvalues_f.js +49 -49
  193. package/SVF-doxygen/html/search/files_0.js +16 -16
  194. package/SVF-doxygen/html/search/files_1.js +9 -9
  195. package/SVF-doxygen/html/search/files_10.js +8 -8
  196. package/SVF-doxygen/html/search/files_11.js +8 -8
  197. package/SVF-doxygen/html/search/files_12.js +2 -2
  198. package/SVF-doxygen/html/search/files_2.js +53 -53
  199. package/SVF-doxygen/html/search/files_3.js +14 -14
  200. package/SVF-doxygen/html/search/files_4.js +5 -5
  201. package/SVF-doxygen/html/search/files_5.js +13 -13
  202. package/SVF-doxygen/html/search/files_6.js +10 -10
  203. package/SVF-doxygen/html/search/files_7.js +17 -17
  204. package/SVF-doxygen/html/search/files_8.js +13 -13
  205. package/SVF-doxygen/html/search/files_9.js +18 -18
  206. package/SVF-doxygen/html/search/files_a.js +3 -3
  207. package/SVF-doxygen/html/search/files_b.js +4 -4
  208. package/SVF-doxygen/html/search/files_c.js +20 -20
  209. package/SVF-doxygen/html/search/files_d.js +4 -4
  210. package/SVF-doxygen/html/search/files_e.js +62 -62
  211. package/SVF-doxygen/html/search/files_f.js +8 -8
  212. package/SVF-doxygen/html/search/functions_0.js +13 -13
  213. package/SVF-doxygen/html/search/functions_1.js +368 -368
  214. package/SVF-doxygen/html/search/functions_10.js +140 -140
  215. package/SVF-doxygen/html/search/functions_11.js +140 -140
  216. package/SVF-doxygen/html/search/functions_12.js +299 -299
  217. package/SVF-doxygen/html/search/functions_13.js +73 -73
  218. package/SVF-doxygen/html/search/functions_14.js +41 -41
  219. package/SVF-doxygen/html/search/functions_15.js +72 -72
  220. package/SVF-doxygen/html/search/functions_16.js +38 -38
  221. package/SVF-doxygen/html/search/functions_17.js +3 -3
  222. package/SVF-doxygen/html/search/functions_18.js +179 -179
  223. package/SVF-doxygen/html/search/functions_2.js +94 -94
  224. package/SVF-doxygen/html/search/functions_3.js +261 -261
  225. package/SVF-doxygen/html/search/functions_4.js +85 -85
  226. package/SVF-doxygen/html/search/functions_5.js +57 -57
  227. package/SVF-doxygen/html/search/functions_6.js +65 -65
  228. package/SVF-doxygen/html/search/functions_7.js +872 -872
  229. package/SVF-doxygen/html/search/functions_8.js +162 -162
  230. package/SVF-doxygen/html/search/functions_9.js +446 -440
  231. package/SVF-doxygen/html/search/functions_a.js +30 -30
  232. package/SVF-doxygen/html/search/functions_b.js +2 -2
  233. package/SVF-doxygen/html/search/functions_c.js +25 -25
  234. package/SVF-doxygen/html/search/functions_d.js +82 -82
  235. package/SVF-doxygen/html/search/functions_e.js +36 -36
  236. package/SVF-doxygen/html/search/functions_f.js +58 -58
  237. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  238. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  239. package/SVF-doxygen/html/search/related_0.js +4 -4
  240. package/SVF-doxygen/html/search/related_1.js +2 -2
  241. package/SVF-doxygen/html/search/related_2.js +2 -2
  242. package/SVF-doxygen/html/search/related_3.js +2 -2
  243. package/SVF-doxygen/html/search/related_4.js +2 -2
  244. package/SVF-doxygen/html/search/related_5.js +1 -1
  245. package/SVF-doxygen/html/search/related_6.js +2 -2
  246. package/SVF-doxygen/html/search/related_7.js +5 -5
  247. package/SVF-doxygen/html/search/related_8.js +2 -2
  248. package/SVF-doxygen/html/search/related_9.js +4 -4
  249. package/SVF-doxygen/html/search/related_a.js +19 -19
  250. package/SVF-doxygen/html/search/related_b.js +4 -4
  251. package/SVF-doxygen/html/search/related_c.js +2 -2
  252. package/SVF-doxygen/html/search/related_d.js +12 -12
  253. package/SVF-doxygen/html/search/related_e.js +2 -2
  254. package/SVF-doxygen/html/search/related_f.js +2 -2
  255. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  256. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  257. package/SVF-doxygen/html/search/typedefs_10.js +65 -65
  258. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  259. package/SVF-doxygen/html/search/typedefs_12.js +13 -13
  260. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  261. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  262. package/SVF-doxygen/html/search/typedefs_2.js +125 -125
  263. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  264. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  265. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  266. package/SVF-doxygen/html/search/typedefs_6.js +54 -54
  267. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  268. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  269. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  270. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  271. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  272. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  273. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  274. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  275. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  276. package/SVF-doxygen/html/search/variables_0.js +177 -177
  277. package/SVF-doxygen/html/search/variables_1.js +77 -77
  278. package/SVF-doxygen/html/search/variables_10.js +98 -98
  279. package/SVF-doxygen/html/search/variables_11.js +46 -46
  280. package/SVF-doxygen/html/search/variables_12.js +93 -93
  281. package/SVF-doxygen/html/search/variables_13.js +76 -76
  282. package/SVF-doxygen/html/search/variables_14.js +14 -14
  283. package/SVF-doxygen/html/search/variables_15.js +49 -49
  284. package/SVF-doxygen/html/search/variables_16.js +11 -11
  285. package/SVF-doxygen/html/search/variables_17.js +1 -1
  286. package/SVF-doxygen/html/search/variables_18.js +17 -17
  287. package/SVF-doxygen/html/search/variables_2.js +40 -40
  288. package/SVF-doxygen/html/search/variables_3.js +143 -143
  289. package/SVF-doxygen/html/search/variables_4.js +51 -51
  290. package/SVF-doxygen/html/search/variables_5.js +39 -39
  291. package/SVF-doxygen/html/search/variables_6.js +66 -66
  292. package/SVF-doxygen/html/search/variables_7.js +34 -34
  293. package/SVF-doxygen/html/search/variables_8.js +8 -8
  294. package/SVF-doxygen/html/search/variables_9.js +79 -79
  295. package/SVF-doxygen/html/search/variables_a.js +4 -4
  296. package/SVF-doxygen/html/search/variables_b.js +10 -10
  297. package/SVF-doxygen/html/search/variables_c.js +45 -45
  298. package/SVF-doxygen/html/search/variables_d.js +57 -57
  299. package/SVF-doxygen/html/search/variables_e.js +123 -123
  300. package/SVF-doxygen/html/search/variables_f.js +31 -31
  301. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +120 -120
  302. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  303. package/SVF-doxygen/html/svf-ex_8cpp.html +14 -14
  304. package/SVF-doxygen/html/svf-ex_8cpp_source.html +14 -14
  305. package/package.json +1 -1
  306. package/svf/include/SVFIR/SVFIR.h +2 -1
  307. package/svf/include/SVFIR/SVFStatements.h +45 -3
  308. package/svf/lib/AE/Svfexe/SVFIR2ItvExeState.cpp +8 -0
  309. package/svf/lib/Graphs/ConsG.cpp +2 -1
  310. package/svf-llvm/lib/SVFIRBuilder.cpp +10 -14
  311. package/svf-llvm/lib/SymbolTableBuilder.cpp +2 -0
@@ -441,827 +441,823 @@ $(function() {
441
441
  <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div>
442
442
  <div class="line"><a name="l00398"></a><span class="lineno"> 398</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>
443
443
  <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div>
444
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; addGlobalBlackHoleAddrEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(int2Ptrce)), int2Ptrce);</div>
445
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div>
446
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</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>
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="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div>
449
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; processCE(opnd);</div>
450
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</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; setCurrentLocation(ptr2Intce, <span class="keyword">nullptr</span>);</div>
453
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ptr2Intce)), CopyStmt::PTRTOINT);</div>
454
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; setCurrentLocation(cval, cbb);</div>
455
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
456
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</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>
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="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div>
459
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
460
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
461
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
462
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
463
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; addBlackHoleAddrEdge(dst);</div>
464
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; setCurrentLocation(cval, cbb);</div>
465
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div>
466
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</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>
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="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div>
469
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
470
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
471
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
472
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
473
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; addBlackHoleAddrEdge(dst);</div>
474
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; setCurrentLocation(cval, cbb);</div>
475
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div>
476
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</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>
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="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div>
479
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
480
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
481
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
482
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
483
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; addBlackHoleAddrEdge(dst);</div>
484
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; setCurrentLocation(cval, cbb);</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="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div>
487
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div>
488
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// we don&#39;t handle constant aggregate like constant vectors</span></div>
489
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div>
490
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div>
491
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; {</div>
492
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
493
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</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>
494
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
495
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
496
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
497
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
498
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), dst);</div>
499
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; setCurrentLocation(cval, cbb);</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; <span class="keywordflow">else</span></div>
502
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; {</div>
503
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div>
504
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</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>
505
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
506
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
507
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;}</div>
508
- <div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd"> 469</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>
509
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;{</div>
510
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; </div>
511
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
512
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</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>
513
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div>
514
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> getValueNode(gvar);</div>
515
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
516
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">else</span></div>
444
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = int2Ptrce-&gt;getOperand(0);</div>
445
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; processCE(opnd);</div>
446
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
447
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
448
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; setCurrentLocation(int2Ptrce, <span class="keyword">nullptr</span>);</div>
449
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(int2Ptrce)), CopyStmt::INTTOPTR);</div>
450
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; setCurrentLocation(cval, cbb);</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="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>
453
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
454
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div>
455
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; processCE(opnd);</div>
456
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
457
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
458
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; setCurrentLocation(ptr2Intce, <span class="keyword">nullptr</span>);</div>
459
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ptr2Intce)), CopyStmt::PTRTOINT);</div>
460
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; setCurrentLocation(cval, cbb);</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="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>
463
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div>
464
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div>
465
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
466
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
467
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
468
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
469
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; addBlackHoleAddrEdge(dst);</div>
470
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; setCurrentLocation(cval, cbb);</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="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">isBinaryConstantExpr</a>(ref))</div>
473
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div>
474
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div>
475
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
476
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
477
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
478
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
479
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; addBlackHoleAddrEdge(dst);</div>
480
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; setCurrentLocation(cval, cbb);</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> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">isUnaryConstantExpr</a>(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">// we don&#39;t handle unary constant expression like fneg(x) now</span></div>
485
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</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_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
487
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
488
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
489
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; addBlackHoleAddrEdge(dst);</div>
490
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; setCurrentLocation(cval, cbb);</div>
491
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
492
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div>
493
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div>
494
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// we don&#39;t handle constant aggregate like constant vectors</span></div>
495
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
496
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</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; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
499
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</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>
500
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
501
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
502
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
503
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
504
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), dst);</div>
505
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; setCurrentLocation(cval, cbb);</div>
506
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
507
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span></div>
508
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div>
509
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div>
510
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</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>
511
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div>
512
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div>
513
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;}</div>
514
+ <div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd"> 475</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>
515
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;{</div>
516
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; </div>
517
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
518
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</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>
517
519
  <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div>
518
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</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>
520
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">return</span> getValueNode(gvar);</div>
519
521
  <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
520
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;}</div>
521
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; </div>
522
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment">/*For global variable initialization</span></div>
523
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"> * Give a simple global variable</span></div>
524
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> * int x = 10; // store 10 x (constant, non pointer) |</span></div>
525
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"> * int *y = &amp;x; // store x y (pointer type)</span></div>
526
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> * Given a struct</span></div>
527
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment"> * struct Z { int s; int *t;};</span></div>
528
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment"> * Global initialization:</span></div>
529
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"> * struct Z z = {10,&amp;x}; // store x z.t (struct type)</span></div>
530
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment"> * struct Z *m = &amp;z; // store z m (pointer type)</span></div>
531
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</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>
532
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment"> */</span></div>
533
- <div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250"> 496</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>
534
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>)</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; <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>
537
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div>
538
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div>
539
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(C);</div>
540
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
541
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
542
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</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>
543
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; </div>
544
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable, Function&gt;(C))</div>
545
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
546
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
547
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; addStoreEdge(src, field);</div>
548
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div>
549
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div>
550
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div>
551
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</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; addStoreEdge(src, field);</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> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</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="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
559
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</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>
560
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; processCE(C);</div>
561
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
562
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), src);</div>
563
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
564
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">else</span></div>
565
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; {</div>
566
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
567
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; addStoreEdge(src, field);</div>
568
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != pag-&gt;getNullPtr())</div>
569
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; addCopyEdge(pag-&gt;getNullPtr(), src, CopyStmt::COPYVAL);</div>
570
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray, ConstantStruct&gt;(C))</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">if</span>(<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(gvar) &amp;&amp; !Options::VtableInSVFIR())</div>
575
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span>;</div>
576
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</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>
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; <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>
579
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</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>
580
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</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">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>
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; <span class="keywordflow">if</span>(Options::ModelConsts())</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; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(data))</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; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; seq-&gt;getNumElements(); i++)</div>
589
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div>
590
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</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>
591
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq-&gt;getElementAsConstant(i);</div>
592
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; InitialGlobal(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</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; 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>
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="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">else</span></div>
602
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div>
603
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">//TODO:assert(SVFUtil::isa&lt;ConstantVector&gt;(C),&quot;what else do we have&quot;);</span></div>
604
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; }</div>
605
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;}</div>
606
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
607
- <div class="line"><a name="l00574"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8"> 574</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGlobal(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div>
608
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;{</div>
522
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">else</span></div>
523
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div>
524
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</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>
525
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div>
526
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;}</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;<span class="comment">/*For global variable initialization</span></div>
529
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"> * Give a simple global variable</span></div>
530
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment"> * int x = 10; // store 10 x (constant, non pointer) |</span></div>
531
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment"> * int *y = &amp;x; // store x y (pointer type)</span></div>
532
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment"> * Given a struct</span></div>
533
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment"> * struct Z { int s; int *t;};</span></div>
534
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="comment"> * Global initialization:</span></div>
535
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="comment"> * struct Z z = {10,&amp;x}; // store x z.t (struct type)</span></div>
536
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="comment"> * struct Z *m = &amp;z; // store z m (pointer type)</span></div>
537
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</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>
538
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="comment"> */</span></div>
539
+ <div class="line"><a name="l00502"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250"> 502</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>
540
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>)</div>
541
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;{</div>
542
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</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>
543
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(C);</div>
546
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
547
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
548
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</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>
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">if</span> (SVFUtil::isa&lt;GlobalVariable, Function&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; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
553
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; addStoreEdge(src, field);</div>
554
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div>
555
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div>
556
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; {</div>
557
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div>
558
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; processCE(C);</div>
559
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
560
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; addStoreEdge(src, field);</div>
561
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div>
562
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div>
563
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div>
564
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
565
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</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>
566
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; processCE(C);</div>
567
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
568
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), src);</div>
569
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div>
570
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">else</span></div>
571
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div>
572
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
573
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; addStoreEdge(src, field);</div>
574
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != pag-&gt;getNullPtr())</div>
575
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; addCopyEdge(pag-&gt;getNullPtr(), src, CopyStmt::COPYVAL);</div>
576
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</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">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray, ConstantStruct&gt;(C))</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_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(gvar) &amp;&amp; !Options::VtableInSVFIR())</div>
581
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">return</span>;</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, e = C-&gt;getNumOperands(); i != e; 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; InitialGlobal(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</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; }</div>
588
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</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>
589
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div>
590
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">if</span>(Options::ModelConsts())</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; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(data))</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; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; seq-&gt;getNumElements(); i++)</div>
595
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div>
596
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</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>
597
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq-&gt;getElementAsConstant(i);</div>
598
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; InitialGlobal(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</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="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">else</span></div>
602
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div>
603
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</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>
604
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; }</div>
605
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; }</div>
606
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
607
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">else</span></div>
608
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div>
609
+ <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="comment">//TODO:assert(SVFUtil::isa&lt;ConstantVector&gt;(C),&quot;what else do we have&quot;);</span></div>
610
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div>
611
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;}</div>
609
612
  <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; </div>
610
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMModules())</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; <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</div>
613
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div>
614
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &amp;*I;</div>
615
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(gvar);</div>
616
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(gvar);</div>
617
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
618
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
619
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; addAddrEdge(obj, idx);</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; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</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; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div>
624
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</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>
625
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; InitialGlobal(gvar, C, 0);</div>
626
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
627
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
628
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
629
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; </div>
630
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &amp;*I;</div>
633
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(fun);</div>
634
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(fun);</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; <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>
637
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; setCurrentLocation(fun, <span class="keyword">nullptr</span>);</div>
638
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; addAddrEdge(obj, idx);</div>
639
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div>
640
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; </div>
641
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</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>
642
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &amp;*I;</div>
645
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias));</div>
646
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias-&gt;getAliasee()));</div>
647
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; processCE(alias-&gt;getAliasee());</div>
648
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; setCurrentLocation(alias, <span class="keyword">nullptr</span>);</div>
649
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; addCopyEdge(src, dst, CopyStmt::COPYVAL);</div>
650
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div>
651
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; }</div>
652
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;}</div>
653
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; </div>
654
- <div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4be150eb37b75e4c081dfe38429f2089"> 627</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitAllocaInst(<a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> &amp;inst)</div>
655
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;{</div>
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; <span class="comment">// AllocaInst should always be a pointer type</span></div>
658
- <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
659
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; </div>
660
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</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>
661
- <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
613
+ <div class="line"><a name="l00580"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8"> 580</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGlobal(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div>
614
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;{</div>
615
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
616
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMModules())</div>
617
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; {</div>
618
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</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; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &amp;*I;</div>
621
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(gvar);</div>
622
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(gvar);</div>
623
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; </div>
624
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
625
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; addAddrEdge(obj, idx);</div>
626
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; </div>
627
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div>
628
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div>
629
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div>
630
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</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>
631
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; InitialGlobal(gvar, C, 0);</div>
632
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div>
633
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; }</div>
634
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; </div>
635
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
636
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.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#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &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> idx = getValueNode(fun);</div>
640
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(fun);</div>
641
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; </div>
642
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</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>
643
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; setCurrentLocation(fun, <span class="keyword">nullptr</span>);</div>
644
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; addAddrEdge(obj, idx);</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; <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>
648
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</div>
649
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; {</div>
650
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &amp;*I;</div>
651
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias));</div>
652
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias-&gt;getAliasee()));</div>
653
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; processCE(alias-&gt;getAliasee());</div>
654
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; setCurrentLocation(alias, <span class="keyword">nullptr</span>);</div>
655
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; addCopyEdge(src, dst, CopyStmt::COPYVAL);</div>
656
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div>
657
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; }</div>
658
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;}</div>
659
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; </div>
660
+ <div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4be150eb37b75e4c081dfe38429f2089"> 633</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitAllocaInst(<a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> &amp;inst)</div>
661
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;{</div>
662
662
  <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; </div>
663
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getObjectNode(&amp;inst);</div>
664
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; </div>
665
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; addAddrWithStackArraySz(src, dst, inst);</div>
666
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
667
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;}</div>
663
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div>
664
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
665
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; </div>
666
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</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>
667
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
668
668
  <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; </div>
669
- <div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aade60fa102a29f332af36a8615c75471"> 645</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitPHINode(<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> &amp;inst)</div>
670
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;{</div>
669
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getObjectNode(&amp;inst);</div>
670
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
671
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; addAddrWithStackArraySz(src, dst, inst);</div>
672
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
673
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;}</div>
671
674
  <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; <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>
673
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; </div>
674
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
675
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; </div>
676
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</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>
677
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</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#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
679
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</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>
680
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
681
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; incomingInst-&gt;getFunction() == inst.getFunction());</div>
682
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
683
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;incomingInst&#39;s Function incorrect&quot;</span>);</div>
684
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &amp;inst.getIncomingBlock(i)-&gt;back();</div>
685
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(predInst);</div>
686
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</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>
687
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(val);</div>
688
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; addPhiStmt(dst,src,icfgNode);</div>
689
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</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; </div>
692
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;<span class="comment">/*</span></div>
693
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;<span class="comment"> * Visit load instructions</span></div>
694
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="comment"> */</span></div>
695
- <div class="line"><a name="l00671"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a17638b08f85d4543e663eeb739915bdc"> 671</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitLoadInst(<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> &amp;inst)</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; <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>
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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
700
- <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; </div>
701
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
702
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; </div>
703
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; addLoadEdge(src, dst);</div>
704
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;}</div>
705
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; </div>
706
- <div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a51d75ff7f490ddfef3d4f8779872633c"> 685</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitStoreInst(<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> &amp;inst)</div>
707
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;{</div>
708
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
709
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
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; <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>
712
- <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
713
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(inst.getPointerOperand());</div>
714
- <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
715
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getValueOperand());</div>
675
+ <div class="line"><a name="l00651"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aade60fa102a29f332af36a8615c75471"> 651</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitPHINode(<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> &amp;inst)</div>
676
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;{</div>
677
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
678
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</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>
679
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
680
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</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; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
685
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</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>
686
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
687
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; incomingInst-&gt;getFunction() == inst.getFunction());</div>
688
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
689
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;incomingInst&#39;s Function incorrect&quot;</span>);</div>
690
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &amp;inst.getIncomingBlock(i)-&gt;back();</div>
691
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(predInst);</div>
692
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</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>
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(val);</div>
694
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; addPhiStmt(dst,src,icfgNode);</div>
695
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</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="l00674"></a><span class="lineno"> 674</span>&#160;<span class="comment">/*</span></div>
699
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;<span class="comment"> * Visit load instructions</span></div>
700
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;<span class="comment"> */</span></div>
701
+ <div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a17638b08f85d4543e663eeb739915bdc"> 677</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitLoadInst(<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> &amp;inst)</div>
702
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div>
703
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</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>
704
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
705
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
706
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
707
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
708
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; </div>
709
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; addLoadEdge(src, dst);</div>
710
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;}</div>
711
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; </div>
712
+ <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a51d75ff7f490ddfef3d4f8779872633c"> 691</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitStoreInst(<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> &amp;inst)</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; <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
715
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
716
716
  <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
717
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; addStoreEdge(src, dst);</div>
717
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</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>
718
718
  <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
719
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;}</div>
719
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(inst.getPointerOperand());</div>
720
720
  <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
721
- <div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4a945eafd262f81b4f9cc1fa61b57371"> 703</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGetElementPtrInst(<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> &amp;inst)</div>
722
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;{</div>
721
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getValueOperand());</div>
722
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; </div>
723
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; addStoreEdge(src, dst);</div>
724
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; </div>
725
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;}</div>
723
726
  <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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
725
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
726
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div>
727
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div>
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; addBlackHoleAddrEdge(dst);</div>
730
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">return</span>;</div>
731
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; }</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; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</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; <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>
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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
727
+ <div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4a945eafd262f81b4f9cc1fa61b57371"> 709</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGetElementPtrInst(<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> &amp;inst)</div>
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; </div>
730
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
731
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
732
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div>
733
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</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; addBlackHoleAddrEdge(dst);</div>
736
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span>;</div>
737
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; }</div>
738
738
  <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; </div>
739
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(inst.getSourceElementType()));</div>
740
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(&amp;inst, ap);</div>
741
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; addGepEdge(src, dst, ap, constGep);</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;<span class="comment">/*</span></div>
745
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;<span class="comment"> * Visit cast instructions</span></div>
746
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="comment"> */</span></div>
747
- <div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#acf5a61d45c1abc1206f6e6c813f8634b"> 729</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCastInst(<a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> &amp;inst)</div>
748
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;{</div>
739
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</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; <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>
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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</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; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(inst.getSourceElementType()));</div>
746
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(&amp;inst, ap);</div>
747
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; addGepEdge(src, dst, ap, constGep);</div>
748
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;}</div>
749
749
  <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; </div>
750
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</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>
751
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</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="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</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; addBlackHoleAddrEdge(dst);</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; <span class="keywordflow">else</span></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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
760
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div>
761
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(opnd);</div>
762
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; </div>
763
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
764
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; addCopyEdge(src, dst, getCopyKind(&amp;inst));</div>
765
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; }</div>
766
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;}</div>
767
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; </div>
768
- <div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aeb5f3cc92ef2d146c7c9cc86375b4c1e"> 753</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBinaryOperator(<a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a> &amp;inst)</div>
769
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;{</div>
770
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
771
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div>
772
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
773
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
774
- <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
775
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
776
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
777
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; addBinaryOPEdge(op1Node, op2Node, dst, opcode);</div>
778
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;}</div>
779
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; </div>
780
- <div class="line"><a name="l00768"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae80891bb2a162b3ad24fa7cf6380df30"> 768</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitUnaryOperator(<a class="code" href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">UnaryOperator</a> &amp;inst)</div>
781
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;{</div>
782
- <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
783
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; assert(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div>
784
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
785
- <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
786
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
787
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; addUnaryOPEdge(src, dst, opcode);</div>
788
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;}</div>
789
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; </div>
790
- <div class="line"><a name="l00781"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac61e0c5f667ebeb4788d07253e6a733c"> 781</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCmpInst(<a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> &amp;inst)</div>
791
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;{</div>
792
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
793
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div>
794
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
795
- <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
796
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
797
- <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
798
- <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
799
- <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; addCmpEdge(op1Node, op2Node, dst, predicate);</div>
800
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;}</div>
801
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; </div>
802
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; </div>
803
- <div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc836736ea16d99921c0e734cf0a3c72"> 797</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSelectInst(<a class="code" href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SelectInst</a> &amp;inst)</div>
804
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;{</div>
805
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; </div>
806
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</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>
807
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; </div>
808
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
809
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = getValueNode(inst.getTrueValue());</div>
810
- <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = getValueNode(inst.getFalseValue());</div>
811
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
812
- <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; addSelectStmt(dst,src1,src2, cond);</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; </div>
815
- <div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a421708269d991987d8d4e93cec750a8d"> 810</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallInst(<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> &amp;i)</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"> 812</span>&#160; visitCallSite(&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; </div>
820
- <div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a39577da11f4b85066988f105e3c18d7c"> 815</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitInvokeInst(<a class="code" href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">InvokeInst</a> &amp;i)</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; visitCallSite(&amp;i);</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; </div>
825
- <div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a62da871a2bace42fa96baf8b9862d4db"> 820</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallBrInst(<a class="code" href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">CallBrInst</a> &amp;i)</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; visitCallSite(&amp;i);</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">/*</span></div>
831
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="comment"> * Visit callsites</span></div>
832
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="comment"> */</span></div>
833
- <div class="line"><a name="l00828"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c"> 828</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallSite(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
834
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;{</div>
750
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;<span class="comment">/*</span></div>
751
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;<span class="comment"> * Visit cast instructions</span></div>
752
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<span class="comment"> */</span></div>
753
+ <div class="line"><a name="l00735"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#acf5a61d45c1abc1206f6e6c813f8634b"> 735</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCastInst(<a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> &amp;inst)</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; </div>
756
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</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>
757
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
760
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
761
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; addCopyEdge(src, dst, getCopyKind(&amp;inst));</div>
762
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;}</div>
763
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; </div>
764
+ <div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aeb5f3cc92ef2d146c7c9cc86375b4c1e"> 749</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBinaryOperator(<a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a> &amp;inst)</div>
765
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;{</div>
766
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
767
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div>
768
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
769
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
770
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
771
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
772
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
773
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; addBinaryOPEdge(op1Node, op2Node, dst, opcode);</div>
774
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;}</div>
775
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; </div>
776
+ <div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae80891bb2a162b3ad24fa7cf6380df30"> 764</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitUnaryOperator(<a class="code" href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">UnaryOperator</a> &amp;inst)</div>
777
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;{</div>
778
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
779
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; assert(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div>
780
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
781
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
782
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
783
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; addUnaryOPEdge(src, dst, opcode);</div>
784
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;}</div>
785
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; </div>
786
+ <div class="line"><a name="l00777"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac61e0c5f667ebeb4788d07253e6a733c"> 777</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCmpInst(<a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> &amp;inst)</div>
787
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;{</div>
788
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
789
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div>
790
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
791
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
792
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
793
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
794
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
795
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; addCmpEdge(op1Node, op2Node, dst, predicate);</div>
796
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;}</div>
797
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; </div>
798
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; </div>
799
+ <div class="line"><a name="l00793"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc836736ea16d99921c0e734cf0a3c72"> 793</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSelectInst(<a class="code" href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SelectInst</a> &amp;inst)</div>
800
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;{</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="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>
803
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; </div>
804
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
805
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = getValueNode(inst.getTrueValue());</div>
806
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = getValueNode(inst.getFalseValue());</div>
807
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
808
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; addSelectStmt(dst,src1,src2, cond);</div>
809
+ <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;}</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"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a421708269d991987d8d4e93cec750a8d"> 806</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallInst(<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> &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; visitCallSite(&amp;i);</div>
814
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;}</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"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a39577da11f4b85066988f105e3c18d7c"> 811</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitInvokeInst(<a class="code" href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">InvokeInst</a> &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; visitCallSite(&amp;i);</div>
819
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;}</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"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a62da871a2bace42fa96baf8b9862d4db"> 816</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallBrInst(<a class="code" href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">CallBrInst</a> &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; visitCallSite(&amp;i);</div>
824
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;}</div>
825
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; </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"> 822</span>&#160;<span class="comment"> * Visit callsites</span></div>
828
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="comment"> */</span></div>
829
+ <div class="line"><a name="l00824"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c"> 824</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallSite(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
830
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;{</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="comment">// skip llvm intrinsics</span></div>
833
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
834
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">return</span>;</div>
835
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; <span class="comment">// skip llvm intrinsics</span></div>
837
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
838
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordflow">return</span>;</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
841
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div>
842
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
843
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</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>
844
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; </div>
845
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
846
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfcall);</div>
847
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; </div>
848
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
836
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
837
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; </div>
838
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
839
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</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>
840
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; </div>
841
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
842
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfcall);</div>
843
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; </div>
844
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
845
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; </div>
846
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</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>
847
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(getValueNode(cs-&gt;getArgOperand(i))));</div>
849
848
  <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; </div>
850
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</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>
851
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(getValueNode(cs-&gt;getArgOperand(i))));</div>
852
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; </div>
853
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">if</span>(!cs-&gt;getType()-&gt;isVoidTy())</div>
854
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(getValueNode(cs)));</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">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>
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; callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a21636200f17c62034720c4287aa818b5">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
859
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
860
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
849
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">if</span>(!cs-&gt;getType()-&gt;isVoidTy())</div>
850
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(getValueNode(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; <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>
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; callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a21636200f17c62034720c4287aa818b5">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
855
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
856
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(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; handleExtCall(cs, svfcallee);</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; <span class="keywordflow">else</span></div>
861
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; handleExtCall(cs, svfcallee);</div>
862
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; handleDirectCall(cs, callee);</div>
863
863
  <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div>
864
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">else</span></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; handleDirectCall(cs, callee);</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; <span class="keywordflow">else</span></div>
870
- <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div>
871
- <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
872
- <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; handleIndCall(cs);</div>
873
- <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
874
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;}</div>
875
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; </div>
876
- <div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 875</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &amp;inst)</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; </div>
879
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
880
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</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="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>
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="keywordflow">else</span></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; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
868
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; handleIndCall(cs);</div>
869
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div>
870
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;}</div>
871
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; </div>
872
+ <div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 871</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &amp;inst)</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; </div>
875
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
876
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</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; <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>
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="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</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; <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>
883
883
  <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; </div>
884
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
885
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; {</div>
886
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</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>
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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
889
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
890
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</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>
891
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</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>
892
- <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
893
- <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</div>
894
- <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; }</div>
895
- <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;}</div>
896
- <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; </div>
897
- <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; </div>
898
- <div class="line"><a name="l00905"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 905</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &amp;inst)</div>
899
- <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;{</div>
900
- <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
901
- <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; addBlackHoleAddrEdge(dst);</div>
902
- <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;}</div>
903
- <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; </div>
904
- <div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 919</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &amp;inst)</div>
905
- <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;{</div>
906
- <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
907
- <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; addBlackHoleAddrEdge(dst);</div>
908
- <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;}</div>
909
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; </div>
910
- <div class="line"><a name="l00929"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 929</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &amp;inst)</div>
911
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;{</div>
912
- <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
913
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
914
- <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div>
915
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; cond = getValueNode(inst.getCondition());</div>
916
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">else</span></div>
917
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; cond = pag-&gt;getNullPtr();</div>
918
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; </div>
919
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; assert(inst.getNumSuccessors() &lt;= 2 &amp;&amp; <span class="stringliteral">&quot;if/else has more than two branches?&quot;</span>);</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; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
922
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</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>
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"> 943</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
925
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
926
- <div class="line"><a name="l00945"></a><span class="lineno"> 945</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>
927
- <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; successors.push_back(std::make_pair(icfgNode, 1-i));</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; addBranchStmt(brinst, cond,successors);</div>
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; </div>
932
- <div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 951</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &amp;inst)</div>
933
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;{</div>
934
- <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
935
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
936
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; </div>
937
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
938
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; </div>
939
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="comment">// get case successor basic block and related case value</span></div>
940
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
941
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
942
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
943
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; {</div>
944
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</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>
945
- <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
946
- <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
947
- <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
948
- <div class="line"><a name="l00967"></a><span class="lineno"> 967</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>
949
- <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</div>
950
- <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; }</div>
951
- <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; addBranchStmt(brinst, cond, successors);</div>
952
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;}</div>
953
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; </div>
954
- <div class="line"><a name="l00978"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 978</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
955
- <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;{</div>
956
- <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
957
- <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
958
- <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
959
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; addCopyEdge(src, dst, CopyStmt::COPYVAL);</div>
960
- <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;}</div>
961
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; </div>
962
- <div class="line"><a name="l00990"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 990</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
965
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</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>
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; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
968
- <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
969
- <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; addCopyEdge(src, dst, CopyStmt::COPYVAL);</div>
970
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div>
971
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;}</div>
972
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; </div>
973
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; </div>
974
- <div class="line"><a name="l01005"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 1005</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>
975
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;{</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; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
978
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
979
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</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>
980
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
981
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</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>
982
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; </div>
983
- <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
984
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
985
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
986
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
987
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; {</div>
988
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
989
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
990
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
991
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
992
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; }</div>
993
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
994
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
995
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</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>
996
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="comment">//Go through the fixed parameters.</span></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; args:&quot;</span>);</div>
998
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</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="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
1001
- <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
1002
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; {</div>
1003
- <div class="line"><a name="l01034"></a><span class="lineno"> 1034</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>
1004
- <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">break</span>;</div>
1005
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; }</div>
1006
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</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>
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; <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>
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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1011
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1012
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1013
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1014
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1015
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; }</div>
1016
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1017
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1018
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; {</div>
1019
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1020
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</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>
1021
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1024
- <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1025
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1026
- <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1027
- <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1028
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div>
1029
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; }</div>
1030
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1031
- <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; {</div>
1032
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</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>
1033
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</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>
1034
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; </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;}</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"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1071</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>
1039
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;{</div>
1040
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</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>
1041
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1042
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</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>
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; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1045
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</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>
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; <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>
1048
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1049
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div>
1050
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1051
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; value = gep-&gt;getPointerOperand();</div>
1052
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; }</div>
1053
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">return</span> value;</div>
1054
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;}</div>
1055
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; </div>
1056
- <div class="line"><a name="l01092"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1092</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1057
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;{</div>
1058
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1059
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</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>
884
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
885
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
886
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</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>
887
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</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>
888
+ <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
889
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</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="l00891"></a><span class="lineno"> 891</span>&#160; </div>
893
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; </div>
894
+ <div class="line"><a name="l00901"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 901</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &amp;inst)</div>
895
+ <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;{</div>
896
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
897
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; addBlackHoleAddrEdge(dst);</div>
898
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;}</div>
899
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; </div>
900
+ <div class="line"><a name="l00915"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 915</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &amp;inst)</div>
901
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;{</div>
902
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
903
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; addBlackHoleAddrEdge(dst);</div>
904
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;}</div>
905
+ <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; </div>
906
+ <div class="line"><a name="l00925"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 925</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &amp;inst)</div>
907
+ <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;{</div>
908
+ <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
909
+ <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
910
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div>
911
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; cond = getValueNode(inst.getCondition());</div>
912
+ <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">else</span></div>
913
+ <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; cond = pag-&gt;getNullPtr();</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; assert(inst.getNumSuccessors() &lt;= 2 &amp;&amp; <span class="stringliteral">&quot;if/else has more than two branches?&quot;</span>);</div>
916
+ <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; </div>
917
+ <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
918
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</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>
919
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
920
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
921
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
922
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</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>
923
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; successors.push_back(std::make_pair(icfgNode, 1-i));</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; addBranchStmt(brinst, cond,successors);</div>
926
+ <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;}</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"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 947</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &amp;inst)</div>
929
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;{</div>
930
+ <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
931
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</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; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
934
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; </div>
935
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">// get case successor basic block and related case value</span></div>
936
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
937
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
938
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
939
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; {</div>
940
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</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>
941
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
942
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
943
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
944
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</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>
945
+ <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</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; addBranchStmt(brinst, cond, successors);</div>
948
+ <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160;}</div>
949
+ <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; </div>
950
+ <div class="line"><a name="l00974"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 974</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
951
+ <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;{</div>
952
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
953
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
954
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
955
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; addCopyEdge(src, dst, CopyStmt::COPYVAL);</div>
956
+ <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;}</div>
957
+ <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; </div>
958
+ <div class="line"><a name="l00986"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 986</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
959
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;{</div>
960
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
961
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</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>
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; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
964
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
965
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; addCopyEdge(src, dst, CopyStmt::COPYVAL);</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="l00996"></a><span class="lineno"> 996</span>&#160; </div>
969
+ <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; </div>
970
+ <div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 1001</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>
971
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;{</div>
972
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; </div>
973
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; assert(<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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
975
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</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>
976
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
977
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</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>
978
+ <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; </div>
979
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
980
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
981
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
982
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
983
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; {</div>
984
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
985
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
986
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
987
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
988
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; }</div>
989
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
990
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
991
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</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>
992
+ <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
993
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</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>
994
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
995
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; {</div>
996
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
997
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
998
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; {</div>
999
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</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>
1000
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">break</span>;</div>
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; <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>
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="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>
1005
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; </div>
1006
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1007
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1008
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1009
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1010
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1011
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; }</div>
1012
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1013
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1016
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</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>
1017
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1018
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; {</div>
1019
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1020
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1021
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1022
+ <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1023
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1024
+ <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div>
1025
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; }</div>
1026
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1027
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div>
1028
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</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>
1029
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</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>
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"> 1065</span>&#160;}</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"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1067</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>
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; <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>
1037
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1038
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</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>
1039
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; {</div>
1040
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1041
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</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>
1042
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div>
1043
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</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>
1044
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; totalidx += op-&gt;getSExtValue();</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="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1047
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; value = gep-&gt;getPointerOperand();</div>
1048
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; }</div>
1049
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">return</span> value;</div>
1050
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;}</div>
1051
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; </div>
1052
+ <div class="line"><a name="l01088"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1088</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1053
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;{</div>
1054
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1055
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</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>
1056
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; </div>
1057
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</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>
1058
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1059
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;}</div>
1060
1060
  <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; </div>
1061
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</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>
1062
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1063
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;}</div>
1064
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; </div>
1065
- <div class="line"><a name="l01101"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1101</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1066
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;{</div>
1067
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1068
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1069
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1070
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; {</div>
1071
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1072
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</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>
1073
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</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>
1074
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</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>
1075
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1076
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; {</div>
1077
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</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>
1078
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; </div>
1079
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1080
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; {</div>
1081
- <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1082
- <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1083
- <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; handleExtCall(callbase, svfcallee);</div>
1084
- <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; }</div>
1085
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keywordflow">else</span></div>
1086
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; {</div>
1087
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</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>
1088
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</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>
1089
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; }</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; }</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"> 1129</span>&#160; <span class="comment">// dump SVFIR</span></div>
1094
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1095
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</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; </div>
1098
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">/*</span></div>
1099
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1100
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;<span class="comment"> */</span></div>
1101
- <div class="line"><a name="l01137"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1137</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1102
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;{</div>
1103
- <div class="line"><a name="l01139"></a><span class="lineno"> 1139</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>
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; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1106
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="comment">//TODO::</span></div>
1107
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1108
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1109
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1110
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1111
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1112
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1113
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1114
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1115
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1116
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1117
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1118
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></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="l01163"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1163</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>
1124
- <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;{</div>
1125
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = getValueNode(val);</div>
1126
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1127
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1128
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; {</div>
1129
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</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>
1130
- <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="comment">/*</span></div>
1131
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1132
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1133
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1134
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1135
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1136
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1137
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;<span class="comment"> */</span></div>
1138
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</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>
1139
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; </div>
1140
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1141
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1142
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1143
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1144
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1145
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1146
- <div class="line"><a name="l01186"></a><span class="lineno"> 1186</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,</div>
1147
- <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; NodeIDAllocator::get()-&gt;allocateValueId(),</div>
1148
- <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(PointerType::getUnqual(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>())));</div>
1149
- <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1150
- <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; setCurrentLocation(cval, cbb);</div>
1151
- <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <span class="keywordflow">return</span> gepNode;</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; <span class="keywordflow">else</span></div>
1154
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1155
- <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;}</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; </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"> * curVal &lt;--------&gt; PAGEdge</span></div>
1160
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1161
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1162
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1163
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1164
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1165
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1166
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1167
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1168
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1169
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1170
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment"> */</span></div>
1171
- <div class="line"><a name="l01211"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1211</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1172
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;{</div>
1173
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1174
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">return</span>;</div>
1175
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; </div>
1176
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1177
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</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>
1178
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1179
- <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1180
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1181
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1182
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</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>
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="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>
1185
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</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>
1186
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</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>
1061
+ <div class="line"><a name="l01097"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1097</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1062
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;{</div>
1063
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1064
+ <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1065
+ <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1066
+ <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; {</div>
1067
+ <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1068
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</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>
1069
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</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>
1070
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</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>
1071
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1072
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div>
1073
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</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>
1074
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; </div>
1075
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1076
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; {</div>
1077
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1078
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1079
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; handleExtCall(callbase, svfcallee);</div>
1080
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; }</div>
1081
+ <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="keywordflow">else</span></div>
1082
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; {</div>
1083
+ <div class="line"><a name="l01119"></a><span class="lineno"> 1119</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>
1084
+ <div class="line"><a name="l01120"></a><span class="lineno"> 1120</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>
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; }</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; </div>
1089
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="comment">// dump SVFIR</span></div>
1090
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1091
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</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"> 1129</span>&#160; </div>
1094
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;<span class="comment">/*</span></div>
1095
+ <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1096
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;<span class="comment"> */</span></div>
1097
+ <div class="line"><a name="l01133"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1133</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</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="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>
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; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1102
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="comment">//TODO::</span></div>
1103
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1104
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1105
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1106
+ <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1107
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1108
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1109
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1110
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1111
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1112
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1113
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1114
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1115
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; }</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; </div>
1118
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; </div>
1119
+ <div class="line"><a name="l01159"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1159</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>
1120
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;{</div>
1121
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = getValueNode(val);</div>
1122
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1123
+ <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1124
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; {</div>
1125
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</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>
1126
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="comment">/*</span></div>
1127
+ <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1128
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1129
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1130
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1131
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1132
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1133
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="comment"> */</span></div>
1134
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</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>
1135
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; </div>
1136
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1137
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1138
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1139
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1140
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1141
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1142
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</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,</div>
1143
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; NodeIDAllocator::get()-&gt;allocateValueId(),</div>
1144
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(PointerType::getUnqual(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>())));</div>
1145
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1146
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; setCurrentLocation(cval, cbb);</div>
1147
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1148
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; }</div>
1149
+ <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="keywordflow">else</span></div>
1150
+ <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1151
+ <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;}</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; </div>
1154
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="comment">/*</span></div>
1155
+ <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1156
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1157
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1158
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1159
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1160
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1161
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1162
+ <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1163
+ <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1164
+ <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1165
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1166
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> */</span></div>
1167
+ <div class="line"><a name="l01207"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1207</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1168
+ <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;{</div>
1169
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1170
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">return</span>;</div>
1171
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; </div>
1172
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1173
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</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>
1174
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1175
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1176
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1177
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1178
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</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>
1179
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; {</div>
1180
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</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>
1181
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</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>
1182
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</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>
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; assert(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</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="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>
1187
1187
  <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; {</div>
1188
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</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>
1188
+ <div class="line"><a name="l01228"></a><span class="lineno"> 1228</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>
1189
1189
  <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; }</div>
1190
- <div class="line"><a name="l01230"></a><span class="lineno"> 1230</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>
1191
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; {</div>
1192
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</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>
1193
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; }</div>
1190
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; </div>
1191
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</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>
1192
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1194
1193
  <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; </div>
1195
- <div class="line"><a name="l01236"></a><span class="lineno"> 1236</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>
1196
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1197
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; </div>
1198
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1194
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1195
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; {</div>
1196
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1197
+ <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; }</div>
1198
+ <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">else</span></div>
1199
1199
  <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; {</div>
1200
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1201
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; }</div>
1202
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">else</span></div>
1203
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; {</div>
1204
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1205
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1206
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordflow">else</span></div>
1207
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1208
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; }</div>
1209
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; }</div>
1210
- <div class="line"><a name="l01252"></a><span class="lineno"> 1252</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>
1211
- <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; {</div>
1212
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1213
- <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1214
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; }</div>
1215
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1216
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1217
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1218
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; {</div>
1219
- <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1220
- <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1221
- <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keywordflow">else</span></div>
1222
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; {</div>
1223
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1224
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; }</div>
1200
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1201
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1202
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">else</span></div>
1203
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1204
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; }</div>
1205
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; }</div>
1206
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</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>
1207
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; {</div>
1208
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1209
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1210
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; }</div>
1211
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1212
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1213
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1214
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; {</div>
1215
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1216
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1217
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="keywordflow">else</span></div>
1218
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; {</div>
1219
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1220
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; }</div>
1221
+ <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; }</div>
1222
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">else</span></div>
1223
+ <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; {</div>
1224
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1225
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; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</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; </div>
1231
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1232
- <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1233
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</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>
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; <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>
1236
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</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>
1237
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</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>
1238
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</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; <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>
1241
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; {</div>
1242
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</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>
1243
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</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>
1244
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</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>
1245
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</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;}</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; </div>
1250
- <div class="line"><a name="l01298"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1298</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>
1251
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;{</div>
1252
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1253
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</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>
1254
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1255
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1256
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; </div>
1257
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</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>
1258
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1259
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</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>
1260
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1261
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1262
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keywordflow">else</span></div>
1263
- <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1264
- <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;}</div>
1226
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; </div>
1227
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1228
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1229
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</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>
1230
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; {</div>
1231
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</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>
1232
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</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>
1233
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</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>
1234
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</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_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(edge))</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; <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>
1239
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</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>
1240
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</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>
1241
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</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;}</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; </div>
1246
+ <div class="line"><a name="l01294"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1294</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>
1247
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;{</div>
1248
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1249
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</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>
1250
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1251
+ <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1252
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; </div>
1253
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</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>
1254
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1255
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</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>
1256
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1257
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1258
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">else</span></div>
1259
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1260
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;}</div>
1265
1261
  </div><!-- fragment --></div><!-- contents -->
1266
1262
  <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="GeneralType_8h_source.html#l00060">GeneralType.h:60</a></div></div>
1267
1263
  <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#l00278">LLVMUtil.cpp:278</a></div></div>
@@ -1271,7 +1267,7 @@ $(function() {
1271
1267
  <div class="ttc" id="aclassSVF_1_1CHGBuilder_html_aa5c672ac426ad4085d64d97f8cb14ace"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#aa5c672ac426ad4085d64d97f8cb14ace">SVF::CHGBuilder::buildCHG</a></div><div class="ttdeci">void buildCHG()</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00061">CHGBuilder.cpp:61</a></div></div>
1272
1268
  <div class="ttc" id="anamespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
1273
1269
  <div class="ttc" id="aclassSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00044">ICFGEdge.h:44</a></div></div>
1274
- <div class="ttc" id="aclassSVF_1_1GepStmt_html_a0ddf180a0f7ba64fc8655687910e3788"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">SVF::GepStmt::isVariantFieldGep</a></div><div class="ttdeci">bool isVariantFieldGep() const</div><div class="ttdoc">Gep statement with a variant field index (pointer arithmetic) for struct field access.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00549">SVFStatements.h:549</a></div></div>
1270
+ <div class="ttc" id="aclassSVF_1_1GepStmt_html_a0ddf180a0f7ba64fc8655687910e3788"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">SVF::GepStmt::isVariantFieldGep</a></div><div class="ttdeci">bool isVariantFieldGep() const</div><div class="ttdoc">Gep statement with a variant field index (pointer arithmetic) for struct field access.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00591">SVFStatements.h:591</a></div></div>
1275
1271
  <div class="ttc" id="anamespaceSVF_html_a292a6e8c5b4f2023b5575879c57eca62"><div class="ttname"><a href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">SVF::UnaryOperator</a></div><div class="ttdeci">llvm::UnaryOperator UnaryOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00180">BasicTypes.h:180</a></div></div>
1276
1272
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a35b36394af726c679fe2c1b6051db7c4"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">SVF::LLVMUtil::isBinaryConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isBinaryConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00259">LLVMUtil.h:259</a></div></div>
1277
1273
  <div class="ttc" id="aclassSVF_1_1FunEntryICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunEntryICFGNode.html">SVF::FunEntryICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00261">ICFGNode.h:261</a></div></div>
@@ -1299,7 +1295,7 @@ $(function() {
1299
1295
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00852">LLVMUtil.cpp:852</a></div></div>
1300
1296
  <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
1301
1297
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_a2358a8194b5e2c4bcbb5218dee7fcbcd"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">SVF::AccessPath::addOffsetVarAndGepTypePair</a></div><div class="ttdeci">bool addOffsetVarAndGepTypePair(const SVFVar *var, const SVFType *gepIterType)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00042">AccessPath.cpp:42</a></div></div>
1302
- <div class="ttc" id="aclassSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00628">SVFStatements.h:628</a></div></div>
1298
+ <div class="ttc" id="aclassSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00670">SVFStatements.h:670</a></div></div>
1303
1299
  <div class="ttc" id="aSVFType_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00490">SVFType.h:490</a></div></div>
1304
1300
  <div class="ttc" id="aSVFFileSystem_8h_html"><div class="ttname"><a href="SVFFileSystem_8h.html">SVFFileSystem.h</a></div></div>
1305
1301
  <div class="ttc" id="anamespacellvm_html_acfe99e9d441434240c79f6d76b73fe0a"><div class="ttname"><a href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">llvm::bridge_gep_begin</a></div><div class="ttdeci">bridge_gep_iterator bridge_gep_begin(const User *GEP)</div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00149">GEPTypeBridgeIterator.h:149</a></div></div>
@@ -1314,8 +1310,8 @@ $(function() {
1314
1310
  <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>
1315
1311
  <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#l00083">BasicTypes.h:83</a></div></div>
1316
1312
  <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#l00161">BasicTypes.h:161</a></div></div>
1317
- <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#l00568">SVFStatements.h:568</a></div></div>
1318
- <div class="ttc" id="aclassSVF_1_1BranchStmt_html_a6a0e64824777f04be4c169125dd4f666"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SVF::BranchStmt::SuccAndCondPairVec</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; const ICFGNode *, s32_t &gt; &gt; SuccAndCondPairVec</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01123">SVFStatements.h:1123</a></div></div>
1313
+ <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#l00610">SVFStatements.h:610</a></div></div>
1314
+ <div class="ttc" id="aclassSVF_1_1BranchStmt_html_a6a0e64824777f04be4c169125dd4f666"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">SVF::BranchStmt::SuccAndCondPairVec</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; const ICFGNode *, s32_t &gt; &gt; SuccAndCondPairVec</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01165">SVFStatements.h:1165</a></div></div>
1319
1315
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_adaed6e68c2f53260ed4c4fc38b5c4721"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#adaed6e68c2f53260ed4c4fc38b5c4721">SVF::SymbolTableInfo::nullPtrSymID</a></div><div class="ttdeci">SymID nullPtrSymID() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00188">SymbolTableInfo.h:188</a></div></div>
1320
1316
  <div class="ttc" id="anamespaceSVF_html_a9868a60a9cc7b78965a23b5034100f88"><div class="ttname"><a href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">SVF::FreezeInst</a></div><div class="ttdeci">llvm::FreezeInst FreezeInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00169">BasicTypes.h:169</a></div></div>
1321
1317
  <div class="ttc" id="anamespaceSVF_html_a5a6e8ab900d5cd17ef72661006a7fbe0"><div class="ttname"><a href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">SVF::LoadInst</a></div><div class="ttdeci">llvm::LoadInst LoadInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00149">BasicTypes.h:149</a></div></div>
@@ -1340,7 +1336,7 @@ $(function() {
1340
1336
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00385">ICFGNode.h:385</a></div></div>
1341
1337
  <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#l00156">SVFType.h:156</a></div></div>
1342
1338
  <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#l00165">BasicTypes.h:165</a></div></div>
1343
- <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#l00514">SVFStatements.h:514</a></div></div>
1339
+ <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#l00556">SVFStatements.h:556</a></div></div>
1344
1340
  <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>
1345
1341
  <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#l00087">BasicTypes.h:87</a></div></div>
1346
1342
  <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#l00234">LLVMUtil.h:234</a></div></div>
@@ -1364,7 +1360,7 @@ $(function() {
1364
1360
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2834d135a2385efff783e6e22d2eff1f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">SVF::LLVMUtil::isPtr2IntConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isPtr2IntConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00204">LLVMUtil.h:204</a></div></div>
1365
1361
  <div class="ttc" id="anamespaceSVF_html_ace1fd4c32134018e2f6d5da193524986"><div class="ttname"><a href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">SVF::ExtractValueInst</a></div><div class="ttdeci">llvm::ExtractValueInst ExtractValueInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00160">BasicTypes.h:160</a></div></div>
1366
1362
  <div class="ttc" id="anamespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
1367
- <div class="ttc" id="aclassSVF_1_1GepStmt_html"><div class="ttname"><a href="classSVF_1_1GepStmt.html">SVF::GepStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00484">SVFStatements.h:484</a></div></div>
1363
+ <div class="ttc" id="aclassSVF_1_1GepStmt_html"><div class="ttname"><a href="classSVF_1_1GepStmt.html">SVF::GepStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00526">SVFStatements.h:526</a></div></div>
1368
1364
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_ac449cd925dc05758c990179c0748e1d5"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ac449cd925dc05758c990179c0748e1d5">SVF::SymbolTableInfo::varargSyms</a></div><div class="ttdeci">FunToIDMapTy &amp; varargSyms()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00285">SymbolTableInfo.h:285</a></div></div>
1369
1365
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00309">SVFUtil.h:309</a></div></div>
1370
1366
  <div class="ttc" id="anamespaceSVF_html_ac4e93e1fec646ff222940a663843921b"><div class="ttname"><a href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">SVF::GetElementPtrInst</a></div><div class="ttdeci">llvm::GetElementPtrInst GetElementPtrInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00162">BasicTypes.h:162</a></div></div>