svf-tools 1.0.770 → 1.0.772

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 (313) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/BasicTypes_8h.html +4 -0
  3. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +120 -114
  4. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +10 -10
  9. package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
  10. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +3 -3
  13. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +68 -29
  14. package/SVF-doxygen/html/html/LLVMUtil_8h.html +4 -0
  15. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +16 -5
  16. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +793 -771
  23. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8h_source.html +25 -25
  24. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +361 -356
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +10 -10
  26. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  32. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  33. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  34. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  35. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  36. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  38. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  39. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
  40. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  41. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  42. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  44. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  46. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  49. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +10 -10
  50. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
  53. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  54. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  56. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  57. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  58. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  59. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  61. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +3 -3
  63. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  64. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  65. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +1 -1
  69. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  73. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  75. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState-members.html +5 -5
  78. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +797 -775
  79. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +342 -338
  80. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +23 -23
  81. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  82. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  86. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  87. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  90. package/SVF-doxygen/html/html/functions_func_g.html +5 -5
  91. package/SVF-doxygen/html/html/functions_g.html +5 -5
  92. package/SVF-doxygen/html/html/namespaceSVF.html +59 -23
  93. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +106 -2
  94. package/SVF-doxygen/html/html/namespacemembers_func_g.html +9 -3
  95. package/SVF-doxygen/html/html/namespacemembers_g.html +11 -5
  96. package/SVF-doxygen/html/html/namespacemembers_s.html +6 -0
  97. package/SVF-doxygen/html/html/namespacemembers_type_s.html +6 -0
  98. package/SVF-doxygen/html/html/search/all_10.js +324 -324
  99. package/SVF-doxygen/html/html/search/all_11.js +213 -213
  100. package/SVF-doxygen/html/html/search/all_12.js +541 -539
  101. package/SVF-doxygen/html/html/search/all_13.js +190 -190
  102. package/SVF-doxygen/html/html/search/all_14.js +66 -66
  103. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  104. package/SVF-doxygen/html/html/search/all_16.js +60 -60
  105. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  106. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  107. package/SVF-doxygen/html/html/search/all_19.js +11 -11
  108. package/SVF-doxygen/html/html/search/all_1a.js +169 -169
  109. package/SVF-doxygen/html/html/search/all_7.js +747 -745
  110. package/SVF-doxygen/html/html/search/all_8.js +191 -191
  111. package/SVF-doxygen/html/html/search/all_9.js +602 -602
  112. package/SVF-doxygen/html/html/search/all_a.js +46 -46
  113. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  114. package/SVF-doxygen/html/html/search/all_c.js +116 -116
  115. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  116. package/SVF-doxygen/html/html/search/all_e.js +206 -206
  117. package/SVF-doxygen/html/html/search/all_f.js +116 -116
  118. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  119. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  120. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  121. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  122. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  123. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  124. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  125. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  126. package/SVF-doxygen/html/html/search/classes_2.js +76 -76
  127. package/SVF-doxygen/html/html/search/classes_3.js +35 -35
  128. package/SVF-doxygen/html/html/search/classes_4.js +8 -8
  129. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  130. package/SVF-doxygen/html/html/search/classes_6.js +98 -98
  131. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  132. package/SVF-doxygen/html/html/search/classes_8.js +56 -56
  133. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  134. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  135. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  136. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  137. package/SVF-doxygen/html/html/search/classes_d.js +18 -18
  138. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  139. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  140. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  141. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  142. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  143. package/SVF-doxygen/html/html/search/defines_3.js +20 -20
  144. package/SVF-doxygen/html/html/search/defines_4.js +3 -3
  145. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  146. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  147. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  148. package/SVF-doxygen/html/html/search/defines_8.js +11 -11
  149. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  150. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  151. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  152. package/SVF-doxygen/html/html/search/defines_c.js +3 -3
  153. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  154. package/SVF-doxygen/html/html/search/defines_e.js +7 -7
  155. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  156. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  157. package/SVF-doxygen/html/html/search/enums_1.js +2 -2
  158. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  159. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  160. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  161. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  162. package/SVF-doxygen/html/html/search/enums_4.js +3 -3
  163. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  164. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  165. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  166. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  167. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  168. package/SVF-doxygen/html/html/search/enums_a.js +1 -1
  169. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  170. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  171. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  172. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  173. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  174. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  175. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
  176. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  177. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  178. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  179. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  180. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  181. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  182. package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -36
  183. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  184. package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -2
  185. package/SVF-doxygen/html/html/search/enumvalues_5.js +47 -47
  186. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  187. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  188. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  189. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  190. package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -15
  191. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  192. package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -5
  193. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
  194. package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -9
  195. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  196. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  197. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  198. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  199. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  200. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  201. package/SVF-doxygen/html/html/search/files_2.js +49 -49
  202. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  203. package/SVF-doxygen/html/html/search/files_4.js +5 -5
  204. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  205. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  206. package/SVF-doxygen/html/html/search/files_7.js +14 -14
  207. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  208. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  209. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  210. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  211. package/SVF-doxygen/html/html/search/files_c.js +20 -20
  212. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  213. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  214. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  215. package/SVF-doxygen/html/html/search/functions_0.js +12 -12
  216. package/SVF-doxygen/html/html/search/functions_1.js +350 -350
  217. package/SVF-doxygen/html/html/search/functions_10.js +140 -140
  218. package/SVF-doxygen/html/html/search/functions_11.js +127 -127
  219. package/SVF-doxygen/html/html/search/functions_12.js +275 -275
  220. package/SVF-doxygen/html/html/search/functions_13.js +58 -58
  221. package/SVF-doxygen/html/html/search/functions_14.js +38 -38
  222. package/SVF-doxygen/html/html/search/functions_15.js +71 -71
  223. package/SVF-doxygen/html/html/search/functions_16.js +29 -29
  224. package/SVF-doxygen/html/html/search/functions_17.js +3 -3
  225. package/SVF-doxygen/html/html/search/functions_18.js +169 -169
  226. package/SVF-doxygen/html/html/search/functions_2.js +84 -84
  227. package/SVF-doxygen/html/html/search/functions_3.js +253 -253
  228. package/SVF-doxygen/html/html/search/functions_4.js +74 -74
  229. package/SVF-doxygen/html/html/search/functions_5.js +51 -51
  230. package/SVF-doxygen/html/html/search/functions_6.js +58 -58
  231. package/SVF-doxygen/html/html/search/functions_7.js +842 -840
  232. package/SVF-doxygen/html/html/search/functions_8.js +143 -143
  233. package/SVF-doxygen/html/html/search/functions_9.js +422 -422
  234. package/SVF-doxygen/html/html/search/functions_a.js +30 -30
  235. package/SVF-doxygen/html/html/search/functions_b.js +2 -2
  236. package/SVF-doxygen/html/html/search/functions_c.js +26 -26
  237. package/SVF-doxygen/html/html/search/functions_d.js +77 -77
  238. package/SVF-doxygen/html/html/search/functions_e.js +35 -35
  239. package/SVF-doxygen/html/html/search/functions_f.js +56 -56
  240. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  241. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  242. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  243. package/SVF-doxygen/html/html/search/related_1.js +1 -1
  244. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  245. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  246. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  247. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  248. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  249. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  250. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  251. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  252. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  253. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  254. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  255. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  256. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  257. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  258. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  259. package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
  260. package/SVF-doxygen/html/html/search/typedefs_10.js +62 -60
  261. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  262. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  263. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  264. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  265. package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
  266. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  267. package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
  268. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  269. package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
  270. package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
  271. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  272. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  273. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  274. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  275. package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
  276. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  277. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  278. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  279. package/SVF-doxygen/html/html/search/variables_0.js +147 -147
  280. package/SVF-doxygen/html/html/search/variables_1.js +75 -75
  281. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  282. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  283. package/SVF-doxygen/html/html/search/variables_12.js +92 -92
  284. package/SVF-doxygen/html/html/search/variables_13.js +75 -75
  285. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  286. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  287. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  288. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  289. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  290. package/SVF-doxygen/html/html/search/variables_2.js +34 -34
  291. package/SVF-doxygen/html/html/search/variables_3.js +141 -141
  292. package/SVF-doxygen/html/html/search/variables_4.js +55 -55
  293. package/SVF-doxygen/html/html/search/variables_5.js +38 -38
  294. package/SVF-doxygen/html/html/search/variables_6.js +66 -66
  295. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  296. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  297. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  298. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  299. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  300. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  301. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  302. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  303. package/SVF-doxygen/html/html/search/variables_f.js +30 -30
  304. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  305. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  306. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  307. package/package.json +1 -1
  308. package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +5 -5
  309. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +77 -57
  310. package/svf-llvm/include/SVF-LLVM/BasicTypes.h +4 -0
  311. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +49 -0
  312. package/svf-llvm/lib/LLVMUtil.cpp +37 -0
  313. package/svf-llvm/lib/SVFIRBuilder.cpp +10 -9
@@ -927,368 +927,371 @@ $(function() {
927
927
  <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
928
928
  <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div>
929
929
  <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
930
- <div class="line"><a name="l00949"></a><span class="lineno"> 949</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>
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"> 951</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
933
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* condVal = inst.findCaseDest(inst.getSuccessor(i));</div>
934
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = -1;</div>
935
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">if</span> (condVal &amp;&amp; condVal-&gt;getBitWidth() &lt;= 64)</div>
936
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; val = condVal-&gt;getSExtValue();</div>
937
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
938
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</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>
939
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; successors.push_back(std::make_pair(icfgNode,val));</div>
940
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; }</div>
941
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; addBranchStmt(brinst, cond,successors);</div>
942
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;}</div>
943
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; </div>
944
- <div class="line"><a name="l00969"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 969</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
945
- <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;{</div>
946
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
947
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
948
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
949
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; addCopyEdge(src,dst);</div>
950
- <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;}</div>
951
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; </div>
952
- <div class="line"><a name="l00981"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 981</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
953
- <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;{</div>
954
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
955
- <div class="line"><a name="l00984"></a><span class="lineno"> 984</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>
956
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; {</div>
957
- <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
958
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
959
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; addCopyEdge(src,dst);</div>
960
- <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; }</div>
961
- <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;}</div>
962
- <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; </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; <span class="comment">// get case successor basic block and related case value</span></div>
932
+ <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
933
+ <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
934
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
935
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div>
936
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(inst, succBB2CaseValue);</div>
937
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
938
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
939
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
940
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
941
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</div>
942
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; }</div>
943
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; addBranchStmt(brinst, cond, successors);</div>
944
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;}</div>
945
+ <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; </div>
946
+ <div class="line"><a name="l00970"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 970</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
947
+ <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;{</div>
948
+ <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
949
+ <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
950
+ <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
951
+ <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; addCopyEdge(src,dst);</div>
952
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;}</div>
953
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; </div>
954
+ <div class="line"><a name="l00982"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 982</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
955
+ <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;{</div>
956
+ <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
957
+ <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumOperands(); i++)</div>
958
+ <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; {</div>
959
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
960
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
961
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; addCopyEdge(src,dst);</div>
962
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; }</div>
963
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;}</div>
963
964
  <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; </div>
964
- <div class="line"><a name="l00996"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 996</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>
965
- <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;{</div>
966
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; </div>
967
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
968
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
969
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</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>
970
- <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
971
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</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>
972
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; </div>
973
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
974
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
975
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
976
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
977
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; {</div>
978
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
979
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
980
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
981
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
982
- <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div>
983
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
984
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
985
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</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>
986
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
987
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</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>
988
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
989
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; {</div>
990
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
991
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
992
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; {</div>
993
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</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>
994
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">break</span>;</div>
995
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; }</div>
996
- <div class="line"><a name="l01028"></a><span class="lineno"> 1028</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>
997
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; </div>
998
- <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;process actual parm &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(AA)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
999
- <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; </div>
1000
- <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1001
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1002
- <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1003
- <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1004
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1005
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; }</div>
1006
- <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1007
- <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1008
- <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; {</div>
1009
- <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1010
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</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>
1011
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1012
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; {</div>
1013
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1014
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1015
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1016
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1017
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1018
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div>
1019
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; }</div>
1020
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1021
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; {</div>
1022
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</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>
1023
- <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
1024
- <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; </div>
1025
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div>
1026
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;}</div>
1027
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; </div>
1028
- <div class="line"><a name="l01062"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1062</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>
1029
- <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;{</div>
1030
- <div class="line"><a name="l01064"></a><span class="lineno"> 1064</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>
1031
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1032
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</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>
1033
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; {</div>
1034
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1035
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</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>
1036
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; {</div>
1037
- <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#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div>
1038
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1039
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; }</div>
1040
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1041
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; value = gep-&gt;getPointerOperand();</div>
1042
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; }</div>
1043
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; </div>
1044
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
1045
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="comment">// further steps are necessary to find the correct base value</span></div>
1046
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="comment">//</span></div>
1047
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="comment">// (1)</span></div>
1048
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// %call = malloc 80</span></div>
1049
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
1050
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
1051
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
1052
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">//</span></div>
1053
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// (2)</span></div>
1054
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
1055
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
1056
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// %3 = load i8*, i8** %2</span></div>
1057
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
1058
- <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &amp;cxt = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
1059
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keywordflow">if</span> (value-&gt;getType() == PointerType::getInt8PtrTy(cxt))</div>
1060
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; {</div>
1061
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="comment">// (1)</span></div>
1062
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1063
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div>
1064
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cb);</div>
1065
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
1066
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; {</div>
1067
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">getUniqueUseViaCastInst</a>(cb))</div>
1068
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">return</span> bitCast;</div>
1069
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; }</div>
1070
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; }</div>
1071
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="comment">// (2)</span></div>
1072
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1073
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; {</div>
1074
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(load-&gt;getPointerOperand()))</div>
1075
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">return</span> bitCast-&gt;getOperand(0);</div>
1076
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; }</div>
1077
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; }</div>
1078
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; </div>
1079
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">return</span> value;</div>
1080
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;}</div>
1081
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; </div>
1082
- <div class="line"><a name="l01119"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1119</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1083
- <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;{</div>
1084
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1085
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</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>
1086
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; </div>
1087
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</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>
1088
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1089
- <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;}</div>
1090
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; </div>
1091
- <div class="line"><a name="l01128"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1128</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1092
- <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;{</div>
1093
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1094
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1095
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1096
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; {</div>
1097
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1098
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</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>
1099
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</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>
1100
- <div class="line"><a name="l01137"></a><span class="lineno"> 1137</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>
1101
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1102
- <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; {</div>
1103
- <div class="line"><a name="l01140"></a><span class="lineno"> 1140</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>
1104
- <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; </div>
1105
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1106
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; {</div>
1107
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1108
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1109
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; handleExtCall(callbase, svfcallee);</div>
1110
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; }</div>
1111
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">else</span></div>
1112
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; {</div>
1113
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</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>
1114
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</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>
1115
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; }</div>
1116
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div>
1117
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; }</div>
1118
- <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; </div>
1119
- <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="comment">// dump SVFIR</span></div>
1120
- <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1121
- <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div>
1122
- <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;}</div>
1123
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; </div>
1124
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;<span class="comment">/*</span></div>
1125
- <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1126
- <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment"> */</span></div>
1127
- <div class="line"><a name="l01164"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1164</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1128
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;{</div>
1129
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</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>
1130
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; {</div>
1131
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1132
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="comment">//TODO::</span></div>
1133
- <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1134
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1135
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1136
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1137
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1138
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1139
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1140
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1141
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1142
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1143
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1144
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1145
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div>
1146
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;}</div>
1147
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; </div>
965
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; </div>
966
+ <div class="line"><a name="l00997"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 997</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleDirectCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
967
+ <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;{</div>
968
+ <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
969
+ <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
970
+ <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
971
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
972
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
973
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
974
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; </div>
975
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
976
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
977
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
978
+ <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
979
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; {</div>
980
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
981
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
982
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
983
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
984
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; }</div>
985
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
986
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
987
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_end();</div>
988
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
989
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
990
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
991
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; {</div>
992
+ <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
993
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
994
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; {</div>
995
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
996
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">break</span>;</div>
997
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; }</div>
998
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA), *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div>
999
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; </div>
1000
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(AA)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
1001
+ <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; </div>
1002
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1003
+ <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1004
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1005
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1006
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1007
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; }</div>
1008
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1009
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1010
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; {</div>
1011
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1012
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
1013
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1014
+ <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div>
1015
+ <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1016
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1017
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1018
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1019
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1020
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; }</div>
1021
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; }</div>
1022
+ <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1023
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; {</div>
1024
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
1025
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
1026
+ <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; </div>
1027
+ <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; }</div>
1028
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;}</div>
1029
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; </div>
1030
+ <div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1063</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* SVFIRBuilder::getBaseValueForExtArg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div>
1031
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;{</div>
1032
+ <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
1033
+ <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1034
+ <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(value))</div>
1035
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; {</div>
1036
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1037
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
1038
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; {</div>
1039
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div>
1040
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1041
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; }</div>
1042
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1043
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; value = gep-&gt;getPointerOperand();</div>
1044
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; }</div>
1045
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; </div>
1046
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
1047
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="comment">// further steps are necessary to find the correct base value</span></div>
1048
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="comment">//</span></div>
1049
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// (1)</span></div>
1050
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">// %call = malloc 80</span></div>
1051
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
1052
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
1053
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
1054
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">//</span></div>
1055
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="comment">// (2)</span></div>
1056
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
1057
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
1058
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">// %3 = load i8*, i8** %2</span></div>
1059
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
1060
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &amp;cxt = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
1061
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">if</span> (value-&gt;getType() == PointerType::getInt8PtrTy(cxt))</div>
1062
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; {</div>
1063
+ <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="comment">// (1)</span></div>
1064
+ <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1065
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; {</div>
1066
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cb);</div>
1067
+ <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
1068
+ <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; {</div>
1069
+ <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">getUniqueUseViaCastInst</a>(cb))</div>
1070
+ <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keywordflow">return</span> bitCast;</div>
1071
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; }</div>
1072
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; }</div>
1073
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">// (2)</span></div>
1074
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1075
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div>
1076
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(load-&gt;getPointerOperand()))</div>
1077
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">return</span> bitCast-&gt;getOperand(0);</div>
1078
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; }</div>
1079
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; }</div>
1080
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; </div>
1081
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keywordflow">return</span> value;</div>
1082
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;}</div>
1083
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; </div>
1084
+ <div class="line"><a name="l01120"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1120</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1085
+ <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;{</div>
1086
+ <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1087
+ <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(cs-&gt;getCalledOperand());</div>
1088
+ <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; </div>
1089
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1090
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1091
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;}</div>
1092
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; </div>
1093
+ <div class="line"><a name="l01129"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1129</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1094
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;{</div>
1095
+ <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1096
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1097
+ <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1098
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; {</div>
1099
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1100
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast&lt;CallBase&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
1101
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; assert(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div>
1102
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; functions = iter-&gt;second;</div>
1103
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1104
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; {</div>
1105
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast&lt;Function&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(*func_iter));</div>
1106
+ <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; </div>
1107
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1108
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; {</div>
1109
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1110
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1111
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; handleExtCall(callbase, svfcallee);</div>
1112
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; }</div>
1113
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">else</span></div>
1114
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; {</div>
1115
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; setCurrentLocation(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
1116
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; handleDirectCall(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">&gt;</span>(callbase), callee);</div>
1117
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div>
1118
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; }</div>
1119
+ <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; }</div>
1120
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; </div>
1121
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="comment">// dump SVFIR</span></div>
1122
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1123
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div>
1124
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;}</div>
1125
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; </div>
1126
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment">/*</span></div>
1127
+ <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1128
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="comment"> */</span></div>
1129
+ <div class="line"><a name="l01165"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1165</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1130
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;{</div>
1131
+ <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;begin(); nIter != pag-&gt;end(); ++nIter)</div>
1132
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; {</div>
1133
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1134
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="comment">//TODO::</span></div>
1135
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1136
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1137
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1138
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1139
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1140
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1141
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1142
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1143
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1144
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1145
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1146
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1147
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; }</div>
1148
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;}</div>
1148
1149
  <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; </div>
1149
- <div class="line"><a name="l01190"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1190</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>
1150
- <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;{</div>
1151
- <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseValVar(getValueNode(val));</div>
1152
- <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1153
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1154
- <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; {</div>
1155
- <div class="line"><a name="l01196"></a><span class="lineno"> 1196</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>
1156
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="comment">/*</span></div>
1157
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1158
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1159
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1160
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1161
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1162
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1163
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> */</span></div>
1164
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</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>
1165
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; </div>
1166
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1167
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1168
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1169
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1170
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1171
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1172
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag-&gt;addGepValNode(curVal, llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, NodeIDAllocator::get()-&gt;allocateValueId(),elementType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
1173
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1174
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; setCurrentLocation(cval, cbb);</div>
1175
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1176
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; }</div>
1177
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keywordflow">else</span></div>
1178
- <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1179
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div>
1180
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; </div>
1150
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; </div>
1151
+ <div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1191</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGepValVar(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType)</div>
1152
+ <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;{</div>
1153
+ <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseValVar(getValueNode(val));</div>
1154
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1155
+ <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1156
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div>
1157
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 &amp;&amp; <span class="stringliteral">&quot;maximum limit of unsigned int is not -1?&quot;</span>);</div>
1158
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="comment">/*</span></div>
1159
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1160
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1161
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1162
+ <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1163
+ <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1164
+ <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1165
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> */</span></div>
1166
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; assert((SVFUtil::isa&lt;SVFInstruction, SVFGlobalValue&gt;(curVal)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div>
1167
+ <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; </div>
1168
+ <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1169
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1170
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1171
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1172
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1173
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1174
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag-&gt;addGepValNode(curVal, llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, NodeIDAllocator::get()-&gt;allocateValueId(),elementType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
1175
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1176
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; setCurrentLocation(cval, cbb);</div>
1177
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1178
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; }</div>
1179
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">else</span></div>
1180
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1181
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;}</div>
1181
1182
  <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; </div>
1182
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;<span class="comment">/*</span></div>
1183
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1184
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1185
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1186
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1187
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1188
- <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1189
- <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1190
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1191
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1192
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1193
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1194
- <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"> */</span></div>
1195
- <div class="line"><a name="l01236"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1236</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1196
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;{</div>
1197
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1198
- <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">return</span>;</div>
1199
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; </div>
1200
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1201
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</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>
1202
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1203
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1204
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1205
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1206
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</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>
1207
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; {</div>
1208
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</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>
1209
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div>
1210
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</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>
1211
- <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; {</div>
1212
- <div class="line"><a name="l01253"></a><span class="lineno"> 1253</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>
1213
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; }</div>
1214
- <div class="line"><a name="l01255"></a><span class="lineno"> 1255</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>
1215
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; {</div>
1216
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</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>
1217
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; }</div>
1218
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; </div>
1219
- <div class="line"><a name="l01261"></a><span class="lineno"> 1261</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>
1220
- <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1221
- <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; </div>
1222
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1223
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; {</div>
1224
- <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1225
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; }</div>
1226
- <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">else</span></div>
1227
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; {</div>
1228
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1229
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1230
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">else</span></div>
1231
- <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1232
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; }</div>
1233
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; }</div>
1234
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</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>
1235
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; {</div>
1236
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1237
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1238
- <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; }</div>
1239
- <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1240
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1241
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1242
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; {</div>
1243
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1244
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1245
- <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">else</span></div>
1246
- <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; {</div>
1247
- <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1248
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; }</div>
1249
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }</div>
1250
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">else</span></div>
1251
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; {</div>
1252
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1253
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; }</div>
1254
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; </div>
1255
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1256
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1257
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</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>
1258
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; {</div>
1259
- <div class="line"><a name="l01302"></a><span class="lineno"> 1302</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>
1260
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</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>
1261
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</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>
1262
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</div>
1263
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; }</div>
1264
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</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>
1265
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; {</div>
1266
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</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>
1267
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</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>
1268
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</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>
1269
- <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</div>
1270
- <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; }</div>
1271
- <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;}</div>
1272
- <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; </div>
1183
+ <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; </div>
1184
+ <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;<span class="comment">/*</span></div>
1185
+ <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1186
+ <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1187
+ <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1188
+ <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1189
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1190
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1191
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1192
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1193
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1194
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1195
+ <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1196
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"> */</span></div>
1197
+ <div class="line"><a name="l01237"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1237</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1198
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;{</div>
1199
+ <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1200
+ <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">return</span>;</div>
1201
+ <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; </div>
1202
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1203
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(curBB!=<span class="keyword">nullptr</span> ? curBB : <span class="keyword">nullptr</span>);</div>
1204
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1205
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1206
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1207
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1208
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(curVal))</div>
1209
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; {</div>
1210
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div>
1211
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div>
1212
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue()))</div>
1213
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; {</div>
1214
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; assert(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div>
1215
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; }</div>
1216
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue()))</div>
1217
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; {</div>
1218
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; assert(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div>
1219
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div>
1220
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; </div>
1221
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
1222
+ <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1223
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; </div>
1224
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1225
+ <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; {</div>
1226
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1227
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; }</div>
1228
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keywordflow">else</span></div>
1229
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; {</div>
1230
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1231
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1232
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">else</span></div>
1233
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1234
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; }</div>
1235
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; }</div>
1236
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVFArgument&gt;(curVal))</div>
1237
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; {</div>
1238
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1239
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1240
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; }</div>
1241
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1242
+ <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1243
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1244
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; {</div>
1245
+ <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1246
+ <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1247
+ <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">else</span></div>
1248
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; {</div>
1249
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1250
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }</div>
1251
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; }</div>
1252
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">else</span></div>
1253
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; {</div>
1254
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1255
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div>
1256
+ <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; </div>
1257
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1258
+ <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1259
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(edge))</div>
1260
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; {</div>
1261
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getCallSite());</div>
1262
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getFunEntryICFGNode());</div>
1263
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))</div>
1264
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</div>
1265
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; }</div>
1266
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(edge))</div>
1267
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; {</div>
1268
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getCallSite()-&gt;getRetICFGNode());</div>
1269
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getFunExitICFGNode());</div>
1270
+ <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))</div>
1271
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</div>
1272
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; }</div>
1273
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;}</div>
1273
1274
  <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; </div>
1274
- <div class="line"><a name="l01323"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1323</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>
1275
- <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;{</div>
1276
- <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1277
- <div class="line"><a name="l01326"></a><span class="lineno"> 1326</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>
1278
- <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1279
- <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1280
- <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; </div>
1281
- <div class="line"><a name="l01331"></a><span class="lineno"> 1331</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>
1282
- <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1283
- <div class="line"><a name="l01333"></a><span class="lineno"> 1333</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>
1284
- <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1285
- <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1286
- <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">else</span></div>
1287
- <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1288
- <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;}</div>
1275
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; </div>
1276
+ <div class="line"><a name="l01324"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1324</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> SVFIRBuilder::getAccessPathFromBaseNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
1277
+ <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;{</div>
1278
+ <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1279
+ <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; geps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(SVFStmt::Gep);</div>
1280
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1281
+ <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1282
+ <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; </div>
1283
+ <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; assert(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div>
1284
+ <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1285
+ <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast&lt;GepStmt&gt;(*it);</div>
1286
+ <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1287
+ <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1288
+ <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">else</span></div>
1289
+ <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1290
+ <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;}</div>
1289
1291
  </div><!-- fragment --></div><!-- contents -->
1290
1292
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
1291
1293
  <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#l00251">LLVMUtil.cpp:251</a></div></div>
1294
+ <div class="ttc" id="anamespaceSVF_html_a8de26e1810ea0c3b1e8ad62f1c8a864d"><div class="ttname"><a href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SVF::SuccBBAndCondValPairVec</a></div><div class="ttdeci">std::vector&lt; SuccBBAndCondValPair &gt; SuccBBAndCondValPairVec</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00183">BasicTypes.h:183</a></div></div>
1292
1295
  <div class="ttc" id="aPAGBuilderFromFile_8h_html"><div class="ttname"><a href="PAGBuilderFromFile_8h.html">PAGBuilderFromFile.h</a></div></div>
1293
1296
  <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#l00059">CHGBuilder.cpp:59</a></div></div>
1294
1297
  <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#l00146">BasicTypes.h:146</a></div></div>
@@ -1305,6 +1308,7 @@ $(function() {
1305
1308
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html_a90fd0b8e44fba1a7eb76d15bce085d66"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">SVF::CallICFGNode::getCallSite</a></div><div class="ttdeci">const SVFInstruction * getCallSite() const</div><div class="ttdoc">Return callsite.</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00409">ICFGNode.h:409</a></div></div>
1306
1309
  <div class="ttc" id="anamespaceSVF_html_aad5d26ab07a5d1314bdb8f54e0fcdb22"><div class="ttname"><a href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">SVF::BinaryOperator</a></div><div class="ttdeci">llvm::BinaryOperator BinaryOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00177">BasicTypes.h:177</a></div></div>
1307
1310
  <div class="ttc" id="anamespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
1311
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9001722dd27bf487351725c3d7b65f2f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">SVF::LLVMUtil::getSuccBBandCondValPairVec</a></div><div class="ttdeci">void getSuccBBandCondValPairVec(const SwitchInst &amp;switchInst, SuccBBAndCondValPairVec &amp;vec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01155">LLVMUtil.cpp:1155</a></div></div>
1308
1312
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_aafd4da7cef6387bb974abe20185b7b96"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">SVF::SymbolTableInfo::retSyms</a></div><div class="ttdeci">FunToIDMapTy &amp; retSyms()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00280">SymbolTableInfo.h:280</a></div></div>
1309
1313
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad56c48be3ba6ebb95416623256524097"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">SVF::LLVMUtil::getCallee</a></div><div class="ttdeci">const Function * getCallee(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00074">LLVMUtil.h:74</a></div></div>
1310
1314
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
@@ -1329,6 +1333,7 @@ $(function() {
1329
1333
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a8cd7b6c6fd8b030b1421d95a086359f4"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVF::SVFStmt::SVFStmtSetTy</a></div><div class="ttdeci">GenericNode&lt; SVFVar, SVFStmt &gt;::GEdgeSetTy SVFStmtSetTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00217">SVFStatements.h:217</a></div></div>
1330
1334
  <div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00144">BasicTypes.h:144</a></div></div>
1331
1335
  <div class="ttc" id="anamespaceSVF_html_ac6b6710585fc6667858ccfd4311b6ab5"><div class="ttname"><a href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">SVF::CallBrInst</a></div><div class="ttdeci">llvm::CallBrInst CallBrInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00154">BasicTypes.h:154</a></div></div>
1336
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a33e8378ae1a911169394e545a4ba2220"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">SVF::LLVMUtil::getCaseValue</a></div><div class="ttdeci">s64_t getCaseValue(const SwitchInst &amp;switchInst, SuccBBAndCondValPair &amp;succBB2CondVal)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01165">LLVMUtil.cpp:1165</a></div></div>
1332
1337
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a3672b4797c400aac90c6d36ce29e0e57"><div class="ttname"><a href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">SVF::SVFType::getPointerTo</a></div><div class="ttdeci">const SVFPointerType * getPointerTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00296">SVFType.h:296</a></div></div>
1333
1338
  <div class="ttc" id="anamespacellvm_html_a7cfc92a12082d69711c97bb3d1b99c48"><div class="ttname"><a href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">llvm::bridge_gep_end</a></div><div class="ttdeci">bridge_gep_iterator bridge_gep_end(const User *GEP)</div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00157">GEPTypeBridgeIterator.h:157</a></div></div>
1334
1339
  <div class="ttc" id="aLLVMLoopAnalysis_8h_html"><div class="ttname"><a href="LLVMLoopAnalysis_8h.html">LLVMLoopAnalysis.h</a></div></div>
@@ -1405,7 +1410,7 @@ $(function() {
1405
1410
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a3d34fcdfc98add848a34fd5259c11eb2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">SVF::LLVMUtil::getDefFunForMultipleModule</a></div><div class="ttdeci">const Function * getDefFunForMultipleModule(const Function *fun)</div><div class="ttdoc">Get the definition of a function across multiple modules.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00057">LLVMUtil.h:57</a></div></div>
1406
1411
  <div class="ttc" id="anamespaceSVF_html_a56cb9d6d1e05f6c31bfe1a4045bc8b5f"><div class="ttname"><a href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">SVF::InvokeInst</a></div><div class="ttdeci">llvm::InvokeInst InvokeInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00161">BasicTypes.h:161</a></div></div>
1407
1412
  <div class="ttc" id="aclassllvm_1_1generic__bridge__gep__type__iterator_html"><div class="ttname"><a href="classllvm_1_1generic__bridge__gep__type__iterator.html">llvm::generic_bridge_gep_type_iterator</a></div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00017">GEPTypeBridgeIterator.h:17</a></div></div>
1408
- <div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01157">LLVMUtil.cpp:1157</a></div></div>
1413
+ <div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01194">LLVMUtil.cpp:1194</a></div></div>
1409
1414
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html">SVF::LLVMModuleSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00044">LLVMModule.h:44</a></div></div>
1410
1415
  <div class="ttc" id="aclassSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00324">ICFGNode.h:324</a></div></div>
1411
1416
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a4550f2fb815882edfb666ac818792064"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(const std::string &amp;msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>