svf-tools 1.0.829 → 1.0.830

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 (386) hide show
  1. package/SVF-doxygen/html/AccessPath_8cpp_source.html +225 -224
  2. package/SVF-doxygen/html/AccessPath_8h_source.html +11 -11
  3. package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/BasicTypes_8h.html +2 -0
  6. package/SVF-doxygen/html/BasicTypes_8h_source.html +123 -121
  7. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +11 -11
  10. package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/ConsG_8h_source.html +1 -1
  12. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/ContextDDA_8h_source.html +1 -1
  14. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  15. package/SVF-doxygen/html/DCHG_8cpp_source.html +12 -12
  16. package/SVF-doxygen/html/DCHG_8h_source.html +5 -5
  17. package/SVF-doxygen/html/DDAClient_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +4 -4
  20. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/FlowDDA_8h_source.html +1 -1
  22. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/IRGraph_8h_source.html +2 -2
  26. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +145 -144
  27. package/SVF-doxygen/html/LLVMModule_8h_source.html +3 -3
  28. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +1138 -1066
  29. package/SVF-doxygen/html/LLVMUtil_8h.html +2 -0
  30. package/SVF-doxygen/html/LLVMUtil_8h_source.html +419 -414
  31. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/MemRegion_8cpp_source.html +3 -3
  35. package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +4 -4
  37. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +363 -362
  38. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +13 -13
  39. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +7 -7
  40. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +11 -10
  41. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +927 -924
  42. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +35 -34
  43. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +2 -2
  44. package/SVF-doxygen/html/SVFIR_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/SVFIR_8h_source.html +1 -1
  46. package/SVF-doxygen/html/SVFStat_8cpp_source.html +12 -12
  47. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/SVFStatements_8h_source.html +2 -2
  49. package/SVF-doxygen/html/SVFType_8cpp_source.html +38 -37
  50. package/SVF-doxygen/html/SVFType_8h_source.html +5 -5
  51. package/SVF-doxygen/html/SVFValue_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
  53. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/SVFVariables_8h_source.html +1 -1
  55. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +653 -651
  58. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +17 -17
  59. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +339 -338
  60. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +33 -33
  61. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
  62. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +3 -3
  64. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +236 -235
  65. package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  66. package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  67. package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
  68. package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +1 -1
  69. package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
  70. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +1 -1
  71. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +4 -4
  72. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
  73. package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  74. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
  75. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +3 -3
  76. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +11 -11
  77. package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
  78. package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
  79. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
  81. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +2 -2
  82. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
  83. package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
  84. package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
  86. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +12 -12
  87. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  88. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  89. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  90. package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
  91. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
  92. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +1 -1
  93. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
  95. package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +1 -1
  96. package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +2 -2
  97. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +3 -3
  98. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
  99. package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
  100. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +1 -1
  101. package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
  102. package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  103. package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  104. package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
  105. package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
  106. package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  107. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +141 -140
  108. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +1 -1
  109. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
  110. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  111. package/SVF-doxygen/html/classSVF_1_1MHP.html +1 -1
  112. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +3 -3
  113. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
  114. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
  115. package/SVF-doxygen/html/classSVF_1_1MemObj.html +121 -121
  116. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +1 -1
  117. package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +29 -29
  118. package/SVF-doxygen/html/classSVF_1_1ObjVar.html +2 -2
  119. package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
  120. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
  121. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +342 -341
  122. package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
  124. package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +4 -4
  125. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +4 -4
  126. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +1 -1
  127. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +6 -6
  128. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +11 -10
  129. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +868 -864
  130. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +7 -7
  131. package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +4 -4
  132. package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +3 -2
  133. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +12 -12
  134. package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +4 -4
  135. package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
  136. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  137. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
  138. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +1 -1
  139. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
  140. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +634 -631
  141. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +125 -124
  142. package/SVF-doxygen/html/classSVF_1_1TCT.html +1 -1
  143. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
  144. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
  145. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +1 -1
  146. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +2 -2
  147. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
  148. package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  149. package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
  150. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  151. package/SVF-doxygen/html/functions_func_g.html +10 -10
  152. package/SVF-doxygen/html/functions_func_p.html +1 -1
  153. package/SVF-doxygen/html/functions_g.html +6 -6
  154. package/SVF-doxygen/html/functions_r.html +2 -2
  155. package/SVF-doxygen/html/functions_s.html +5 -5
  156. package/SVF-doxygen/html/functions_t.html +7 -7
  157. package/SVF-doxygen/html/functions_v.html +3 -1
  158. package/SVF-doxygen/html/functions_w.html +8 -8
  159. package/SVF-doxygen/html/namespaceSVF.html +43 -25
  160. package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +1233 -1138
  161. package/SVF-doxygen/html/namespacemembers_func_g.html +6 -3
  162. package/SVF-doxygen/html/namespacemembers_g.html +10 -4
  163. package/SVF-doxygen/html/namespacemembers_type_g.html +3 -0
  164. package/SVF-doxygen/html/search/all_10.js +324 -324
  165. package/SVF-doxygen/html/search/all_11.js +223 -223
  166. package/SVF-doxygen/html/search/all_12.js +553 -553
  167. package/SVF-doxygen/html/search/all_13.js +192 -192
  168. package/SVF-doxygen/html/search/all_14.js +67 -67
  169. package/SVF-doxygen/html/search/all_15.js +167 -167
  170. package/SVF-doxygen/html/search/all_16.js +63 -63
  171. package/SVF-doxygen/html/search/all_17.js +1 -1
  172. package/SVF-doxygen/html/search/all_18.js +1 -1
  173. package/SVF-doxygen/html/search/all_19.js +11 -11
  174. package/SVF-doxygen/html/search/all_1a.js +172 -172
  175. package/SVF-doxygen/html/search/all_7.js +895 -893
  176. package/SVF-doxygen/html/search/all_8.js +198 -198
  177. package/SVF-doxygen/html/search/all_9.js +607 -607
  178. package/SVF-doxygen/html/search/all_a.js +46 -46
  179. package/SVF-doxygen/html/search/all_b.js +26 -26
  180. package/SVF-doxygen/html/search/all_c.js +115 -115
  181. package/SVF-doxygen/html/search/all_d.js +198 -198
  182. package/SVF-doxygen/html/search/all_e.js +207 -207
  183. package/SVF-doxygen/html/search/all_f.js +116 -116
  184. package/SVF-doxygen/html/search/classes_0.js +26 -26
  185. package/SVF-doxygen/html/search/classes_1.js +9 -9
  186. package/SVF-doxygen/html/search/classes_10.js +73 -73
  187. package/SVF-doxygen/html/search/classes_11.js +15 -15
  188. package/SVF-doxygen/html/search/classes_12.js +2 -2
  189. package/SVF-doxygen/html/search/classes_13.js +10 -10
  190. package/SVF-doxygen/html/search/classes_14.js +14 -14
  191. package/SVF-doxygen/html/search/classes_15.js +1 -1
  192. package/SVF-doxygen/html/search/classes_2.js +80 -80
  193. package/SVF-doxygen/html/search/classes_3.js +37 -37
  194. package/SVF-doxygen/html/search/classes_4.js +9 -9
  195. package/SVF-doxygen/html/search/classes_5.js +28 -28
  196. package/SVF-doxygen/html/search/classes_6.js +104 -104
  197. package/SVF-doxygen/html/search/classes_7.js +34 -34
  198. package/SVF-doxygen/html/search/classes_8.js +56 -56
  199. package/SVF-doxygen/html/search/classes_9.js +1 -1
  200. package/SVF-doxygen/html/search/classes_a.js +12 -12
  201. package/SVF-doxygen/html/search/classes_b.js +29 -29
  202. package/SVF-doxygen/html/search/classes_c.js +6 -6
  203. package/SVF-doxygen/html/search/classes_d.js +18 -18
  204. package/SVF-doxygen/html/search/classes_e.js +36 -36
  205. package/SVF-doxygen/html/search/classes_f.js +25 -25
  206. package/SVF-doxygen/html/search/defines_0.js +3 -3
  207. package/SVF-doxygen/html/search/defines_1.js +2 -2
  208. package/SVF-doxygen/html/search/defines_2.js +30 -30
  209. package/SVF-doxygen/html/search/defines_3.js +21 -21
  210. package/SVF-doxygen/html/search/defines_4.js +2 -2
  211. package/SVF-doxygen/html/search/defines_5.js +4 -4
  212. package/SVF-doxygen/html/search/defines_6.js +2 -2
  213. package/SVF-doxygen/html/search/defines_7.js +5 -5
  214. package/SVF-doxygen/html/search/defines_8.js +11 -11
  215. package/SVF-doxygen/html/search/defines_9.js +9 -9
  216. package/SVF-doxygen/html/search/defines_a.js +2 -2
  217. package/SVF-doxygen/html/search/defines_b.js +1 -1
  218. package/SVF-doxygen/html/search/defines_c.js +3 -3
  219. package/SVF-doxygen/html/search/defines_d.js +2 -2
  220. package/SVF-doxygen/html/search/defines_e.js +7 -7
  221. package/SVF-doxygen/html/search/defines_f.js +3 -3
  222. package/SVF-doxygen/html/search/enums_0.js +3 -3
  223. package/SVF-doxygen/html/search/enums_1.js +2 -2
  224. package/SVF-doxygen/html/search/enums_10.js +1 -1
  225. package/SVF-doxygen/html/search/enums_11.js +1 -1
  226. package/SVF-doxygen/html/search/enums_2.js +8 -8
  227. package/SVF-doxygen/html/search/enums_3.js +1 -1
  228. package/SVF-doxygen/html/search/enums_4.js +3 -3
  229. package/SVF-doxygen/html/search/enums_5.js +1 -1
  230. package/SVF-doxygen/html/search/enums_6.js +2 -2
  231. package/SVF-doxygen/html/search/enums_7.js +2 -2
  232. package/SVF-doxygen/html/search/enums_8.js +4 -4
  233. package/SVF-doxygen/html/search/enums_9.js +1 -1
  234. package/SVF-doxygen/html/search/enums_a.js +1 -1
  235. package/SVF-doxygen/html/search/enums_b.js +7 -7
  236. package/SVF-doxygen/html/search/enums_c.js +1 -1
  237. package/SVF-doxygen/html/search/enums_d.js +4 -4
  238. package/SVF-doxygen/html/search/enums_e.js +2 -2
  239. package/SVF-doxygen/html/search/enums_f.js +4 -4
  240. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  241. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  242. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  243. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  244. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  245. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  246. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  247. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  248. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  249. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  250. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  251. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  252. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  253. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  254. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  255. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  256. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  257. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  258. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  259. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  260. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  261. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  262. package/SVF-doxygen/html/search/files_0.js +13 -13
  263. package/SVF-doxygen/html/search/files_1.js +7 -7
  264. package/SVF-doxygen/html/search/files_10.js +8 -8
  265. package/SVF-doxygen/html/search/files_11.js +8 -8
  266. package/SVF-doxygen/html/search/files_12.js +2 -2
  267. package/SVF-doxygen/html/search/files_2.js +55 -55
  268. package/SVF-doxygen/html/search/files_3.js +14 -14
  269. package/SVF-doxygen/html/search/files_4.js +5 -5
  270. package/SVF-doxygen/html/search/files_5.js +13 -13
  271. package/SVF-doxygen/html/search/files_6.js +9 -9
  272. package/SVF-doxygen/html/search/files_7.js +14 -14
  273. package/SVF-doxygen/html/search/files_8.js +13 -13
  274. package/SVF-doxygen/html/search/files_9.js +18 -18
  275. package/SVF-doxygen/html/search/files_a.js +3 -3
  276. package/SVF-doxygen/html/search/files_b.js +2 -2
  277. package/SVF-doxygen/html/search/files_c.js +20 -20
  278. package/SVF-doxygen/html/search/files_d.js +4 -4
  279. package/SVF-doxygen/html/search/files_e.js +62 -62
  280. package/SVF-doxygen/html/search/files_f.js +8 -8
  281. package/SVF-doxygen/html/search/functions_0.js +13 -13
  282. package/SVF-doxygen/html/search/functions_1.js +360 -360
  283. package/SVF-doxygen/html/search/functions_10.js +140 -140
  284. package/SVF-doxygen/html/search/functions_11.js +139 -139
  285. package/SVF-doxygen/html/search/functions_12.js +288 -288
  286. package/SVF-doxygen/html/search/functions_13.js +59 -59
  287. package/SVF-doxygen/html/search/functions_14.js +39 -39
  288. package/SVF-doxygen/html/search/functions_15.js +71 -71
  289. package/SVF-doxygen/html/search/functions_16.js +32 -32
  290. package/SVF-doxygen/html/search/functions_17.js +3 -3
  291. package/SVF-doxygen/html/search/functions_18.js +172 -172
  292. package/SVF-doxygen/html/search/functions_2.js +89 -89
  293. package/SVF-doxygen/html/search/functions_3.js +258 -258
  294. package/SVF-doxygen/html/search/functions_4.js +78 -78
  295. package/SVF-doxygen/html/search/functions_5.js +53 -53
  296. package/SVF-doxygen/html/search/functions_6.js +60 -60
  297. package/SVF-doxygen/html/search/functions_7.js +857 -856
  298. package/SVF-doxygen/html/search/functions_8.js +149 -149
  299. package/SVF-doxygen/html/search/functions_9.js +423 -423
  300. package/SVF-doxygen/html/search/functions_a.js +30 -30
  301. package/SVF-doxygen/html/search/functions_b.js +2 -2
  302. package/SVF-doxygen/html/search/functions_c.js +25 -25
  303. package/SVF-doxygen/html/search/functions_d.js +79 -79
  304. package/SVF-doxygen/html/search/functions_e.js +35 -35
  305. package/SVF-doxygen/html/search/functions_f.js +56 -56
  306. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  307. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  308. package/SVF-doxygen/html/search/related_0.js +2 -2
  309. package/SVF-doxygen/html/search/related_1.js +2 -2
  310. package/SVF-doxygen/html/search/related_2.js +2 -2
  311. package/SVF-doxygen/html/search/related_3.js +2 -2
  312. package/SVF-doxygen/html/search/related_4.js +2 -2
  313. package/SVF-doxygen/html/search/related_5.js +1 -1
  314. package/SVF-doxygen/html/search/related_6.js +2 -2
  315. package/SVF-doxygen/html/search/related_7.js +4 -4
  316. package/SVF-doxygen/html/search/related_8.js +2 -2
  317. package/SVF-doxygen/html/search/related_9.js +4 -4
  318. package/SVF-doxygen/html/search/related_a.js +19 -19
  319. package/SVF-doxygen/html/search/related_b.js +4 -4
  320. package/SVF-doxygen/html/search/related_c.js +2 -2
  321. package/SVF-doxygen/html/search/related_d.js +12 -12
  322. package/SVF-doxygen/html/search/related_e.js +2 -2
  323. package/SVF-doxygen/html/search/related_f.js +2 -2
  324. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  325. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  326. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  327. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  328. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  329. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  330. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  331. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  332. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  333. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  334. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  335. package/SVF-doxygen/html/search/typedefs_6.js +56 -55
  336. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  337. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  338. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  339. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  340. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  341. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  342. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  343. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  344. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  345. package/SVF-doxygen/html/search/variables_0.js +151 -151
  346. package/SVF-doxygen/html/search/variables_1.js +75 -75
  347. package/SVF-doxygen/html/search/variables_10.js +97 -97
  348. package/SVF-doxygen/html/search/variables_11.js +44 -44
  349. package/SVF-doxygen/html/search/variables_12.js +92 -92
  350. package/SVF-doxygen/html/search/variables_13.js +76 -76
  351. package/SVF-doxygen/html/search/variables_14.js +14 -14
  352. package/SVF-doxygen/html/search/variables_15.js +48 -48
  353. package/SVF-doxygen/html/search/variables_16.js +9 -9
  354. package/SVF-doxygen/html/search/variables_17.js +1 -1
  355. package/SVF-doxygen/html/search/variables_18.js +2 -2
  356. package/SVF-doxygen/html/search/variables_2.js +38 -38
  357. package/SVF-doxygen/html/search/variables_3.js +142 -142
  358. package/SVF-doxygen/html/search/variables_4.js +55 -55
  359. package/SVF-doxygen/html/search/variables_5.js +37 -37
  360. package/SVF-doxygen/html/search/variables_6.js +66 -66
  361. package/SVF-doxygen/html/search/variables_7.js +34 -34
  362. package/SVF-doxygen/html/search/variables_8.js +7 -7
  363. package/SVF-doxygen/html/search/variables_9.js +78 -78
  364. package/SVF-doxygen/html/search/variables_a.js +4 -4
  365. package/SVF-doxygen/html/search/variables_b.js +10 -10
  366. package/SVF-doxygen/html/search/variables_c.js +45 -45
  367. package/SVF-doxygen/html/search/variables_d.js +56 -56
  368. package/SVF-doxygen/html/search/variables_e.js +123 -123
  369. package/SVF-doxygen/html/search/variables_f.js +30 -30
  370. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  371. package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
  372. package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
  373. package/package.json +1 -1
  374. package/svf/include/MemoryModel/AccessPath.h +2 -2
  375. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -2
  376. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -4
  377. package/svf/lib/MemoryModel/AccessPath.cpp +6 -5
  378. package/svf/lib/MemoryModel/PointerAnalysis.cpp +1 -0
  379. package/svf/lib/SVFIR/SVFType.cpp +1 -0
  380. package/svf/lib/SVFIR/SymbolTableInfo.cpp +1 -0
  381. package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
  382. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +6 -0
  383. package/svf-llvm/lib/LLVMModule.cpp +1 -0
  384. package/svf-llvm/lib/LLVMUtil.cpp +70 -0
  385. package/svf-llvm/lib/SVFIRBuilder.cpp +3 -1
  386. package/svf-llvm/lib/SymbolTableBuilder.cpp +4 -1
@@ -105,6 +105,8 @@ Functions</h2></td></tr>
105
105
  <tr class="separator:a847fb0c433b5d3611151636ca4bc5bc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
106
106
  <tr class="memitem:abba4111230f6009bbf50518ee36a9870"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a> (const <a class="el" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *pty)</td></tr>
107
107
  <tr class="separator:abba4111230f6009bbf50518ee36a9870"><td class="memSeparator" colspan="2">&#160;</td></tr>
108
+ <tr class="memitem:a4b5d4c7ca2c580ace7305bfed58ffce8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceSVF_1_1LLVMUtil.html#a4b5d4c7ca2c580ace7305bfed58ffce8">getPointeeType</a> (const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *value)</td></tr>
109
+ <tr class="separator:a4b5d4c7ca2c580ace7305bfed58ffce8"><td class="memSeparator" colspan="2">&#160;</td></tr>
108
110
  <tr class="memitem:a6c5f2f951463494af2e7b0d3267f2772"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceSVF_1_1LLVMUtil.html#a6c5f2f951463494af2e7b0d3267f2772">getRefTypeOfHeapAllocOrStatic</a> (const <a class="el" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *cs)</td></tr>
109
111
  <tr class="memdesc:a6c5f2f951463494af2e7b0d3267f2772"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the reference type of heap/static object from an allocation site. <a href="namespaceSVF_1_1LLVMUtil.html#a6c5f2f951463494af2e7b0d3267f2772">More...</a><br /></td></tr>
110
112
  <tr class="separator:a6c5f2f951463494af2e7b0d3267f2772"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -311,11 +313,11 @@ Functions</h2></td></tr>
311
313
 
312
314
  <p>whether this is an argument in dead function </p>
313
315
 
314
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00172">172</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
315
- <div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div>
316
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;Argument&gt;(val)</div>
317
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; &amp;&amp; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">isUncalledFunction</a>(SVFUtil::cast&lt;Argument&gt;(val)-&gt;getParent());</div>
318
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;}</div>
316
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00177">177</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
317
+ <div class="fragment"><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{</div>
318
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;Argument&gt;(val)</div>
319
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; &amp;&amp; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">isUncalledFunction</a>(SVFUtil::cast&lt;Argument&gt;(val)-&gt;getParent());</div>
320
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div>
319
321
  </div><!-- fragment -->
320
322
  </div>
321
323
  </div>
@@ -345,12 +347,12 @@ Functions</h2></td></tr>
345
347
 
346
348
  <p>Return true if this is an argument of a program entry function (e.g. main) </p>
347
349
 
348
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00180">180</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
349
- <div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div>
350
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;Argument&gt;(val) &amp;&amp;</div>
351
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ac9d6aff1a5e778e45c51b4f3b6d787e0">LLVMUtil::isProgEntryFunction</a>(</div>
352
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; SVFUtil::cast&lt;Argument&gt;(val)-&gt;getParent());</div>
353
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;}</div>
350
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00185">185</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
351
+ <div class="fragment"><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;{</div>
352
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;Argument&gt;(val) &amp;&amp;</div>
353
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ac9d6aff1a5e778e45c51b4f3b6d787e0">LLVMUtil::isProgEntryFunction</a>(</div>
354
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; SVFUtil::cast&lt;Argument&gt;(val)-&gt;getParent());</div>
355
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div>
354
356
  </div><!-- fragment -->
355
357
  </div>
356
358
  </div>
@@ -402,16 +404,16 @@ Functions</h2></td></tr>
402
404
  </table>
403
405
  </div><div class="memdoc">
404
406
 
405
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01300">1300</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
406
- <div class="fragment"><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;{</div>
407
- <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
408
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; llvm::raw_string_ostream rawstr(str);</div>
409
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div>
410
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
411
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keywordflow">else</span></div>
412
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; llvm type is null&quot;</span>;</div>
413
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
414
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;}</div>
407
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01370">1370</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
408
+ <div class="fragment"><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;{</div>
409
+ <div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
410
+ <div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; llvm::raw_string_ostream rawstr(str);</div>
411
+ <div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div>
412
+ <div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
413
+ <div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="keywordflow">else</span></div>
414
+ <div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; llvm type is null&quot;</span>;</div>
415
+ <div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
416
+ <div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;}</div>
415
417
  </div><!-- fragment -->
416
418
  </div>
417
419
  </div>
@@ -431,16 +433,16 @@ Functions</h2></td></tr>
431
433
  </table>
432
434
  </div><div class="memdoc">
433
435
 
434
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01289">1289</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
435
- <div class="fragment"><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;{</div>
436
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
437
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; llvm::raw_string_ostream rawstr(str);</div>
438
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">if</span> (val)</div>
439
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; *val &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
440
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">else</span></div>
441
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; llvm Value is null&quot;</span>;</div>
442
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
443
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;}</div>
436
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01359">1359</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
437
+ <div class="fragment"><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;{</div>
438
+ <div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
439
+ <div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; llvm::raw_string_ostream rawstr(str);</div>
440
+ <div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="keywordflow">if</span> (val)</div>
441
+ <div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; *val &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
442
+ <div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keywordflow">else</span></div>
443
+ <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; llvm Value is null&quot;</span>;</div>
444
+ <div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
445
+ <div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;}</div>
444
446
  </div><!-- fragment -->
445
447
  </div>
446
448
  </div>
@@ -515,13 +517,13 @@ Functions</h2></td></tr>
515
517
  <p>Get num of BB's predecessors. </p>
516
518
  <p>Get the num of BB's predecessors </p>
517
519
 
518
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00406">406</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
519
- <div class="fragment"><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;{</div>
520
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div>
521
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), et = pred_end(BB); it != et; ++it)</div>
522
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; num++;</div>
523
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> num;</div>
524
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;}</div>
520
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00473">473</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
521
+ <div class="fragment"><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;{</div>
522
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div>
523
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), et = pred_end(BB); it != et; ++it)</div>
524
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; num++;</div>
525
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">return</span> num;</div>
526
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div>
525
527
  </div><!-- fragment -->
526
528
  </div>
527
529
  </div>
@@ -543,24 +545,24 @@ Functions</h2></td></tr>
543
545
 
544
546
  <p>Get all called funcions in a parent function. </p>
545
547
 
546
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00566">566</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
547
- <div class="fragment"><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;{</div>
548
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; std::vector&lt;const Function *&gt; calledFunctions;</div>
549
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> &amp;I : instructions(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
550
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div>
551
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callInst = SVFUtil::dyn_cast&lt;CallBase&gt;(&amp;I))</div>
552
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div>
553
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *calledFunction = callInst-&gt;getCalledFunction();</div>
554
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span> (calledFunction)</div>
555
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div>
556
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; calledFunctions.push_back(calledFunction);</div>
557
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; std::vector&lt;const Function *&gt; nestedCalledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">getCalledFunctions</a>(calledFunction);</div>
558
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; calledFunctions.insert(calledFunctions.end(), nestedCalledFunctions.begin(), nestedCalledFunctions.end());</div>
559
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div>
560
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; }</div>
561
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; }</div>
562
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> calledFunctions;</div>
563
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;}</div>
548
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00633">633</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
549
+ <div class="fragment"><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;{</div>
550
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; std::vector&lt;const Function *&gt; calledFunctions;</div>
551
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> &amp;I : instructions(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
552
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div>
553
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callInst = SVFUtil::dyn_cast&lt;CallBase&gt;(&amp;I))</div>
554
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; {</div>
555
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *calledFunction = callInst-&gt;getCalledFunction();</div>
556
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">if</span> (calledFunction)</div>
557
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div>
558
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; calledFunctions.push_back(calledFunction);</div>
559
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; std::vector&lt;const Function *&gt; nestedCalledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">getCalledFunctions</a>(calledFunction);</div>
560
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; calledFunctions.insert(calledFunctions.end(), nestedCalledFunctions.begin(), nestedCalledFunctions.end());</div>
561
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div>
562
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div>
563
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div>
564
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">return</span> calledFunctions;</div>
565
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;}</div>
564
566
  </div><!-- fragment -->
565
567
  </div>
566
568
  </div>
@@ -627,28 +629,28 @@ Functions</h2></td></tr>
627
629
  <p>get normal case value</p>
628
630
  <p>For larger number, we preserve case value just -1 now see more: <a href="https://github.com/SVF-tools/SVF/pull/992">https://github.com/SVF-tools/SVF/pull/992</a></p>
629
631
 
630
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01262">1262</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
631
- <div class="fragment"><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;{</div>
632
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* succBB = succBB2CondVal.first;</div>
633
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* caseValue = succBB2CondVal.second;</div>
634
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val;</div>
635
- <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="keywordflow">if</span> (caseValue == <span class="keyword">nullptr</span> || succBB == switchInst.getDefaultDest())</div>
636
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; {</div>
637
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; val = -1;</div>
638
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; }</div>
639
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">else</span></div>
640
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; {</div>
641
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">if</span> (caseValue-&gt;getBitWidth() &lt;= 64)</div>
642
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; {</div>
643
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; val = caseValue-&gt;getSExtValue();</div>
644
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; }</div>
645
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keywordflow">else</span></div>
646
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; {</div>
647
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; val = -1;</div>
648
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; }</div>
649
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; }</div>
650
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">return</span> val;</div>
651
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;}</div>
632
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01332">1332</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
633
+ <div class="fragment"><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;{</div>
634
+ <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* succBB = succBB2CondVal.first;</div>
635
+ <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* caseValue = succBB2CondVal.second;</div>
636
+ <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val;</div>
637
+ <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span> (caseValue == <span class="keyword">nullptr</span> || succBB == switchInst.getDefaultDest())</div>
638
+ <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; {</div>
639
+ <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; val = -1;</div>
640
+ <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; }</div>
641
+ <div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">else</span></div>
642
+ <div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; {</div>
643
+ <div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keywordflow">if</span> (caseValue-&gt;getBitWidth() &lt;= 64)</div>
644
+ <div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; {</div>
645
+ <div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; val = caseValue-&gt;getSExtValue();</div>
646
+ <div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; }</div>
647
+ <div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keywordflow">else</span></div>
648
+ <div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; {</div>
649
+ <div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; val = -1;</div>
650
+ <div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; }</div>
651
+ <div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; }</div>
652
+ <div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">return</span> val;</div>
653
+ <div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;}</div>
652
654
  </div><!-- fragment -->
653
655
  </div>
654
656
  </div>
@@ -668,23 +670,23 @@ Functions</h2></td></tr>
668
670
  </table>
669
671
  </div><div class="memdoc">
670
672
 
671
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01171">1171</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
672
- <div class="fragment"><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;{</div>
673
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> className = <span class="stringliteral">&quot;&quot;</span>;</div>
674
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">if</span> (!((SVFUtil::cast&lt;StructType&gt;(ty))-&gt;isLiteral()))</div>
675
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; {</div>
676
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> elemTypeName = ty-&gt;getStructName().str();</div>
677
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">if</span> (elemTypeName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>) == 0)</div>
678
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; {</div>
679
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; className = elemTypeName.substr(<a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>.size());</div>
680
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; }</div>
681
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemTypeName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>) == 0)</div>
682
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; {</div>
683
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; className = elemTypeName.substr(<a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>.size());</div>
684
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; }</div>
685
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; }</div>
686
- <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">return</span> className;</div>
687
- <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;}</div>
673
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01240">1240</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
674
+ <div class="fragment"><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;{</div>
675
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> className = <span class="stringliteral">&quot;&quot;</span>;</div>
676
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">if</span> (!((SVFUtil::cast&lt;StructType&gt;(ty))-&gt;isLiteral()))</div>
677
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; {</div>
678
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> elemTypeName = ty-&gt;getStructName().str();</div>
679
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="keywordflow">if</span> (elemTypeName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>) == 0)</div>
680
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; {</div>
681
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; className = elemTypeName.substr(<a class="code" href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a>.size());</div>
682
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div>
683
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemTypeName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>) == 0)</div>
684
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {</div>
685
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; className = elemTypeName.substr(<a class="code" href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a>.size());</div>
686
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; }</div>
687
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; }</div>
688
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">return</span> className;</div>
689
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;}</div>
688
690
  </div><!-- fragment -->
689
691
  </div>
690
692
  </div>
@@ -704,34 +706,35 @@ Functions</h2></td></tr>
704
706
  </table>
705
707
  </div><div class="memdoc">
706
708
 
707
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01189">1189</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
708
- <div class="fragment"><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;{</div>
709
- <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> thisPtrClassName = <span class="stringliteral">&quot;&quot;</span>;</div>
710
- <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a>* N = inst-&gt;getMetadata(<span class="stringliteral">&quot;VCallPtrType&quot;</span>))</div>
711
- <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; {</div>
712
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a>* mdstr = SVFUtil::cast&lt;MDString&gt;(N-&gt;getOperand(0).get());</div>
713
- <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; thisPtrClassName = mdstr-&gt;getString().str();</div>
714
- <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; }</div>
715
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (thisPtrClassName.size() == 0)</div>
716
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; {</div>
717
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisPtr = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">LLVMUtil::getVCallThisPtr</a>(inst);</div>
718
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast&lt;PointerType&gt;(thisPtr-&gt;getType()))</div>
719
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* st = SVFUtil::dyn_cast&lt;StructType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptrTy)))</div>
720
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; thisPtrClassName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">getClassNameFromType</a>(st);</div>
721
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; }</div>
722
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; </div>
723
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordtype">size_t</span> found = thisPtrClassName.find_last_not_of(<span class="stringliteral">&quot;0123456789&quot;</span>);</div>
724
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">if</span> (found != std::string::npos)</div>
725
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; {</div>
726
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="keywordflow">if</span> (found != thisPtrClassName.size() - 1 &amp;&amp;</div>
727
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; thisPtrClassName[found] == <span class="charliteral">&#39;.&#39;</span>)</div>
728
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; {</div>
729
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">return</span> thisPtrClassName.substr(0, found);</div>
730
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; }</div>
731
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; }</div>
732
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; </div>
733
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">return</span> thisPtrClassName;</div>
734
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;}</div>
709
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01258">1258</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
710
+ <div class="fragment"><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;{</div>
711
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> thisPtrClassName = <span class="stringliteral">&quot;&quot;</span>;</div>
712
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a>* N = inst-&gt;getMetadata(<span class="stringliteral">&quot;VCallPtrType&quot;</span>))</div>
713
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; {</div>
714
+ <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a>* mdstr = SVFUtil::cast&lt;MDString&gt;(N-&gt;getOperand(0).get());</div>
715
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; thisPtrClassName = mdstr-&gt;getString().str();</div>
716
+ <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; }</div>
717
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (thisPtrClassName.size() == 0)</div>
718
+ <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; {</div>
719
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisPtr = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">LLVMUtil::getVCallThisPtr</a>(inst);</div>
720
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast&lt;PointerType&gt;(thisPtr-&gt;getType()))</div>
721
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="comment">// TODO: getPtrElementType need type inference</span></div>
722
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* st = SVFUtil::dyn_cast&lt;StructType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptrTy)))</div>
723
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; thisPtrClassName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">getClassNameFromType</a>(st);</div>
724
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; }</div>
725
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; </div>
726
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordtype">size_t</span> found = thisPtrClassName.find_last_not_of(<span class="stringliteral">&quot;0123456789&quot;</span>);</div>
727
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">if</span> (found != std::string::npos)</div>
728
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; {</div>
729
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">if</span> (found != thisPtrClassName.size() - 1 &amp;&amp;</div>
730
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; thisPtrClassName[found] == <span class="charliteral">&#39;.&#39;</span>)</div>
731
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; {</div>
732
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">return</span> thisPtrClassName.substr(0, found);</div>
733
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; }</div>
734
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; }</div>
735
+ <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; </div>
736
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">return</span> thisPtrClassName;</div>
737
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;}</div>
735
738
  </div><!-- fragment -->
736
739
  </div>
737
740
  </div>
@@ -751,14 +754,14 @@ Functions</h2></td></tr>
751
754
  </table>
752
755
  </div><div class="memdoc">
753
756
 
754
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01063">1063</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
755
- <div class="fragment"><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;{</div>
756
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; assert((<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(fun) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(fun)) &amp;&amp;</div>
757
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="stringliteral">&quot;not a constructor?&quot;</span>);</div>
758
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; assert(fun-&gt;arg_size() &gt;= 1 &amp;&amp; <span class="stringliteral">&quot;argument size &gt;= 1?&quot;</span>);</div>
759
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* thisPtr = &amp;*(fun-&gt;arg_begin());</div>
760
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">return</span> thisPtr;</div>
761
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;}</div>
757
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01132">1132</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
758
+ <div class="fragment"><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;{</div>
759
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; assert((<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(fun) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(fun)) &amp;&amp;</div>
760
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="stringliteral">&quot;not a constructor?&quot;</span>);</div>
761
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; assert(fun-&gt;arg_size() &gt;= 1 &amp;&amp; <span class="stringliteral">&quot;argument size &gt;= 1?&quot;</span>);</div>
762
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* thisPtr = &amp;*(fun-&gt;arg_begin());</div>
763
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> thisPtr;</div>
764
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;}</div>
762
765
  </div><!-- fragment -->
763
766
  </div>
764
767
  </div>
@@ -786,13 +789,13 @@ Functions</h2></td></tr>
786
789
  </table>
787
790
  </div><div class="memdoc">
788
791
 
789
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00332">332</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
790
- <div class="fragment"><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;{</div>
791
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> *dl = <span class="keyword">nullptr</span>;</div>
792
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (dl == <span class="keyword">nullptr</span>)</div>
793
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; dl = <span class="keyword">new</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>(mod);</div>
794
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> dl;</div>
795
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;}</div>
792
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00337">337</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
793
+ <div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;{</div>
794
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> *dl = <span class="keyword">nullptr</span>;</div>
795
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">if</span> (dl == <span class="keyword">nullptr</span>)</div>
796
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; dl = <span class="keyword">new</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>(mod);</div>
797
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">return</span> dl;</div>
798
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;}</div>
796
799
  </div><!-- fragment -->
797
800
  </div>
798
801
  </div>
@@ -852,27 +855,28 @@ Functions</h2></td></tr>
852
855
  <p>Return the bitcast instruction right next to val, otherwise return nullptr </p>
853
856
  <p>If type is void* (i8*) and val is immediately used at a bitcast instruction</p>
854
857
 
855
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00349">349</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
856
- <div class="fragment"><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;{</div>
857
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> * <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast&lt;PointerType&gt;(val-&gt;getType());</div>
858
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;this value should be a pointer type!&quot;</span>);</div>
859
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">IntegerType</a> *IT = SVFUtil::dyn_cast&lt;IntegerType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)))</div>
860
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div>
861
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (IT-&gt;getBitWidth() == 8)</div>
862
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; {</div>
863
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *latestUse = <span class="keyword">nullptr</span>;</div>
864
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it : val-&gt;uses())</div>
865
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
866
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;BitCastInst&gt;(it.getUser()))</div>
867
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; latestUse = it.getUser();</div>
868
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">else</span></div>
869
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; latestUse = <span class="keyword">nullptr</span>;</div>
870
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
871
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">return</span> latestUse;</div>
872
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
873
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div>
874
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
875
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;}</div>
858
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00414">414</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
859
+ <div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;{</div>
860
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> * <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast&lt;PointerType&gt;(val-&gt;getType());</div>
861
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;this value should be a pointer type!&quot;</span>);</div>
862
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// TODO: getPtrElementType to be removed</span></div>
863
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">IntegerType</a> *IT = SVFUtil::dyn_cast&lt;IntegerType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)))</div>
864
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; {</div>
865
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (IT-&gt;getBitWidth() == 8)</div>
866
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div>
867
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *latestUse = <span class="keyword">nullptr</span>;</div>
868
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it : val-&gt;uses())</div>
869
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div>
870
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;BitCastInst&gt;(it.getUser()))</div>
871
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; latestUse = it.getUser();</div>
872
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">else</span></div>
873
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; latestUse = <span class="keyword">nullptr</span>;</div>
874
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div>
875
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> latestUse;</div>
876
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div>
877
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
878
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
879
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;}</div>
876
880
  </div><!-- fragment -->
877
881
  </div>
878
882
  </div>
@@ -892,46 +896,46 @@ Functions</h2></td></tr>
892
896
  </table>
893
897
  </div><div class="memdoc">
894
898
 
895
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00463">463</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
896
- <div class="fragment"><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;{</div>
897
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; std::vector&lt;std::string&gt; annotations;</div>
898
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// Get annotation variable</span></div>
899
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *glob = fun-&gt;getParent()-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
900
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob-&gt;hasInitializer())</div>
901
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> annotations;</div>
902
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; </div>
903
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *ca = SVFUtil::dyn_cast&lt;ConstantArray&gt;(glob-&gt;getInitializer());</div>
904
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
905
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">return</span> annotations;</div>
906
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; </div>
907
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; ca-&gt;getNumOperands(); ++i)</div>
908
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
909
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *structAn = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(ca-&gt;getOperand(i));</div>
910
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span>)</div>
911
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">continue</span>;</div>
912
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; </div>
913
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *expr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(0));</div>
914
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (expr == <span class="keyword">nullptr</span> || expr-&gt;getOpcode() != Instruction::BitCast || expr-&gt;getOperand(0) != fun)</div>
915
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">continue</span>;</div>
916
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; </div>
917
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *note = SVFUtil::cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(1));</div>
918
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">if</span> (note-&gt;getOpcode() != Instruction::GetElementPtr)</div>
919
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">continue</span>;</div>
920
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; </div>
921
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *annotateStr = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(note-&gt;getOperand(0));</div>
922
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">if</span> (annotateStr == <span class="keyword">nullptr</span> || !annotateStr-&gt;hasInitializer())</div>
923
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">continue</span>;</div>
924
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
925
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a> *data = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(annotateStr-&gt;getInitializer());</div>
926
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (data-&gt;isString())</div>
927
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; {</div>
928
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> annotation = data-&gt;getAsString().str();</div>
929
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (!annotation.empty())</div>
930
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; annotations.push_back(annotation);</div>
931
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</div>
932
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; }</div>
933
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span> annotations;</div>
934
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;}</div>
899
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00530">530</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
900
+ <div class="fragment"><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;{</div>
901
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; std::vector&lt;std::string&gt; annotations;</div>
902
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// Get annotation variable</span></div>
903
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *glob = fun-&gt;getParent()-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
904
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob-&gt;hasInitializer())</div>
905
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> annotations;</div>
906
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; </div>
907
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *ca = SVFUtil::dyn_cast&lt;ConstantArray&gt;(glob-&gt;getInitializer());</div>
908
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
909
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> annotations;</div>
910
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; </div>
911
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; ca-&gt;getNumOperands(); ++i)</div>
912
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
913
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *structAn = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(ca-&gt;getOperand(i));</div>
914
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span>)</div>
915
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">continue</span>;</div>
916
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; </div>
917
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *expr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(0));</div>
918
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (expr == <span class="keyword">nullptr</span> || expr-&gt;getOpcode() != Instruction::BitCast || expr-&gt;getOperand(0) != fun)</div>
919
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">continue</span>;</div>
920
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; </div>
921
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *note = SVFUtil::cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(1));</div>
922
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (note-&gt;getOpcode() != Instruction::GetElementPtr)</div>
923
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">continue</span>;</div>
924
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
925
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *annotateStr = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(note-&gt;getOperand(0));</div>
926
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (annotateStr == <span class="keyword">nullptr</span> || !annotateStr-&gt;hasInitializer())</div>
927
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">continue</span>;</div>
928
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
929
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a> *data = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(annotateStr-&gt;getInitializer());</div>
930
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">if</span> (data-&gt;isString())</div>
931
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div>
932
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> annotation = data-&gt;getAsString().str();</div>
933
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (!annotation.empty())</div>
934
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; annotations.push_back(annotation);</div>
935
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; }</div>
936
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div>
937
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">return</span> annotations;</div>
938
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;}</div>
935
939
  </div><!-- fragment -->
936
940
  </div>
937
941
  </div>
@@ -961,10 +965,10 @@ Functions</h2></td></tr>
961
965
 
962
966
  <p>Get the corresponding Function based on its name. </p>
963
967
 
964
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00408">408</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
965
- <div class="fragment"><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;{</div>
966
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">return</span> LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div>
967
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;}</div>
968
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00414">414</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
969
+ <div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;{</div>
970
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">return</span> LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div>
971
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;}</div>
968
972
  </div><!-- fragment -->
969
973
  </div>
970
974
  </div>
@@ -984,16 +988,16 @@ Functions</h2></td></tr>
984
988
  </table>
985
989
  </div><div class="memdoc">
986
990
 
987
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01218">1218</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
988
- <div class="fragment"><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;{</div>
989
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName;</div>
990
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a>* N = inst-&gt;getMetadata(<span class="stringliteral">&quot;VCallFunName&quot;</span>))</div>
991
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; {</div>
992
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a>* mdstr = SVFUtil::cast&lt;MDString&gt;(N-&gt;getOperand(0).get());</div>
993
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; funName = mdstr-&gt;getString().str();</div>
994
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; }</div>
995
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <span class="keywordflow">return</span> funName;</div>
996
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;}</div>
991
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01288">1288</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
992
+ <div class="fragment"><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;{</div>
993
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName;</div>
994
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a>* N = inst-&gt;getMetadata(<span class="stringliteral">&quot;VCallFunName&quot;</span>))</div>
995
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; {</div>
996
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">MDString</a>* mdstr = SVFUtil::cast&lt;MDString&gt;(N-&gt;getOperand(0).get());</div>
997
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; funName = mdstr-&gt;getString().str();</div>
998
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; }</div>
999
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">return</span> funName;</div>
1000
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;}</div>
997
1001
  </div><!-- fragment -->
998
1002
  </div>
999
1003
  </div>
@@ -1086,15 +1090,15 @@ Functions</h2></td></tr>
1086
1090
 
1087
1091
  <p>find the unique defined global across multiple modules </p>
1088
1092
 
1089
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00421">421</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
1090
- <div class="fragment"><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;{</div>
1091
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* gvar = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(val))</div>
1092
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div>
1093
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">if</span> (LLVMModuleSet::getLLVMModuleSet()-&gt;hasGlobalRep(gvar))</div>
1094
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; val = LLVMModuleSet::getLLVMModuleSet()-&gt;getGlobalRep(gvar);</div>
1095
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
1096
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> val;</div>
1097
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;}</div>
1093
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00427">427</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
1094
+ <div class="fragment"><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;{</div>
1095
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* gvar = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(val))</div>
1096
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; {</div>
1097
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (LLVMModuleSet::getLLVMModuleSet()-&gt;hasGlobalRep(gvar))</div>
1098
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; val = LLVMModuleSet::getLLVMModuleSet()-&gt;getGlobalRep(gvar);</div>
1099
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div>
1100
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">return</span> val;</div>
1101
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;}</div>
1098
1102
  </div><!-- fragment -->
1099
1103
  </div>
1100
1104
  </div>
@@ -1193,30 +1197,30 @@ Functions</h2></td></tr>
1193
1197
 
1194
1198
  <p>Get the next instructions following control flow. </p>
1195
1199
 
1196
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00807">807</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1197
- <div class="fragment"><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div>
1198
- <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">if</span> (!curInst-&gt;isTerminator())</div>
1199
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; {</div>
1200
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = curInst-&gt;getNextNode();</div>
1201
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1202
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1203
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">else</span></div>
1204
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; instList.push_back(nextInst);</div>
1205
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
1206
- <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">else</span></div>
1207
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; {</div>
1208
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *BB = curInst-&gt;getParent();</div>
1209
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1210
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
1211
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {</div>
1212
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &amp;((*it)-&gt;front());</div>
1213
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1214
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1215
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">else</span></div>
1216
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; instList.push_back(nextInst);</div>
1217
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
1218
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div>
1219
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;}</div>
1200
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00874">874</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1201
+ <div class="fragment"><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;{</div>
1202
+ <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">if</span> (!curInst-&gt;isTerminator())</div>
1203
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; {</div>
1204
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = curInst-&gt;getNextNode();</div>
1205
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1206
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1207
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordflow">else</span></div>
1208
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; instList.push_back(nextInst);</div>
1209
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; }</div>
1210
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keywordflow">else</span></div>
1211
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; {</div>
1212
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *BB = curInst-&gt;getParent();</div>
1213
+ <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1214
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
1215
+ <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; {</div>
1216
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &amp;((*it)-&gt;front());</div>
1217
+ <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1218
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1219
+ <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keywordflow">else</span></div>
1220
+ <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; instList.push_back(nextInst);</div>
1221
+ <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; }</div>
1222
+ <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; }</div>
1223
+ <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;}</div>
1220
1224
  </div><!-- fragment -->
1221
1225
  </div>
1222
1226
  </div>
@@ -1248,32 +1252,114 @@ Functions</h2></td></tr>
1248
1252
 
1249
1253
  <p>Get the next instructions following control flow. </p>
1250
1254
 
1251
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00287">287</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1252
- <div class="fragment"><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div>
1253
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (!curInst-&gt;isTerminator())</div>
1254
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
1255
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = curInst-&gt;getNextNode();</div>
1256
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfNextInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(nextInst);</div>
1257
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1258
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1259
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">else</span></div>
1260
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; instList.push_back(svfNextInst);</div>
1261
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
1262
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span></div>
1263
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
1264
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst-&gt;getParent();</div>
1265
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1266
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
1267
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
1268
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &amp;((*it)-&gt;front());</div>
1269
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfNextInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(nextInst);</div>
1270
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1271
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1272
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span></div>
1273
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; instList.push_back(svfNextInst);</div>
1274
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
1275
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
1276
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div>
1255
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00352">352</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1256
+ <div class="fragment"><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;{</div>
1257
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (!curInst-&gt;isTerminator())</div>
1258
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div>
1259
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = curInst-&gt;getNextNode();</div>
1260
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfNextInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(nextInst);</div>
1261
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1262
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1263
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">else</span></div>
1264
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; instList.push_back(svfNextInst);</div>
1265
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
1266
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">else</span></div>
1267
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
1268
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst-&gt;getParent();</div>
1269
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1270
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> it = succ_begin(BB), ie = succ_end(BB); it != ie; ++it)</div>
1271
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div>
1272
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* nextInst = &amp;((*it)-&gt;front());</div>
1273
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfNextInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(nextInst);</div>
1274
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(nextInst))</div>
1275
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">getNextInsts</a>(nextInst, instList);</div>
1276
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">else</span></div>
1277
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; instList.push_back(svfNextInst);</div>
1278
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
1279
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
1280
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;}</div>
1281
+ </div><!-- fragment -->
1282
+ </div>
1283
+ </div>
1284
+ <a id="a4b5d4c7ca2c580ace7305bfed58ffce8"></a>
1285
+ <h2 class="memtitle"><span class="permalink"><a href="#a4b5d4c7ca2c580ace7305bfed58ffce8">&#9670;&nbsp;</a></span>getPointeeType()</h2>
1286
+
1287
+ <div class="memitem">
1288
+ <div class="memproto">
1289
+ <table class="memname">
1290
+ <tr>
1291
+ <td class="memname"><a class="el" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * SVF::LLVMUtil::getPointeeType </td>
1292
+ <td>(</td>
1293
+ <td class="paramtype">const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *&#160;</td>
1294
+ <td class="paramname"><em>value</em></td><td>)</td>
1295
+ <td></td>
1296
+ </tr>
1297
+ </table>
1298
+ </div><div class="memdoc">
1299
+ <p>Infer type based on llvm value, this is for the migration to opaque pointer please refer to: <a href="https://llvm.org/docs/OpaquePointers.html#migration-instructions">https://llvm.org/docs/OpaquePointers.html#migration-instructions</a> </p>
1300
+
1301
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00246">246</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1302
+ <div class="fragment"><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;{</div>
1303
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;value cannot be nullptr!&quot;</span>);</div>
1304
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> *loadInst = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1305
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div>
1306
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// get the pointee type of rhs based on lhs</span></div>
1307
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// e.g., for `%lhs = load i64, ptr %rhs`, we return i64</span></div>
1308
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">return</span> loadInst-&gt;getType();</div>
1309
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div>
1310
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> *storeInst = SVFUtil::dyn_cast&lt;StoreInst&gt;(value))</div>
1311
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div>
1312
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// get the pointee type of op1 based on op0</span></div>
1313
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// e.g., for `store i64 %op0, ptr %op1`, we return i64</span></div>
1314
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> storeInst-&gt;getValueOperand()-&gt;getType();</div>
1315
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div>
1316
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> *gepInst = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(value))</div>
1317
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
1318
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// get the source element type of a gep instruction</span></div>
1319
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo</span></div>
1320
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> gepInst-&gt;getSourceElementType();</div>
1321
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
1322
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">GEPOperator</a>* gepOperator = SVFUtil::dyn_cast&lt;GEPOperator&gt;(value))</div>
1323
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
1324
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// get the source element type of a gep instruction</span></div>
1325
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// e.g., for `gep %struct.foo, ptr %base, i64 0`, we return struct.foo</span></div>
1326
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span> gepOperator-&gt;getSourceElementType();</div>
1327
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
1328
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> *callInst = SVFUtil::dyn_cast&lt;CallInst&gt;(value))</div>
1329
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div>
1330
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// get the pointee type of return value</span></div>
1331
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64</span></div>
1332
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> callInst-&gt;getFunctionType();</div>
1333
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
1334
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a> *callBase = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1335
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div>
1336
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// get the pointee type of return value</span></div>
1337
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64</span></div>
1338
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> callBase-&gt;getFunctionType();</div>
1339
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
1340
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> *allocaInst = SVFUtil::dyn_cast&lt;AllocaInst&gt;(value))</div>
1341
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
1342
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// get the type of the allocated memory</span></div>
1343
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// e.g., for `%retval = alloca i64, align 4`, we return i64</span></div>
1344
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> allocaInst-&gt;getAllocatedType();</div>
1345
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div>
1346
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *globalVar = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(value))</div>
1347
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div>
1348
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// get the pointee type of the global pointer</span></div>
1349
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> globalVar-&gt;getValueType();</div>
1350
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
1351
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(value))</div>
1352
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
1353
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// get the pointee type of return value</span></div>
1354
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// e.g., for `%call = call ptr @_Znwm(i64 noundef 8)`, we return i64</span></div>
1355
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> func-&gt;getFunctionType();</div>
1356
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
1357
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">else</span></div>
1358
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
1359
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159">LLVMUtil::dumpValue</a>(value) + <span class="stringliteral">&quot;Unknown llvm Type, cannot get Ptr Element Type&quot;</span>).c_str());</div>
1360
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; abort();</div>
1361
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
1362
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div>
1277
1363
  </div><!-- fragment -->
1278
1364
  </div>
1279
1365
  </div>
@@ -1305,30 +1391,30 @@ Functions</h2></td></tr>
1305
1391
 
1306
1392
  <p>Get the previous instructions following control flow. </p>
1307
1393
 
1308
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00834">834</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1309
- <div class="fragment"><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;{</div>
1310
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">if</span> (curInst != &amp;(curInst-&gt;getParent()-&gt;front()))</div>
1311
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {</div>
1312
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = curInst-&gt;getPrevNode();</div>
1313
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1314
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1315
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">else</span></div>
1316
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; instList.push_back(prevInst);</div>
1317
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
1318
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">else</span></div>
1319
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div>
1320
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *BB = curInst-&gt;getParent();</div>
1321
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1322
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
1323
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {</div>
1324
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = &amp;((*it)-&gt;back());</div>
1325
- <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1326
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1327
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">else</span></div>
1328
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; instList.push_back(prevInst);</div>
1329
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; }</div>
1330
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; }</div>
1331
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;}</div>
1394
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00901">901</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1395
+ <div class="fragment"><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;{</div>
1396
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (curInst != &amp;(curInst-&gt;getParent()-&gt;front()))</div>
1397
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; {</div>
1398
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = curInst-&gt;getPrevNode();</div>
1399
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1400
+ <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1401
+ <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">else</span></div>
1402
+ <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; instList.push_back(prevInst);</div>
1403
+ <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; }</div>
1404
+ <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">else</span></div>
1405
+ <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; {</div>
1406
+ <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *BB = curInst-&gt;getParent();</div>
1407
+ <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1408
+ <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
1409
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; {</div>
1410
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = &amp;((*it)-&gt;back());</div>
1411
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1412
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1413
+ <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">else</span></div>
1414
+ <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; instList.push_back(prevInst);</div>
1415
+ <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; }</div>
1416
+ <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div>
1417
+ <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;}</div>
1332
1418
  </div><!-- fragment -->
1333
1419
  </div>
1334
1420
  </div>
@@ -1360,33 +1446,33 @@ Functions</h2></td></tr>
1360
1446
 
1361
1447
  <p>Get the previous instructions following control flow. </p>
1362
1448
 
1363
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00316">316</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1364
- <div class="fragment"><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;{</div>
1365
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
1366
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">if</span> (curInst != &amp;(curInst-&gt;getParent()-&gt;front()))</div>
1367
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div>
1368
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = curInst-&gt;getPrevNode();</div>
1369
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(prevInst);</div>
1370
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1371
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1372
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">else</span></div>
1373
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; instList.push_back(svfPrevInst);</div>
1374
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div>
1375
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">else</span></div>
1376
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
1377
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst-&gt;getParent();</div>
1378
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1379
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
1380
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
1381
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = &amp;((*it)-&gt;back());</div>
1382
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(prevInst);</div>
1383
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1384
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1385
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">else</span></div>
1386
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; instList.push_back(svfPrevInst);</div>
1387
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div>
1388
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
1389
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;}</div>
1449
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00381">381</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1450
+ <div class="fragment"><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div>
1451
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
1452
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (curInst != &amp;(curInst-&gt;getParent()-&gt;front()))</div>
1453
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
1454
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = curInst-&gt;getPrevNode();</div>
1455
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(prevInst);</div>
1456
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1457
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1458
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">else</span></div>
1459
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; instList.push_back(svfPrevInst);</div>
1460
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
1461
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">else</span></div>
1462
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
1463
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB = curInst-&gt;getParent();</div>
1464
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// Visit all successors of BB in the CFG</span></div>
1465
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> it = pred_begin(BB), ie = pred_end(BB); it != ie; ++it)</div>
1466
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div>
1467
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = &amp;((*it)-&gt;back());</div>
1468
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(prevInst);</div>
1469
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">LLVMUtil::isIntrinsicInst</a>(prevInst))</div>
1470
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">getPrevInsts</a>(prevInst, instList);</div>
1471
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">else</span></div>
1472
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; instList.push_back(svfPrevInst);</div>
1473
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
1474
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div>
1475
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;}</div>
1390
1476
  </div><!-- fragment -->
1391
1477
  </div>
1392
1478
  </div>
@@ -1493,29 +1579,30 @@ Functions</h2></td></tr>
1493
1579
 
1494
1580
  <p>Get the reference type of heap/static object from an allocation site. </p>
1495
1581
 
1496
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00131">131</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
1497
- <div class="fragment"><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
1498
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *refType = <span class="keyword">nullptr</span>;</div>
1499
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> SVFInstruction* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1500
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; CallSite svfcs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(svfcall);</div>
1501
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Case 1: heap object held by *argument, we should get its element type.</span></div>
1502
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVFUtil::isHeapAllocExtCallViaArg</a>(svfcs))</div>
1503
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div>
1504
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordtype">int</span> argPos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVFUtil::getHeapAllocHoldingArgPosition</a>(svfcs);</div>
1505
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* arg = cs-&gt;getArgOperand(argPos);</div>
1506
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *argType = SVFUtil::dyn_cast&lt;PointerType&gt;(arg-&gt;getType()))</div>
1507
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; refType = SVFUtil::dyn_cast&lt;PointerType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(argType));</div>
1508
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
1509
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// Case 2: heap object held by return value.</span></div>
1510
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">else</span></div>
1511
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div>
1512
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; assert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfcs)</div>
1513
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; &amp;&amp; <span class="stringliteral">&quot;Must be heap alloc via ret, or static allocation site&quot;</span>);</div>
1514
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; refType = SVFUtil::dyn_cast&lt;PointerType&gt;(cs-&gt;getType());</div>
1515
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
1516
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; assert(refType &amp;&amp; <span class="stringliteral">&quot;Allocated object must be held by a pointer-typed value.&quot;</span>);</div>
1517
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> refType;</div>
1518
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div>
1582
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00135">135</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
1583
+ <div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
1584
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *refType = <span class="keyword">nullptr</span>;</div>
1585
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> SVFInstruction* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1586
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; CallSite svfcs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(svfcall);</div>
1587
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// Case 1: heap object held by *argument, we should get its element type.</span></div>
1588
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVFUtil::isHeapAllocExtCallViaArg</a>(svfcs))</div>
1589
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
1590
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">int</span> argPos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVFUtil::getHeapAllocHoldingArgPosition</a>(svfcs);</div>
1591
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* arg = cs-&gt;getArgOperand(argPos);</div>
1592
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *argType = SVFUtil::dyn_cast&lt;PointerType&gt;(arg-&gt;getType()))</div>
1593
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// TODO: getPtrElementType need type inference</span></div>
1594
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; refType = SVFUtil::dyn_cast&lt;PointerType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(argType));</div>
1595
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
1596
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Case 2: heap object held by return value.</span></div>
1597
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">else</span></div>
1598
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
1599
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; assert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfcs)</div>
1600
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; &amp;&amp; <span class="stringliteral">&quot;Must be heap alloc via ret, or static allocation site&quot;</span>);</div>
1601
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; refType = SVFUtil::dyn_cast&lt;PointerType&gt;(cs-&gt;getType());</div>
1602
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
1603
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; assert(refType &amp;&amp; <span class="stringliteral">&quot;Allocated object must be held by a pointer-typed value.&quot;</span>);</div>
1604
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> refType;</div>
1605
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
1519
1606
  </div><!-- fragment -->
1520
1607
  </div>
1521
1608
  </div>
@@ -1543,11 +1630,11 @@ Functions</h2></td></tr>
1543
1630
  </table>
1544
1631
  </div><div class="memdoc">
1545
1632
 
1546
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00155">155</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
1547
- <div class="fragment"><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div>
1548
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">getLLVMCallSite</a>(inst);</div>
1549
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa81614cdb6a2a912638d5dc980480af7">getRefTypeOfHeapAllocOrStatic</a>(cs);</div>
1550
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div>
1633
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00160">160</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
1634
+ <div class="fragment"><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div>
1635
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">getLLVMCallSite</a>(inst);</div>
1636
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa81614cdb6a2a912638d5dc980480af7">getRefTypeOfHeapAllocOrStatic</a>(cs);</div>
1637
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div>
1551
1638
  </div><!-- fragment -->
1552
1639
  </div>
1553
1640
  </div>
@@ -1568,105 +1655,105 @@ Functions</h2></td></tr>
1568
1655
  </div><div class="memdoc">
1569
1656
  <p>Get the meta data (line number and file name) info of a LLVM value </p>
1570
1657
 
1571
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00686">686</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1572
- <div class="fragment"><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;{</div>
1573
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span>(val==<span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="stringliteral">&quot;{ empty val }&quot;</span>;</div>
1574
- <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; </div>
1575
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
1576
- <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; std::stringstream rawstr(str);</div>
1577
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div>
1578
- <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
1579
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = SVFUtil::dyn_cast&lt;Instruction&gt;(val))</div>
1580
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div>
1581
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;AllocaInst&gt;(inst))</div>
1582
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; {</div>
1583
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">for</span> (llvm::DbgInfoIntrinsic *DII : FindDbgAddrUses(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>*<span class="keyword">&gt;</span>(inst)))</div>
1584
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
1585
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">if</span> (llvm::DbgDeclareInst *DDI = SVFUtil::dyn_cast&lt;llvm::DbgDeclareInst&gt;(DII))</div>
1586
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div>
1587
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; llvm::DIVariable *DIVar = SVFUtil::cast&lt;llvm::DIVariable&gt;(DDI-&gt;getVariable());</div>
1588
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; DIVar-&gt;getLine() &lt;&lt; <span class="stringliteral">&quot;, \&quot;fl\&quot;: \&quot;&quot;</span> &lt;&lt; DIVar-&gt;getFilename().str() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1589
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">break</span>;</div>
1590
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; }</div>
1591
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div>
1592
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div>
1593
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *N = inst-&gt;getMetadata(<span class="stringliteral">&quot;dbg&quot;</span>)) <span class="comment">// Here I is an LLVM instruction</span></div>
1594
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div>
1595
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; llvm::DILocation* Loc = SVFUtil::cast&lt;llvm::DILocation&gt;(N); <span class="comment">// DILocation is in DebugInfo.h</span></div>
1596
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordtype">unsigned</span> Line = Loc-&gt;getLine();</div>
1597
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordtype">unsigned</span> Column = Loc-&gt;getColumn();</div>
1598
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> File = Loc-&gt;getFilename().str();</div>
1599
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="comment">//StringRef Dir = Loc.getDirectory();</span></div>
1600
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span>(File.empty() || Line == 0)</div>
1601
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; {</div>
1602
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keyword">auto</span> inlineLoc = Loc-&gt;getInlinedAt();</div>
1603
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">if</span>(inlineLoc)</div>
1604
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; {</div>
1605
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; Line = inlineLoc-&gt;getLine();</div>
1606
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; Column = inlineLoc-&gt;getColumn();</div>
1607
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; File = inlineLoc-&gt;getFilename().str();</div>
1608
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div>
1609
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; }</div>
1610
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; Line &lt;&lt; <span class="stringliteral">&quot;, \&quot;cl\&quot;: &quot;</span> &lt;&lt; Column &lt;&lt; <span class="stringliteral">&quot;, \&quot;fl\&quot;: \&quot;&quot;</span> &lt;&lt; File &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1611
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; }</div>
1612
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div>
1613
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* argument = SVFUtil::dyn_cast&lt;Argument&gt;(val))</div>
1614
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; {</div>
1615
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (argument-&gt;getArgNo()%10 == 1)</div>
1616
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;st&quot;</span>;</div>
1617
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argument-&gt;getArgNo()%10 == 2)</div>
1618
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;nd&quot;</span>;</div>
1619
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argument-&gt;getArgNo()%10 == 3)</div>
1620
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;rd&quot;</span>;</div>
1621
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">else</span></div>
1622
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;th&quot;</span>;</div>
1623
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; arg &quot;</span> &lt;&lt; argument-&gt;getParent()-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div>
1624
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">getSourceLocOfFunction</a>(argument-&gt;getParent());</div>
1625
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div>
1626
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* gvar = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(val))</div>
1627
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div>
1628
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;Glob &quot;</span>;</div>
1629
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a>* CU_Nodes = gvar-&gt;getParent()-&gt;getNamedMetadata(<span class="stringliteral">&quot;llvm.dbg.cu&quot;</span>);</div>
1630
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">if</span>(CU_Nodes)</div>
1631
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div>
1632
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = CU_Nodes-&gt;getNumOperands(); i != e; ++i)</div>
1633
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; {</div>
1634
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; llvm::DICompileUnit *CUNode = SVFUtil::cast&lt;llvm::DICompileUnit&gt;(CU_Nodes-&gt;getOperand(i));</div>
1635
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">for</span> (llvm::DIGlobalVariableExpression *GV : CUNode-&gt;getGlobalVariables())</div>
1636
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div>
1637
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; llvm::DIGlobalVariable * DGV = GV-&gt;getVariable();</div>
1638
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; </div>
1639
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">if</span>(DGV-&gt;getName() == gvar-&gt;getName())</div>
1640
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; {</div>
1641
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; DGV-&gt;getLine() &lt;&lt; <span class="stringliteral">&quot;, \&quot;fl\&quot;: \&quot;&quot;</span> &lt;&lt; DGV-&gt;getFilename().str() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1642
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div>
1643
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; </div>
1644
- <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; }</div>
1645
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; }</div>
1646
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; }</div>
1647
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; }</div>
1648
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(val))</div>
1649
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; {</div>
1650
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; rawstr &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">getSourceLocOfFunction</a>(func);</div>
1651
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div>
1652
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = SVFUtil::dyn_cast&lt;BasicBlock&gt;(val))</div>
1653
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; {</div>
1654
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;basic block\&quot;: &quot;</span> &lt;&lt; bb-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;, \&quot;location\&quot;: &quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">getSourceLoc</a>(bb-&gt;getFirstNonPHI());</div>
1655
- <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div>
1656
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
1657
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; {</div>
1658
- <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;constant data&quot;</span>;</div>
1659
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
1660
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">else</span></div>
1661
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div>
1662
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;N/A&quot;</span>;</div>
1663
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div>
1664
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; }&quot;</span>;</div>
1665
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; </div>
1666
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">if</span>(rawstr.str()==<span class="stringliteral">&quot;{ }&quot;</span>)</div>
1667
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
1668
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
1669
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;}</div>
1658
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00753">753</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1659
+ <div class="fragment"><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;{</div>
1660
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">if</span>(val==<span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="stringliteral">&quot;{ empty val }&quot;</span>;</div>
1661
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; </div>
1662
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
1663
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; std::stringstream rawstr(str);</div>
1664
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div>
1665
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; </div>
1666
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = SVFUtil::dyn_cast&lt;Instruction&gt;(val))</div>
1667
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div>
1668
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;AllocaInst&gt;(inst))</div>
1669
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; {</div>
1670
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">for</span> (llvm::DbgInfoIntrinsic *DII : FindDbgAddrUses(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>*<span class="keyword">&gt;</span>(inst)))</div>
1671
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div>
1672
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">if</span> (llvm::DbgDeclareInst *DDI = SVFUtil::dyn_cast&lt;llvm::DbgDeclareInst&gt;(DII))</div>
1673
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; {</div>
1674
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; llvm::DIVariable *DIVar = SVFUtil::cast&lt;llvm::DIVariable&gt;(DDI-&gt;getVariable());</div>
1675
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; DIVar-&gt;getLine() &lt;&lt; <span class="stringliteral">&quot;, \&quot;fl\&quot;: \&quot;&quot;</span> &lt;&lt; DIVar-&gt;getFilename().str() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1676
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">break</span>;</div>
1677
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; }</div>
1678
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; }</div>
1679
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
1680
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *N = inst-&gt;getMetadata(<span class="stringliteral">&quot;dbg&quot;</span>)) <span class="comment">// Here I is an LLVM instruction</span></div>
1681
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div>
1682
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; llvm::DILocation* Loc = SVFUtil::cast&lt;llvm::DILocation&gt;(N); <span class="comment">// DILocation is in DebugInfo.h</span></div>
1683
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordtype">unsigned</span> Line = Loc-&gt;getLine();</div>
1684
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordtype">unsigned</span> Column = Loc-&gt;getColumn();</div>
1685
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> File = Loc-&gt;getFilename().str();</div>
1686
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="comment">//StringRef Dir = Loc.getDirectory();</span></div>
1687
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span>(File.empty() || Line == 0)</div>
1688
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
1689
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">auto</span> inlineLoc = Loc-&gt;getInlinedAt();</div>
1690
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">if</span>(inlineLoc)</div>
1691
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; {</div>
1692
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; Line = inlineLoc-&gt;getLine();</div>
1693
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; Column = inlineLoc-&gt;getColumn();</div>
1694
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; File = inlineLoc-&gt;getFilename().str();</div>
1695
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div>
1696
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; }</div>
1697
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; Line &lt;&lt; <span class="stringliteral">&quot;, \&quot;cl\&quot;: &quot;</span> &lt;&lt; Column &lt;&lt; <span class="stringliteral">&quot;, \&quot;fl\&quot;: \&quot;&quot;</span> &lt;&lt; File &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1698
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; }</div>
1699
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div>
1700
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* argument = SVFUtil::dyn_cast&lt;Argument&gt;(val))</div>
1701
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
1702
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">if</span> (argument-&gt;getArgNo()%10 == 1)</div>
1703
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;st&quot;</span>;</div>
1704
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argument-&gt;getArgNo()%10 == 2)</div>
1705
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;nd&quot;</span>;</div>
1706
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argument-&gt;getArgNo()%10 == 3)</div>
1707
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;rd&quot;</span>;</div>
1708
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">else</span></div>
1709
+ <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; rawstr &lt;&lt; argument-&gt;getArgNo() &lt;&lt; <span class="stringliteral">&quot;th&quot;</span>;</div>
1710
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; arg &quot;</span> &lt;&lt; argument-&gt;getParent()-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div>
1711
+ <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">getSourceLocOfFunction</a>(argument-&gt;getParent());</div>
1712
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; }</div>
1713
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* gvar = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(val))</div>
1714
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; {</div>
1715
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;Glob &quot;</span>;</div>
1716
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a>* CU_Nodes = gvar-&gt;getParent()-&gt;getNamedMetadata(<span class="stringliteral">&quot;llvm.dbg.cu&quot;</span>);</div>
1717
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span>(CU_Nodes)</div>
1718
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; {</div>
1719
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0, e = CU_Nodes-&gt;getNumOperands(); i != e; ++i)</div>
1720
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; {</div>
1721
+ <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; llvm::DICompileUnit *CUNode = SVFUtil::cast&lt;llvm::DICompileUnit&gt;(CU_Nodes-&gt;getOperand(i));</div>
1722
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">for</span> (llvm::DIGlobalVariableExpression *GV : CUNode-&gt;getGlobalVariables())</div>
1723
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; {</div>
1724
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; llvm::DIGlobalVariable * DGV = GV-&gt;getVariable();</div>
1725
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; </div>
1726
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">if</span>(DGV-&gt;getName() == gvar-&gt;getName())</div>
1727
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {</div>
1728
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; DGV-&gt;getLine() &lt;&lt; <span class="stringliteral">&quot;, \&quot;fl\&quot;: \&quot;&quot;</span> &lt;&lt; DGV-&gt;getFilename().str() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1729
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; }</div>
1730
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; </div>
1731
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</div>
1732
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; }</div>
1733
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
1734
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div>
1735
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(val))</div>
1736
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div>
1737
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; rawstr &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">getSourceLocOfFunction</a>(func);</div>
1738
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div>
1739
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = SVFUtil::dyn_cast&lt;BasicBlock&gt;(val))</div>
1740
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; {</div>
1741
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;basic block\&quot;: &quot;</span> &lt;&lt; bb-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;, \&quot;location\&quot;: &quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">getSourceLoc</a>(bb-&gt;getFirstNonPHI());</div>
1742
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; }</div>
1743
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
1744
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div>
1745
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;constant data&quot;</span>;</div>
1746
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div>
1747
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">else</span></div>
1748
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; {</div>
1749
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;N/A&quot;</span>;</div>
1750
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div>
1751
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; }&quot;</span>;</div>
1752
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; </div>
1753
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">if</span>(rawstr.str()==<span class="stringliteral">&quot;{ }&quot;</span>)</div>
1754
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
1755
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
1756
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;}</div>
1670
1757
  </div><!-- fragment -->
1671
1758
  </div>
1672
1759
  </div>
@@ -1687,21 +1774,21 @@ Functions</h2></td></tr>
1687
1774
  </div><div class="memdoc">
1688
1775
  <p>Get source code line number of a function according to debug info </p>
1689
1776
 
1690
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00790">790</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1691
- <div class="fragment"><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;{</div>
1692
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
1693
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; std::stringstream rawstr(str);</div>
1694
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">/*</span></div>
1695
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment"> * https://reviews.llvm.org/D18074?id=50385</span></div>
1696
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment"> * looks like the relevant</span></div>
1697
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="comment"> */</span></div>
1698
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">llvm::DISubprogram</a> *SP = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getSubprogram())</div>
1699
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; {</div>
1700
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">if</span> (SP-&gt;describes(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
1701
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; SP-&gt;getLine() &lt;&lt; <span class="stringliteral">&quot;, \&quot;file\&quot;: \&quot;&quot;</span> &lt;&lt; SP-&gt;getFilename().str() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1702
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; }</div>
1703
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
1704
- <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;}</div>
1777
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00857">857</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1778
+ <div class="fragment"><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;{</div>
1779
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
1780
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; std::stringstream rawstr(str);</div>
1781
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">/*</span></div>
1782
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="comment"> * https://reviews.llvm.org/D18074?id=50385</span></div>
1783
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment"> * looks like the relevant</span></div>
1784
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment"> */</span></div>
1785
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a89c7208bfc0b57873dfa574f52050295">llvm::DISubprogram</a> *SP = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getSubprogram())</div>
1786
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div>
1787
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keywordflow">if</span> (SP-&gt;describes(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
1788
+ <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;\&quot;ln\&quot;: &quot;</span> &lt;&lt; SP-&gt;getLine() &lt;&lt; <span class="stringliteral">&quot;, \&quot;file\&quot;: \&quot;&quot;</span> &lt;&lt; SP-&gt;getFilename().str() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
1789
+ <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
1790
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
1791
+ <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;}</div>
1705
1792
  </div><!-- fragment -->
1706
1793
  </div>
1707
1794
  </div>
@@ -1737,15 +1824,15 @@ Functions</h2></td></tr>
1737
1824
  <p>switch i32 %0, label sw.default [ i32 0, label sw.bb i32 1, label sw.bb1 i32 2, label sw.bb1 i32 3, label sw.bb1 i32 4, label sw.bb3 i32 6, label sw.bb3 i32 7, label sw.bb3 ]</p>
1738
1825
  <p>We can get every case basic block and related case value: [ {sw.default, -1}, {sw.bb, 0}, {sw.bb1, 1}, {sw.bb1, 2}, {sw.bb1, 3}, {sw.bb3, 4}, {sw.bb3, 6}, {sw.bb3, 7}, ] Note: default case value is nullptr </p>
1739
1826
 
1740
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01252">1252</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1741
- <div class="fragment"><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;{</div>
1742
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="comment">// get default successor basic block and default case value (nullptr)</span></div>
1743
- <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; vec.push_back({switchInst.getDefaultDest(), <span class="keyword">nullptr</span>});</div>
1744
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; </div>
1745
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="comment">// get normal case value and it&#39;s successor basic block</span></div>
1746
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; cs : switchInst.cases())</div>
1747
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; vec.push_back({cs.getCaseSuccessor(), cs.getCaseValue()});</div>
1748
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;}</div>
1827
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01322">1322</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1828
+ <div class="fragment"><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;{</div>
1829
+ <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="comment">// get default successor basic block and default case value (nullptr)</span></div>
1830
+ <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; vec.push_back({switchInst.getDefaultDest(), <span class="keyword">nullptr</span>});</div>
1831
+ <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; </div>
1832
+ <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <span class="comment">// get normal case value and it&#39;s successor basic block</span></div>
1833
+ <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; cs : switchInst.cases())</div>
1834
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; vec.push_back({cs.getCaseSuccessor(), cs.getCaseValue()});</div>
1835
+ <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;}</div>
1749
1836
  </div><!-- fragment -->
1750
1837
  </div>
1751
1838
  </div>
@@ -1765,27 +1852,27 @@ Functions</h2></td></tr>
1765
1852
  </table>
1766
1853
  </div><div class="memdoc">
1767
1854
 
1768
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00991">991</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1769
- <div class="fragment"><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;{</div>
1770
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* ret = <span class="keyword">nullptr</span>;</div>
1771
- <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
1772
- <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; bb : *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
1773
- <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; {</div>
1774
- <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; inst : bb)</div>
1775
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; {</div>
1776
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::dyn_cast&lt;CallBase&gt;(&amp;inst))</div>
1777
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; {</div>
1778
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="comment">// assert(cs.getCalledFunction() &amp;&amp;</span></div>
1779
- <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="comment">// &quot;Indirect call detected in thunk func&quot;);</span></div>
1780
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="comment">// assert(ret == nullptr &amp;&amp; &quot;multiple callsites in thunk func&quot;);</span></div>
1781
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; </div>
1782
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; ret = callbase-&gt;getCalledFunction();</div>
1783
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
1784
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; }</div>
1785
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; }</div>
1786
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; </div>
1787
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">return</span> ret;</div>
1788
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;}</div>
1855
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01060">1060</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1856
+ <div class="fragment"><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;{</div>
1857
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* ret = <span class="keyword">nullptr</span>;</div>
1858
+ <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; </div>
1859
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; bb : *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
1860
+ <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; {</div>
1861
+ <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; inst : bb)</div>
1862
+ <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; {</div>
1863
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::dyn_cast&lt;CallBase&gt;(&amp;inst))</div>
1864
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; {</div>
1865
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="comment">// assert(cs.getCalledFunction() &amp;&amp;</span></div>
1866
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="comment">// &quot;Indirect call detected in thunk func&quot;);</span></div>
1867
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="comment">// assert(ret == nullptr &amp;&amp; &quot;multiple callsites in thunk func&quot;);</span></div>
1868
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; </div>
1869
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; ret = callbase-&gt;getCalledFunction();</div>
1870
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; }</div>
1871
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; }</div>
1872
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; }</div>
1873
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; </div>
1874
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">return</span> ret;</div>
1875
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;}</div>
1789
1876
  </div><!-- fragment -->
1790
1877
  </div>
1791
1878
  </div>
@@ -1808,33 +1895,34 @@ Functions</h2></td></tr>
1808
1895
  <p>Get the type of the heap allocation. </p>
1809
1896
  <p>Return the type of the object from a heap allocation </p>
1810
1897
 
1811
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00375">375</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1812
- <div class="fragment"><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;{</div>
1813
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast&lt;PointerType&gt;(inst-&gt;getType());</div>
1814
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(inst);</div>
1815
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfinst))</div>
1816
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div>
1817
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">getFirstUseViaCastInst</a>(inst))</div>
1818
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div>
1819
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* newTy = SVFUtil::dyn_cast&lt;PointerType&gt;(v-&gt;getType()))</div>
1820
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = newTy;</div>
1821
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
1822
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div>
1823
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVFUtil::isHeapAllocExtCallViaArg</a>(svfinst))</div>
1824
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div>
1825
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">LLVMUtil::getLLVMCallSite</a>(inst);</div>
1826
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVFUtil::getHeapAllocHoldingArgPosition</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(svfinst));</div>
1827
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* arg = cs-&gt;getArgOperand(arg_pos);</div>
1828
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast&lt;PointerType&gt;(arg-&gt;getType());</div>
1829
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
1830
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">else</span></div>
1831
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div>
1832
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; assert( <span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;not a heap allocation instruction?&quot;</span>);</div>
1833
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
1834
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
1835
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;not a pointer type?&quot;</span>);</div>
1836
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
1837
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div>
1898
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00441">441</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1899
+ <div class="fragment"><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;{</div>
1900
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast&lt;PointerType&gt;(inst-&gt;getType());</div>
1901
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(inst);</div>
1902
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfinst))</div>
1903
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div>
1904
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">getFirstUseViaCastInst</a>(inst))</div>
1905
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
1906
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* newTy = SVFUtil::dyn_cast&lt;PointerType&gt;(v-&gt;getType()))</div>
1907
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = newTy;</div>
1908
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
1909
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
1910
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVFUtil::isHeapAllocExtCallViaArg</a>(svfinst))</div>
1911
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; {</div>
1912
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">LLVMUtil::getLLVMCallSite</a>(inst);</div>
1913
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVFUtil::getHeapAllocHoldingArgPosition</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(svfinst));</div>
1914
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* arg = cs-&gt;getArgOperand(arg_pos);</div>
1915
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = SVFUtil::dyn_cast&lt;PointerType&gt;(arg-&gt;getType());</div>
1916
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
1917
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">else</span></div>
1918
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div>
1919
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; assert( <span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;not a heap allocation instruction?&quot;</span>);</div>
1920
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
1921
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
1922
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;not a pointer type?&quot;</span>);</div>
1923
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// TODO: getPtrElementType need type inference</span></div>
1924
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
1925
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;}</div>
1838
1926
  </div><!-- fragment -->
1839
1927
  </div>
1840
1928
  </div>
@@ -1865,15 +1953,15 @@ Functions</h2></td></tr>
1865
1953
  </div><div class="memdoc">
1866
1954
  <p>if this struct type does not have any element, i.e., opaque</p>
1867
1955
 
1868
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00672">672</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1869
- <div class="fragment"><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;{</div>
1870
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; </div>
1871
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule())-&gt;getStructLayout( <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *<span class="keyword">&gt;</span>(sty) );</div>
1872
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span>(sty-&gt;isOpaque())</div>
1873
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">return</span> 0;</div>
1874
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">else</span></div>
1875
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">return</span> stTySL-&gt;getElementOffset(field_idx);</div>
1876
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;}</div>
1956
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00739">739</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1957
+ <div class="fragment"><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;{</div>
1958
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; </div>
1959
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule())-&gt;getStructLayout( <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *<span class="keyword">&gt;</span>(sty) );</div>
1960
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">if</span>(sty-&gt;isOpaque())</div>
1961
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">return</span> 0;</div>
1962
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">else</span></div>
1963
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">return</span> stTySL-&gt;getElementOffset(field_idx);</div>
1964
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;}</div>
1877
1965
  </div><!-- fragment -->
1878
1966
  </div>
1879
1967
  </div>
@@ -1895,14 +1983,14 @@ Functions</h2></td></tr>
1895
1983
 
1896
1984
  <p>Helper method to get the size of the type from target data layout. </p>
1897
1985
 
1898
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00663">663</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1899
- <div class="fragment"><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;{</div>
1900
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div>
1901
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;isSized())</div>
1902
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule())-&gt;getTypeStoreSize(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*<span class="keyword">&gt;</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>));</div>
1903
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">else</span></div>
1904
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">return</span> 0;</div>
1905
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;}</div>
1986
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00730">730</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1987
+ <div class="fragment"><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;{</div>
1988
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div>
1989
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;isSized())</div>
1990
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule())-&gt;getTypeStoreSize(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*<span class="keyword">&gt;</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>));</div>
1991
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">else</span></div>
1992
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">return</span> 0;</div>
1993
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;}</div>
1906
1994
  </div><!-- fragment -->
1907
1995
  </div>
1908
1996
  </div>
@@ -1922,28 +2010,28 @@ Functions</h2></td></tr>
1922
2010
  </table>
1923
2011
  </div><div class="memdoc">
1924
2012
 
1925
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01229">1229</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1926
- <div class="fragment"><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;{</div>
1927
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* vfuncloadinst =</div>
1928
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; SVFUtil::dyn_cast&lt;LoadInst&gt;(cs-&gt;getCalledOperand());</div>
1929
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; assert(vfuncloadinst != <span class="keyword">nullptr</span>);</div>
1930
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = vfuncloadinst-&gt;getPointerOperand();</div>
1931
- <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* vfuncptrgepinst =</div>
1932
- <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(vfuncptr);</div>
1933
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; User::const_op_iterator oi = vfuncptrgepinst-&gt;idx_begin();</div>
1934
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* idx = SVFUtil::dyn_cast&lt;ConstantInt&gt;(oi-&gt;get());</div>
1935
- <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx_value;</div>
1936
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">if</span> (idx == <span class="keyword">nullptr</span>)</div>
1937
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; {</div>
1938
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;vcall gep idx not constantint\n&quot;</span>;</div>
1939
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; idx_value = 0;</div>
1940
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; }</div>
1941
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">else</span></div>
1942
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; {</div>
1943
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; idx_value = (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)idx-&gt;getSExtValue();</div>
1944
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; }</div>
1945
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keywordflow">return</span> idx_value;</div>
1946
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;}</div>
2013
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01299">1299</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2014
+ <div class="fragment"><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;{</div>
2015
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* vfuncloadinst =</div>
2016
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; SVFUtil::dyn_cast&lt;LoadInst&gt;(cs-&gt;getCalledOperand());</div>
2017
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; assert(vfuncloadinst != <span class="keyword">nullptr</span>);</div>
2018
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = vfuncloadinst-&gt;getPointerOperand();</div>
2019
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* vfuncptrgepinst =</div>
2020
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(vfuncptr);</div>
2021
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; User::const_op_iterator oi = vfuncptrgepinst-&gt;idx_begin();</div>
2022
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* idx = SVFUtil::dyn_cast&lt;ConstantInt&gt;(oi-&gt;get());</div>
2023
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx_value;</div>
2024
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">if</span> (idx == <span class="keyword">nullptr</span>)</div>
2025
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; {</div>
2026
+ <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;vcall gep idx not constantint\n&quot;</span>;</div>
2027
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; idx_value = 0;</div>
2028
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; }</div>
2029
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="keywordflow">else</span></div>
2030
+ <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; {</div>
2031
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; idx_value = (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)idx-&gt;getSExtValue();</div>
2032
+ <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; }</div>
2033
+ <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <span class="keywordflow">return</span> idx_value;</div>
2034
+ <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;}</div>
1947
2035
  </div><!-- fragment -->
1948
2036
  </div>
1949
2037
  </div>
@@ -1963,17 +2051,17 @@ Functions</h2></td></tr>
1963
2051
  </table>
1964
2052
  </div><div class="memdoc">
1965
2053
 
1966
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01013">1013</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1967
- <div class="fragment"><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;{</div>
1968
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">if</span> (cs-&gt;paramHasAttr(0, llvm::Attribute::StructRet))</div>
1969
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; {</div>
1970
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">return</span> cs-&gt;getArgOperand(1);</div>
1971
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; }</div>
1972
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">else</span></div>
1973
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; {</div>
1974
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">return</span> cs-&gt;getArgOperand(0);</div>
1975
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; }</div>
1976
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;}</div>
2054
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01082">1082</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2055
+ <div class="fragment"><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;{</div>
2056
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keywordflow">if</span> (cs-&gt;paramHasAttr(0, llvm::Attribute::StructRet))</div>
2057
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; {</div>
2058
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">return</span> cs-&gt;getArgOperand(1);</div>
2059
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; }</div>
2060
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="keywordflow">else</span></div>
2061
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; {</div>
2062
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="keywordflow">return</span> cs-&gt;getArgOperand(0);</div>
2063
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; }</div>
2064
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;}</div>
1977
2065
  </div><!-- fragment -->
1978
2066
  </div>
1979
2067
  </div>
@@ -1993,18 +2081,18 @@ Functions</h2></td></tr>
1993
2081
  </table>
1994
2082
  </div><div class="memdoc">
1995
2083
 
1996
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01142">1142</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
1997
- <div class="fragment"><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;{</div>
1998
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* loadInst =</div>
1999
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; SVFUtil::dyn_cast&lt;LoadInst&gt;(cs-&gt;getCalledOperand());</div>
2000
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; assert(loadInst != <span class="keyword">nullptr</span>);</div>
2001
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = loadInst-&gt;getPointerOperand();</div>
2002
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gepInst =</div>
2003
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(vfuncptr);</div>
2004
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; assert(gepInst != <span class="keyword">nullptr</span>);</div>
2005
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vtbl = gepInst-&gt;getPointerOperand();</div>
2006
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">return</span> vtbl;</div>
2007
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;}</div>
2084
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01211">1211</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2085
+ <div class="fragment"><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;{</div>
2086
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* loadInst =</div>
2087
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; SVFUtil::dyn_cast&lt;LoadInst&gt;(cs-&gt;getCalledOperand());</div>
2088
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; assert(loadInst != <span class="keyword">nullptr</span>);</div>
2089
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = loadInst-&gt;getPointerOperand();</div>
2090
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gepInst =</div>
2091
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(vfuncptr);</div>
2092
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; assert(gepInst != <span class="keyword">nullptr</span>);</div>
2093
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vtbl = gepInst-&gt;getPointerOperand();</div>
2094
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">return</span> vtbl;</div>
2095
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;}</div>
2008
2096
  </div><!-- fragment -->
2009
2097
  </div>
2010
2098
  </div>
@@ -2024,18 +2112,18 @@ Functions</h2></td></tr>
2024
2112
  </table>
2025
2113
  </div><div class="memdoc">
2026
2114
 
2027
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00896">896</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2028
- <div class="fragment"><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;{</div>
2029
- <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(vtbl-&gt;getOperand(0));</div>
2030
- <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; assert(vtblStruct &amp;&amp; <span class="stringliteral">&quot;Initializer of a vtable not a struct?&quot;</span>);</div>
2031
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; </div>
2032
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keywordflow">if</span> (vtblStruct-&gt;getNumOperands() == 2 &amp;&amp;</div>
2033
- <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; SVFUtil::isa&lt;ConstantStruct&gt;(vtblStruct-&gt;getOperand(0)) &amp;&amp;</div>
2034
- <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; vtblStruct-&gt;getOperand(1)-&gt;getType()-&gt;isArrayTy())</div>
2035
- <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;ConstantStruct&gt;(vtblStruct-&gt;getOperand(0));</div>
2036
- <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; </div>
2037
- <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">return</span> vtblStruct;</div>
2038
- <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160;}</div>
2115
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00963">963</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2116
+ <div class="fragment"><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;{</div>
2117
+ <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *vtblStruct = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(vtbl-&gt;getOperand(0));</div>
2118
+ <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; assert(vtblStruct &amp;&amp; <span class="stringliteral">&quot;Initializer of a vtable not a struct?&quot;</span>);</div>
2119
+ <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; </div>
2120
+ <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">if</span> (vtblStruct-&gt;getNumOperands() == 2 &amp;&amp;</div>
2121
+ <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; SVFUtil::isa&lt;ConstantStruct&gt;(vtblStruct-&gt;getOperand(0)) &amp;&amp;</div>
2122
+ <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; vtblStruct-&gt;getOperand(1)-&gt;getType()-&gt;isArrayTy())</div>
2123
+ <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;ConstantStruct&gt;(vtblStruct-&gt;getOperand(0));</div>
2124
+ <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; </div>
2125
+ <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">return</span> vtblStruct;</div>
2126
+ <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;}</div>
2039
2127
  </div><!-- fragment -->
2040
2128
  </div>
2041
2129
  </div>
@@ -2065,11 +2153,11 @@ Functions</h2></td></tr>
2065
2153
 
2066
2154
  <p>Return true if the argument in a function does not have a caller. </p>
2067
2155
 
2068
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00201">201</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2069
- <div class="fragment"><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div>
2070
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;Argument&gt;(val)</div>
2071
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; &amp;&amp; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a17cce1a11e1bfc342a9e3e79fe35deef">isNoCallerFunction</a>(SVFUtil::cast&lt;Argument&gt;(val)-&gt;getParent());</div>
2072
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
2156
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00206">206</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2157
+ <div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;{</div>
2158
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> SVFUtil::isa&lt;Argument&gt;(val)</div>
2159
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; &amp;&amp; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a17cce1a11e1bfc342a9e3e79fe35deef">isNoCallerFunction</a>(SVFUtil::cast&lt;Argument&gt;(val)-&gt;getParent());</div>
2160
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;}</div>
2073
2161
  </div><!-- fragment -->
2074
2162
  </div>
2075
2163
  </div>
@@ -2097,16 +2185,16 @@ Functions</h2></td></tr>
2097
2185
  </table>
2098
2186
  </div><div class="memdoc">
2099
2187
 
2100
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00309">309</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2101
- <div class="fragment"><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;{</div>
2102
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2103
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
2104
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> ((constExpr-&gt;getOpcode() &gt;= Instruction::BinaryOpsBegin) &amp;&amp;</div>
2105
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; (constExpr-&gt;getOpcode() &lt;= Instruction::BinaryOpsEnd))</div>
2106
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2107
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
2108
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2109
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;}</div>
2188
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00314">314</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2189
+ <div class="fragment"><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;{</div>
2190
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2191
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
2192
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> ((constExpr-&gt;getOpcode() &gt;= Instruction::BinaryOpsBegin) &amp;&amp;</div>
2193
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; (constExpr-&gt;getOpcode() &lt;= Instruction::BinaryOpsEnd))</div>
2194
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2195
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
2196
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2197
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;}</div>
2110
2198
  </div><!-- fragment -->
2111
2199
  </div>
2112
2200
  </div>
@@ -2233,15 +2321,15 @@ Functions</h2></td></tr>
2233
2321
  </table>
2234
2322
  </div><div class="memdoc">
2235
2323
 
2236
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00264">264</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2237
- <div class="fragment"><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;{</div>
2238
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2239
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
2240
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::BitCast)</div>
2241
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2242
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div>
2243
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2244
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;}</div>
2324
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00269">269</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2325
+ <div class="fragment"><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div>
2326
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2327
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div>
2328
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::BitCast)</div>
2329
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2330
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
2331
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2332
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;}</div>
2245
2333
  </div><!-- fragment -->
2246
2334
  </div>
2247
2335
  </div>
@@ -2269,16 +2357,16 @@ Functions</h2></td></tr>
2269
2357
  </table>
2270
2358
  </div><div class="memdoc">
2271
2359
 
2272
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00298">298</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2273
- <div class="fragment"><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;{</div>
2274
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2275
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div>
2276
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::ICmp ||</div>
2277
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; constExpr-&gt;getOpcode() == Instruction::FCmp)</div>
2278
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2279
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
2280
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2281
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div>
2360
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00303">303</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2361
+ <div class="fragment"><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;{</div>
2362
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2363
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div>
2364
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::ICmp ||</div>
2365
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; constExpr-&gt;getOpcode() == Instruction::FCmp)</div>
2366
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2367
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
2368
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2369
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div>
2282
2370
  </div><!-- fragment -->
2283
2371
  </div>
2284
2372
  </div>
@@ -2300,10 +2388,10 @@ Functions</h2></td></tr>
2300
2388
 
2301
2389
  <p>Check whether this value points-to a constant object. </p>
2302
2390
 
2303
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00860">860</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2304
- <div class="fragment"><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;{</div>
2305
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">isConstantObjSym</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(val));</div>
2306
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;}</div>
2391
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00927">927</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2392
+ <div class="fragment"><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;{</div>
2393
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">isConstantObjSym</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(val));</div>
2394
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;}</div>
2307
2395
  </div><!-- fragment -->
2308
2396
  </div>
2309
2397
  </div>
@@ -2326,33 +2414,33 @@ Functions</h2></td></tr>
2326
2414
  <p>Check whether this value points-to a constant object. </p>
2327
2415
  <p>Check whether this value points-to a constant object </p>
2328
2416
 
2329
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00868">868</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2330
- <div class="fragment"><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;{</div>
2331
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* v = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(val))</div>
2332
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div>
2333
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(v))</div>
2334
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2335
- <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v-&gt;hasInitializer())</div>
2336
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; {</div>
2337
- <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">return</span> !v-&gt;isExternalLinkage(v-&gt;getLinkage());</div>
2338
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; }</div>
2339
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">else</span></div>
2340
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; {</div>
2341
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(v-&gt;getInitializer()-&gt;getType())-&gt;getTypeInfo();</div>
2342
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keyword">const</span> std::vector&lt;const SVFType*&gt; &amp;fields = stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>();</div>
2343
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;const SVFType*&gt;::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div>
2344
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div>
2345
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemTy = *it;</div>
2346
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; assert(!SVFUtil::isa&lt;SVFFunctionType&gt;(elemTy) &amp;&amp; <span class="stringliteral">&quot;Initializer of a global is a function?&quot;</span>);</div>
2347
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(elemTy))</div>
2348
- <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2349
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; }</div>
2350
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; </div>
2351
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordflow">return</span> v-&gt;isConstant();</div>
2352
- <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; }</div>
2353
- <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; }</div>
2354
- <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val);</div>
2355
- <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;}</div>
2417
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00935">935</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2418
+ <div class="fragment"><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;{</div>
2419
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* v = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(val))</div>
2420
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
2421
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(v))</div>
2422
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2423
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v-&gt;hasInitializer())</div>
2424
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; {</div>
2425
+ <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keywordflow">return</span> !v-&gt;isExternalLinkage(v-&gt;getLinkage());</div>
2426
+ <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; }</div>
2427
+ <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="keywordflow">else</span></div>
2428
+ <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; {</div>
2429
+ <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(v-&gt;getInitializer()-&gt;getType())-&gt;getTypeInfo();</div>
2430
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keyword">const</span> std::vector&lt;const SVFType*&gt; &amp;fields = stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>();</div>
2431
+ <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;const SVFType*&gt;::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div>
2432
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; {</div>
2433
+ <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemTy = *it;</div>
2434
+ <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; assert(!SVFUtil::isa&lt;SVFFunctionType&gt;(elemTy) &amp;&amp; <span class="stringliteral">&quot;Initializer of a global is a function?&quot;</span>);</div>
2435
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(elemTy))</div>
2436
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2437
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; }</div>
2438
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; </div>
2439
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">return</span> v-&gt;isConstant();</div>
2440
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; }</div>
2441
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; }</div>
2442
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val);</div>
2443
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;}</div>
2356
2444
  </div><!-- fragment -->
2357
2445
  </div>
2358
2446
  </div>
@@ -2382,11 +2470,11 @@ Functions</h2></td></tr>
2382
2470
 
2383
2471
  <p>Return true if the value refers to constant data, e.g., i32 0. </p>
2384
2472
 
2385
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00414">414</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2386
- <div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;{</div>
2387
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">SVFUtil::isa</a>&lt;<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>, <a class="code" href="namespaceSVF.html#a7cbe1c6567039e72958fd70e423d3597">ConstantAggregate</a>,</div>
2388
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <a class="code" href="namespaceSVF.html#a773900ea3c75022657aac1abf59fa51b">MetadataAsValue</a>, <a class="code" href="namespaceSVF.html#a956458a8554bf734db1194f320fd4b4c">BlockAddress</a>&gt;(val);</div>
2389
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;}</div>
2473
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00420">420</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2474
+ <div class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{</div>
2475
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">SVFUtil::isa</a>&lt;<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>, <a class="code" href="namespaceSVF.html#a7cbe1c6567039e72958fd70e423d3597">ConstantAggregate</a>,</div>
2476
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="namespaceSVF.html#a773900ea3c75022657aac1abf59fa51b">MetadataAsValue</a>, <a class="code" href="namespaceSVF.html#a956458a8554bf734db1194f320fd4b4c">BlockAddress</a>&gt;(val);</div>
2477
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;}</div>
2390
2478
  </div><!-- fragment -->
2391
2479
  </div>
2392
2480
  </div>
@@ -2407,35 +2495,35 @@ Functions</h2></td></tr>
2407
2495
  </div><div class="memdoc">
2408
2496
  <p>TODO: on mac os function name is an empty string after demangling</p>
2409
2497
 
2410
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01072">1072</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2411
- <div class="fragment"><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;{</div>
2412
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isDeclaration())</div>
2413
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2414
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funcName = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str();</div>
2415
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">if</span> (funcName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>) != 0)</div>
2416
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; {</div>
2417
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2418
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; }</div>
2419
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(funcName.c_str());</div>
2420
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">if</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() == 0)</div>
2421
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; {</div>
2422
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2423
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; }</div>
2424
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>);</div>
2425
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2426
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="keywordtype">size_t</span> colon = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.rfind(<span class="stringliteral">&quot;::&quot;</span>);</div>
2427
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keywordflow">if</span> (colon == std::string::npos)</div>
2428
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; {</div>
2429
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2430
- <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; }</div>
2431
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keywordflow">else</span></div>
2432
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; {</div>
2433
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> =</div>
2434
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.substr(colon + 2));</div>
2435
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; }</div>
2436
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">return</span> dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() &gt; 0 &amp;&amp;</div>
2437
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>) == 0;</div>
2438
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;}</div>
2498
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01141">1141</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2499
+ <div class="fragment"><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;{</div>
2500
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isDeclaration())</div>
2501
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2502
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funcName = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str();</div>
2503
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keywordflow">if</span> (funcName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>) != 0)</div>
2504
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; {</div>
2505
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2506
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; }</div>
2507
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(funcName.c_str());</div>
2508
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">if</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() == 0)</div>
2509
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; {</div>
2510
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2511
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; }</div>
2512
+ <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>);</div>
2513
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2514
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="keywordtype">size_t</span> colon = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.rfind(<span class="stringliteral">&quot;::&quot;</span>);</div>
2515
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordflow">if</span> (colon == std::string::npos)</div>
2516
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; {</div>
2517
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2518
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; }</div>
2519
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">else</span></div>
2520
+ <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; {</div>
2521
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> =</div>
2522
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.substr(colon + 2));</div>
2523
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; }</div>
2524
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">return</span> dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() &gt; 0 &amp;&amp;</div>
2525
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>) == 0;</div>
2526
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;}</div>
2439
2527
  </div><!-- fragment -->
2440
2528
  </div>
2441
2529
  </div>
@@ -2455,11 +2543,11 @@ Functions</h2></td></tr>
2455
2543
  </table>
2456
2544
  </div><div class="memdoc">
2457
2545
 
2458
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00985">985</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2459
- <div class="fragment"><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;{</div>
2460
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str());</div>
2461
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">return</span> dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#af6117df8aec7f4c077058fa8f00b0243">isThunkFunc</a>;</div>
2462
- <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;}</div>
2546
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01054">1054</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2547
+ <div class="fragment"><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;{</div>
2548
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str());</div>
2549
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">return</span> dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#af6117df8aec7f4c077058fa8f00b0243">isThunkFunc</a>;</div>
2550
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;}</div>
2463
2551
  </div><!-- fragment -->
2464
2552
  </div>
2465
2553
  </div>
@@ -2479,37 +2567,37 @@ Functions</h2></td></tr>
2479
2567
  </table>
2480
2568
  </div><div class="memdoc">
2481
2569
 
2482
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01103">1103</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2483
- <div class="fragment"><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;{</div>
2484
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isDeclaration())</div>
2485
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2486
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funcName = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str();</div>
2487
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">if</span> (funcName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>) != 0)</div>
2488
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; {</div>
2489
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2490
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; }</div>
2491
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(funcName.c_str());</div>
2492
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">if</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() == 0)</div>
2493
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; {</div>
2494
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2495
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; }</div>
2496
- <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>);</div>
2497
- <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2498
- <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="keywordtype">size_t</span> colon = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.rfind(<span class="stringliteral">&quot;::&quot;</span>);</div>
2499
- <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordflow">if</span> (colon == std::string::npos)</div>
2500
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; {</div>
2501
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2502
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; }</div>
2503
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keywordflow">else</span></div>
2504
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; {</div>
2505
- <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> =</div>
2506
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.substr(colon + 2));</div>
2507
- <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div>
2508
- <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">return</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() &gt; 0 &amp;&amp; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.size() &gt; 0 &amp;&amp;</div>
2509
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() + 1 == dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.size() &amp;&amp;</div>
2510
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.compare(0, 1, <span class="stringliteral">&quot;~&quot;</span>) == 0 &amp;&amp;</div>
2511
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.substr(1)) == 0);</div>
2512
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;}</div>
2570
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01172">1172</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2571
+ <div class="fragment"><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;{</div>
2572
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isDeclaration())</div>
2573
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2574
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funcName = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str();</div>
2575
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">if</span> (funcName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>.size(), <a class="code" href="LLVMUtil_8cpp.html#aff4f7c7a9aacf05a3a3c42ae24ea7d96">vfunPreLabel</a>) != 0)</div>
2576
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; {</div>
2577
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2578
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; }</div>
2579
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keyword">struct </span><a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(funcName.c_str());</div>
2580
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordflow">if</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() == 0)</div>
2581
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; {</div>
2582
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2583
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; }</div>
2584
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>);</div>
2585
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2586
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordtype">size_t</span> colon = dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.rfind(<span class="stringliteral">&quot;::&quot;</span>);</div>
2587
+ <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="keywordflow">if</span> (colon == std::string::npos)</div>
2588
+ <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; {</div>
2589
+ <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> = <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>);</div>
2590
+ <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; }</div>
2591
+ <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <span class="keywordflow">else</span></div>
2592
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; {</div>
2593
+ <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a> =</div>
2594
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">cppUtil::getBeforeBrackets</a>(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.substr(colon + 2));</div>
2595
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; }</div>
2596
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keywordflow">return</span> (dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() &gt; 0 &amp;&amp; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.size() &gt; 0 &amp;&amp;</div>
2597
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.size() + 1 == dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.size() &amp;&amp;</div>
2598
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.compare(0, 1, <span class="stringliteral">&quot;~&quot;</span>) == 0 &amp;&amp;</div>
2599
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">funcName</a>.substr(1)) == 0);</div>
2600
+ <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;}</div>
2513
2601
  </div><!-- fragment -->
2514
2602
  </div>
2515
2603
  </div>
@@ -2539,15 +2627,15 @@ Functions</h2></td></tr>
2539
2627
 
2540
2628
  <p>Return corresponding constant expression, otherwise return nullptr. </p>
2541
2629
 
2542
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00234">234</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2543
- <div class="fragment"><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;{</div>
2544
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2545
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
2546
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::GetElementPtr)</div>
2547
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2548
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
2549
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2550
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div>
2630
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00239">239</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2631
+ <div class="fragment"><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;{</div>
2632
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2633
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
2634
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::GetElementPtr)</div>
2635
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2636
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div>
2637
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2638
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;}</div>
2551
2639
  </div><!-- fragment -->
2552
2640
  </div>
2553
2641
  </div>
@@ -2575,15 +2663,15 @@ Functions</h2></td></tr>
2575
2663
  </table>
2576
2664
  </div><div class="memdoc">
2577
2665
 
2578
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00244">244</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2579
- <div class="fragment"><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;{</div>
2580
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2581
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div>
2582
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::IntToPtr)</div>
2583
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2584
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
2585
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2586
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;}</div>
2666
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00249">249</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2667
+ <div class="fragment"><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;{</div>
2668
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2669
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div>
2670
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::IntToPtr)</div>
2671
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2672
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div>
2673
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2674
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;}</div>
2587
2675
  </div><!-- fragment -->
2588
2676
  </div>
2589
2677
  </div>
@@ -2669,19 +2757,19 @@ Functions</h2></td></tr>
2669
2757
 
2670
2758
  <p>Check whether a file is an LLVM IR file. </p>
2671
2759
 
2672
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00419">419</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2673
- <div class="fragment"><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div>
2674
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; llvm::ErrorOr&lt;std::unique_ptr&lt;llvm::MemoryBuffer&gt;&gt; FileOrErr = llvm::MemoryBuffer::getFileOrSTDIN(filename);</div>
2675
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (FileOrErr.getError())</div>
2676
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2677
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; llvm::MemoryBufferRef Buffer = FileOrErr.get()-&gt;getMemBufferRef();</div>
2678
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bufferStart =</div>
2679
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)Buffer.getBufferStart();</div>
2680
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bufferEnd =</div>
2681
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)Buffer.getBufferEnd();</div>
2682
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> llvm::isBitcode(bufferStart, bufferEnd) ? <a class="code" href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a> :</div>
2683
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; Buffer.getBuffer().startswith(<span class="stringliteral">&quot;; ModuleID =&quot;</span>);</div>
2684
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;}</div>
2760
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00486">486</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2761
+ <div class="fragment"><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;{</div>
2762
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; llvm::ErrorOr&lt;std::unique_ptr&lt;llvm::MemoryBuffer&gt;&gt; FileOrErr = llvm::MemoryBuffer::getFileOrSTDIN(filename);</div>
2763
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> (FileOrErr.getError())</div>
2764
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2765
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; llvm::MemoryBufferRef Buffer = FileOrErr.get()-&gt;getMemBufferRef();</div>
2766
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bufferStart =</div>
2767
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)Buffer.getBufferStart();</div>
2768
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bufferEnd =</div>
2769
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)Buffer.getBufferEnd();</div>
2770
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">return</span> llvm::isBitcode(bufferStart, bufferEnd) ? <a class="code" href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a> :</div>
2771
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; Buffer.getBuffer().startswith(<span class="stringliteral">&quot;; ModuleID =&quot;</span>);</div>
2772
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;}</div>
2685
2773
  </div><!-- fragment -->
2686
2774
  </div>
2687
2775
  </div>
@@ -2701,34 +2789,36 @@ Functions</h2></td></tr>
2701
2789
  </table>
2702
2790
  </div><div class="memdoc">
2703
2791
 
2704
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00918">918</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2705
- <div class="fragment"><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;{</div>
2706
- <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* loadSrc = loadInst-&gt;getPointerOperand();</div>
2707
- <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* valTy = loadSrc-&gt;getType();</div>
2708
- <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = valTy;</div>
2709
- <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; 3; ++i)</div>
2710
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; {</div>
2711
- <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast&lt;PointerType&gt;(elemTy))</div>
2712
- <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; elemTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">LLVMUtil::getPtrElementType</a>(ptrTy);</div>
2713
- <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">else</span></div>
2714
- <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2715
- <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; }</div>
2716
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* functy = SVFUtil::dyn_cast&lt;FunctionType&gt;(elemTy))</div>
2717
- <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; {</div>
2718
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* paramty = functy-&gt;getParamType(0);</div>
2719
- <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> className = <span class="stringliteral">&quot;&quot;</span>;</div>
2720
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast&lt;PointerType&gt;(paramty))</div>
2721
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; {</div>
2722
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* st = SVFUtil::dyn_cast&lt;StructType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptrTy)))</div>
2723
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; className = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">LLVMUtil::getClassNameFromType</a>(st);</div>
2724
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; }</div>
2725
- <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keywordflow">if</span> (className.size() &gt; 0)</div>
2726
- <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; {</div>
2727
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
2728
- <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; }</div>
2729
- <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div>
2730
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2731
- <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;}</div>
2792
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00985">985</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2793
+ <div class="fragment"><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;{</div>
2794
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* loadSrc = loadInst-&gt;getPointerOperand();</div>
2795
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* valTy = loadSrc-&gt;getType();</div>
2796
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = valTy;</div>
2797
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; 3; ++i)</div>
2798
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; {</div>
2799
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <span class="comment">// TODO: getPtrElementType to be removed</span></div>
2800
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast&lt;PointerType&gt;(elemTy))</div>
2801
+ <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; elemTy = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">LLVMUtil::getPtrElementType</a>(ptrTy);</div>
2802
+ <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">else</span></div>
2803
+ <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2804
+ <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; }</div>
2805
+ <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* functy = SVFUtil::dyn_cast&lt;FunctionType&gt;(elemTy))</div>
2806
+ <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; {</div>
2807
+ <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* paramty = functy-&gt;getParamType(0);</div>
2808
+ <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> className = <span class="stringliteral">&quot;&quot;</span>;</div>
2809
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = SVFUtil::dyn_cast&lt;PointerType&gt;(paramty))</div>
2810
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; {</div>
2811
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="comment">// TODO: getPtrElementType need type inference</span></div>
2812
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* st = SVFUtil::dyn_cast&lt;StructType&gt;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptrTy)))</div>
2813
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; className = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">LLVMUtil::getClassNameFromType</a>(st);</div>
2814
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; }</div>
2815
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keywordflow">if</span> (className.size() &gt; 0)</div>
2816
+ <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; {</div>
2817
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
2818
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; }</div>
2819
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; }</div>
2820
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2821
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;}</div>
2732
2822
  </div><!-- fragment -->
2733
2823
  </div>
2734
2824
  </div>
@@ -2759,10 +2849,10 @@ Functions</h2></td></tr>
2759
2849
  <p>Function does not have any possible caller in the call graph. </p>
2760
2850
  <p>Return true if the function does not have a caller (either it is a main function or a dead function) </p>
2761
2851
 
2762
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00195">195</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2763
- <div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;{</div>
2764
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">isUncalledFunction</a>(fun) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ac9d6aff1a5e778e45c51b4f3b6d787e0">LLVMUtil::isProgEntryFunction</a>(fun);</div>
2765
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div>
2852
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00200">200</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2853
+ <div class="fragment"><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;{</div>
2854
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">isUncalledFunction</a>(fun) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ac9d6aff1a5e778e45c51b4f3b6d787e0">LLVMUtil::isProgEntryFunction</a>(fun);</div>
2855
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
2766
2856
  </div><!-- fragment -->
2767
2857
  </div>
2768
2858
  </div>
@@ -2889,15 +2979,15 @@ Functions</h2></td></tr>
2889
2979
  </table>
2890
2980
  </div><div class="memdoc">
2891
2981
 
2892
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00254">254</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2893
- <div class="fragment"><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;{</div>
2894
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2895
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div>
2896
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::PtrToInt)</div>
2897
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2898
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div>
2899
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2900
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div>
2982
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00259">259</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
2983
+ <div class="fragment"><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;{</div>
2984
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
2985
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
2986
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::PtrToInt)</div>
2987
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
2988
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
2989
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
2990
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
2901
2991
  </div><!-- fragment -->
2902
2992
  </div>
2903
2993
  </div>
@@ -2965,28 +3055,28 @@ Functions</h2></td></tr>
2965
3055
  <p>Given a inheritance relation B is a child of A We assume B::B(thisPtr1){ A::A(thisPtr2) } such that thisPtr1 == thisPtr2 In the following code thisPtr1 is "%class.B1* %this" and thisPtr2 is "%class.A* %0".</p>
2966
3056
  <p>define linkonce_odr dso_local void @B1::B1()(class.B1* this) unnamed_addr #6 comdat this.addr = alloca class.B1*, align 8 store class.B1* this, class.B1** this.addr, align 8 this1 = load class.B1*, class.B1** this.addr, align 8 %0 = bitcast class.B1* this1 to class.A* call void @A::A()(class.A* %0) </p>
2967
3057
 
2968
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01039">1039</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
2969
- <div class="fragment"><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;{</div>
2970
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">if</span> (thisPtr1 == thisPtr2)</div>
2971
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
2972
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisU : thisPtr1-&gt;users())</div>
2973
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div>
2974
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store = SVFUtil::dyn_cast&lt;StoreInst&gt;(thisU))</div>
2975
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div>
2976
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* storeU : store-&gt;getPointerOperand()-&gt;users())</div>
2977
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; {</div>
2978
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <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;(storeU))</div>
2979
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; {</div>
2980
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">if</span> (load-&gt;getNextNode() &amp;&amp;</div>
2981
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; SVFUtil::isa&lt;CastInst&gt;(load-&gt;getNextNode()))</div>
2982
- <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CastInst&gt;(load-&gt;getNextNode()) ==</div>
2983
- <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; (thisPtr2-&gt;stripPointerCasts());</div>
2984
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; }</div>
2985
- <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; }</div>
2986
- <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; }</div>
2987
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div>
2988
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
2989
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;}</div>
3058
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01108">1108</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3059
+ <div class="fragment"><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;{</div>
3060
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (thisPtr1 == thisPtr2)</div>
3061
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3062
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* thisU : thisPtr1-&gt;users())</div>
3063
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; {</div>
3064
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store = SVFUtil::dyn_cast&lt;StoreInst&gt;(thisU))</div>
3065
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; {</div>
3066
+ <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* storeU : store-&gt;getPointerOperand()-&gt;users())</div>
3067
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; {</div>
3068
+ <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <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;(storeU))</div>
3069
+ <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; {</div>
3070
+ <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keywordflow">if</span> (load-&gt;getNextNode() &amp;&amp;</div>
3071
+ <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; SVFUtil::isa&lt;CastInst&gt;(load-&gt;getNextNode()))</div>
3072
+ <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CastInst&gt;(load-&gt;getNextNode()) ==</div>
3073
+ <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; (thisPtr2-&gt;stripPointerCasts());</div>
3074
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; }</div>
3075
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; }</div>
3076
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; }</div>
3077
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div>
3078
+ <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3079
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;}</div>
2990
3080
  </div><!-- fragment -->
2991
3081
  </div>
2992
3082
  </div>
@@ -3014,15 +3104,15 @@ Functions</h2></td></tr>
3014
3104
  </table>
3015
3105
  </div><div class="memdoc">
3016
3106
 
3017
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00274">274</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3018
- <div class="fragment"><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;{</div>
3019
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3020
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div>
3021
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::Select)</div>
3022
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
3023
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
3024
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3025
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;}</div>
3107
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00279">279</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3108
+ <div class="fragment"><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;{</div>
3109
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3110
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div>
3111
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::Select)</div>
3112
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
3113
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
3114
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3115
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;}</div>
3026
3116
  </div><!-- fragment -->
3027
3117
  </div>
3028
3118
  </div>
@@ -3050,19 +3140,19 @@ Functions</h2></td></tr>
3050
3140
  </table>
3051
3141
  </div><div class="memdoc">
3052
3142
 
3053
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00284">284</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3054
- <div class="fragment"><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div>
3055
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3056
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div>
3057
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::Trunc ||</div>
3058
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; constExpr-&gt;getOpcode() == Instruction::FPTrunc ||</div>
3059
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; constExpr-&gt;getOpcode() == Instruction::ZExt ||</div>
3060
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; constExpr-&gt;getOpcode() == Instruction::SExt ||</div>
3061
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; constExpr-&gt;getOpcode() == Instruction::FPExt)</div>
3062
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
3063
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
3064
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3065
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;}</div>
3143
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00289">289</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3144
+ <div class="fragment"><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;{</div>
3145
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3146
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div>
3147
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (constExpr-&gt;getOpcode() == Instruction::Trunc ||</div>
3148
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; constExpr-&gt;getOpcode() == Instruction::FPTrunc ||</div>
3149
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; constExpr-&gt;getOpcode() == Instruction::ZExt ||</div>
3150
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; constExpr-&gt;getOpcode() == Instruction::SExt ||</div>
3151
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; constExpr-&gt;getOpcode() == Instruction::FPExt)</div>
3152
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
3153
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
3154
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3155
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;}</div>
3066
3156
  </div><!-- fragment -->
3067
3157
  </div>
3068
3158
  </div>
@@ -3090,16 +3180,16 @@ Functions</h2></td></tr>
3090
3180
  </table>
3091
3181
  </div><div class="memdoc">
3092
3182
 
3093
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00320">320</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3094
- <div class="fragment"><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;{</div>
3095
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3096
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
3097
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> ((constExpr-&gt;getOpcode() &gt;= Instruction::UnaryOpsBegin) &amp;&amp;</div>
3098
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; (constExpr-&gt;getOpcode() &lt;= Instruction::UnaryOpsEnd))</div>
3099
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
3100
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div>
3101
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3102
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;}</div>
3183
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00325">325</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3184
+ <div class="fragment"><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;{</div>
3185
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* constExpr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3186
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div>
3187
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">if</span> ((constExpr-&gt;getOpcode() &gt;= Instruction::UnaryOpsBegin) &amp;&amp;</div>
3188
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; (constExpr-&gt;getOpcode() &lt;= Instruction::UnaryOpsEnd))</div>
3189
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> constExpr;</div>
3190
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
3191
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3192
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;}</div>
3103
3193
  </div><!-- fragment -->
3104
3194
  </div>
3105
3195
  </div>
@@ -3171,20 +3261,20 @@ Functions</h2></td></tr>
3171
3261
  </table>
3172
3262
  </div><div class="memdoc">
3173
3263
 
3174
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00585">585</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3175
- <div class="fragment"><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div>
3176
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Check if it is an empty global annotations</span></div>
3177
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (global.getName() == <span class="stringliteral">&quot;llvm.global.annotations&quot;</span> &amp;&amp; SVFUtil::isa&lt;ConstantArray&gt;(global.getInitializer()))</div>
3178
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3179
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">else</span></div>
3180
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; {</div>
3181
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">// Check if any global strings has at least one effective user</span></div>
3182
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; use : global.uses())</div>
3183
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">if</span> (use.getUser()-&gt;getNumUses() != 0)</div>
3184
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3185
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; }</div>
3186
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3187
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;}</div>
3264
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00652">652</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3265
+ <div class="fragment"><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;{</div>
3266
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// Check if it is an empty global annotations</span></div>
3267
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">if</span> (global.getName() == <span class="stringliteral">&quot;llvm.global.annotations&quot;</span> &amp;&amp; SVFUtil::isa&lt;ConstantArray&gt;(global.getInitializer()))</div>
3268
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3269
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">else</span></div>
3270
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div>
3271
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// Check if any global strings has at least one effective user</span></div>
3272
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; use : global.uses())</div>
3273
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (use.getUser()-&gt;getNumUses() != 0)</div>
3274
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3275
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div>
3276
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3277
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;}</div>
3188
3278
  </div><!-- fragment -->
3189
3279
  </div>
3190
3280
  </div>
@@ -3204,14 +3294,14 @@ Functions</h2></td></tr>
3204
3294
  </table>
3205
3295
  </div><div class="memdoc">
3206
3296
 
3207
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00909">909</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3208
- <div class="fragment"><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;{</div>
3209
- <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GlobalVariable&gt;(val))</div>
3210
- <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3211
- <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> valName = val-&gt;getName().str();</div>
3212
- <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">return</span> valName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a>.size(),</div>
3213
- <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a>) == 0;</div>
3214
- <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;}</div>
3297
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00976">976</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3298
+ <div class="fragment"><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;{</div>
3299
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GlobalVariable&gt;(val))</div>
3300
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3301
+ <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> valName = val-&gt;getName().str();</div>
3302
+ <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">return</span> valName.compare(0, <a class="code" href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a>.size(),</div>
3303
+ <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <a class="code" href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a>) == 0;</div>
3304
+ <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;}</div>
3215
3305
  </div><!-- fragment -->
3216
3306
  </div>
3217
3307
  </div>
@@ -3231,36 +3321,36 @@ Functions</h2></td></tr>
3231
3321
  </table>
3232
3322
  </div><div class="memdoc">
3233
3323
 
3234
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00954">954</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3235
- <div class="fragment"><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;{</div>
3236
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="comment">// the callsite must be an indirect one with at least one argument (this</span></div>
3237
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// ptr)</span></div>
3238
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">if</span> (cs-&gt;getCalledFunction() != <span class="keyword">nullptr</span> || cs-&gt;arg_empty())</div>
3239
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3240
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; </div>
3241
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="comment">// the first argument (this pointer) must be a pointer type and must be a</span></div>
3242
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="comment">// class name</span></div>
3243
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">if</span> (cs-&gt;getArgOperand(0)-&gt;getType()-&gt;isPointerTy() == <span class="keyword">false</span>)</div>
3244
- <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3245
- <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; </div>
3246
- <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfunc = cs-&gt;getCalledOperand();</div>
3247
- <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* vfuncloadinst = SVFUtil::dyn_cast&lt;LoadInst&gt;(vfunc))</div>
3248
- <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; {</div>
3249
- <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = vfuncloadinst-&gt;getPointerOperand();</div>
3250
- <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* vfuncptrgepinst =</div>
3251
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(vfuncptr))</div>
3252
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div>
3253
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (vfuncptrgepinst-&gt;getNumIndices() != 1)</div>
3254
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3255
- <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vtbl = vfuncptrgepinst-&gt;getPointerOperand();</div>
3256
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadInst&gt;(vtbl))</div>
3257
- <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; {</div>
3258
- <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3259
- <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; }</div>
3260
- <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div>
3261
- <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div>
3262
- <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3263
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;}</div>
3324
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01023">1023</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3325
+ <div class="fragment"><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;{</div>
3326
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="comment">// the callsite must be an indirect one with at least one argument (this</span></div>
3327
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="comment">// ptr)</span></div>
3328
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">if</span> (cs-&gt;getCalledFunction() != <span class="keyword">nullptr</span> || cs-&gt;arg_empty())</div>
3329
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3330
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; </div>
3331
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="comment">// the first argument (this pointer) must be a pointer type and must be a</span></div>
3332
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">// class name</span></div>
3333
+ <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">if</span> (cs-&gt;getArgOperand(0)-&gt;getType()-&gt;isPointerTy() == <span class="keyword">false</span>)</div>
3334
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3335
+ <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; </div>
3336
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfunc = cs-&gt;getCalledOperand();</div>
3337
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* vfuncloadinst = SVFUtil::dyn_cast&lt;LoadInst&gt;(vfunc))</div>
3338
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; {</div>
3339
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vfuncptr = vfuncloadinst-&gt;getPointerOperand();</div>
3340
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* vfuncptrgepinst =</div>
3341
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(vfuncptr))</div>
3342
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; {</div>
3343
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">if</span> (vfuncptrgepinst-&gt;getNumIndices() != 1)</div>
3344
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3345
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* vtbl = vfuncptrgepinst-&gt;getPointerOperand();</div>
3346
+ <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadInst&gt;(vtbl))</div>
3347
+ <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; {</div>
3348
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3349
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; }</div>
3350
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div>
3351
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div>
3352
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3353
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;}</div>
3264
3354
  </div><!-- fragment -->
3265
3355
  </div>
3266
3356
  </div>
@@ -3311,31 +3401,31 @@ Functions</h2></td></tr>
3311
3401
  <p>Parse argument for multi-module analysis. </p>
3312
3402
  <p>Get the names of all modules into a vector And process arguments </p>
3313
3403
 
3314
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00436">436</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3315
- <div class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;{</div>
3316
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordtype">bool</span> first_ir_file = <span class="keyword">true</span>;</div>
3317
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; argc; ++i)</div>
3318
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
3319
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> argument(argv[i]);</div>
3320
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(argument))</div>
3321
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div>
3322
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">if</span> (find(moduleNameVec.begin(), moduleNameVec.end(), argument)</div>
3323
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; == moduleNameVec.end())</div>
3324
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; moduleNameVec.push_back(argument);</div>
3325
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (first_ir_file)</div>
3326
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div>
3327
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; arg_value[arg_num] = argv[i];</div>
3328
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; arg_num++;</div>
3329
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; first_ir_file = <span class="keyword">false</span>;</div>
3330
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div>
3331
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
3332
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">else</span></div>
3333
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; {</div>
3334
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; arg_value[arg_num] = argv[i];</div>
3335
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; arg_num++;</div>
3336
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
3337
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div>
3338
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;}</div>
3404
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00503">503</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3405
+ <div class="fragment"><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;{</div>
3406
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordtype">bool</span> first_ir_file = <span class="keyword">true</span>;</div>
3407
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; argc; ++i)</div>
3408
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
3409
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> argument(argv[i]);</div>
3410
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(argument))</div>
3411
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div>
3412
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (find(moduleNameVec.begin(), moduleNameVec.end(), argument)</div>
3413
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; == moduleNameVec.end())</div>
3414
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; moduleNameVec.push_back(argument);</div>
3415
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (first_ir_file)</div>
3416
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div>
3417
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; arg_value[arg_num] = argv[i];</div>
3418
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; arg_num++;</div>
3419
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; first_ir_file = <span class="keyword">false</span>;</div>
3420
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
3421
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div>
3422
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">else</span></div>
3423
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div>
3424
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; arg_value[arg_num] = argv[i];</div>
3425
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; arg_num++;</div>
3426
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
3427
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div>
3428
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;}</div>
3339
3429
  </div><!-- fragment -->
3340
3430
  </div>
3341
3431
  </div>
@@ -3355,66 +3445,66 @@ Functions</h2></td></tr>
3355
3445
  </table>
3356
3446
  </div><div class="memdoc">
3357
3447
 
3358
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00504">504</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3359
- <div class="fragment"><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;{</div>
3360
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">if</span> (removedFuncList.empty())</div>
3361
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// No functions to remove annotations in extapi.bc module</span></div>
3362
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; </div>
3363
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* module = removedFuncList[0]-&gt;getParent();</div>
3364
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = module-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
3365
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob-&gt;hasInitializer())</div>
3366
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">return</span>;</div>
3367
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; </div>
3368
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>* ca = SVFUtil::dyn_cast&lt;ConstantArray&gt;(glob-&gt;getInitializer());</div>
3369
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
3370
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span>;</div>
3371
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; </div>
3372
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; std::vector&lt;Constant*&gt; newAnnotations;</div>
3373
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; ca-&gt;getNumOperands(); ++i)</div>
3374
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div>
3375
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>* structAn = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(ca-&gt;getOperand(i));</div>
3376
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span>)</div>
3377
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">continue</span>;</div>
3378
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; </div>
3379
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* expr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(0));</div>
3380
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (expr == <span class="keyword">nullptr</span> || expr-&gt;getOpcode() != Instruction::BitCast)</div>
3381
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div>
3382
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// Keep the annotation if it&#39;s not created using BitCast</span></div>
3383
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; newAnnotations.push_back(structAn);</div>
3384
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">continue</span>;</div>
3385
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div>
3386
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; </div>
3387
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* annotatedFunc = SVFUtil::dyn_cast&lt;Function&gt;(expr-&gt;getOperand(0));</div>
3388
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span> (annotatedFunc == <span class="keyword">nullptr</span> || std::find(removedFuncList.begin(), removedFuncList.end(), annotatedFunc) != removedFuncList.end())</div>
3389
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">continue</span>;</div>
3390
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; </div>
3391
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// Keep the annotation for all other functions</span></div>
3392
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; newAnnotations.push_back(structAn);</div>
3393
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
3394
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; </div>
3395
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">if</span> (newAnnotations.size() == ca-&gt;getNumOperands())</div>
3396
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// No annotations to remove</span></div>
3397
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; </div>
3398
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* annotationsType = ArrayType::get(ca-&gt;getType()-&gt;getElementType(), newAnnotations.size());</div>
3399
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* newCA = ConstantArray::get(annotationsType, newAnnotations);</div>
3400
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; </div>
3401
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="comment">// Check if a global variable with the name llvm.global.annotations already exists</span></div>
3402
- <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* existingGlobal = module-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
3403
- <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (existingGlobal)</div>
3404
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="comment">// Rename the existing llvm.global.annotations to llvm.global.annotations_old</span></div>
3405
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; existingGlobal-&gt;setName(<span class="stringliteral">&quot;llvm.global.annotations_old&quot;</span>);</div>
3406
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; </div>
3407
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// Create a new global variable with the updated annotations</span></div>
3408
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* newGlobal = <span class="keyword">new</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>(*module, newCA-&gt;getType(), glob-&gt;isConstant(),</div>
3409
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; glob-&gt;getLinkage(), newCA, <span class="stringliteral">&quot;llvm.global.annotations&quot;</span>, glob, glob-&gt;getThreadLocalMode());</div>
3410
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; </div>
3411
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// Copy other properties from the old global variable to the new one</span></div>
3412
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; newGlobal-&gt;setSection(glob-&gt;getSection());</div>
3413
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; newGlobal-&gt;setAlignment(llvm::MaybeAlign(glob-&gt;getAlignment()));</div>
3414
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; </div>
3415
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// Remove the old global variable</span></div>
3416
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; glob-&gt;eraseFromParent();</div>
3417
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;}</div>
3448
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00571">571</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3449
+ <div class="fragment"><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;{</div>
3450
+ <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span> (removedFuncList.empty())</div>
3451
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// No functions to remove annotations in extapi.bc module</span></div>
3452
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; </div>
3453
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* module = removedFuncList[0]-&gt;getParent();</div>
3454
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = module-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
3455
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob-&gt;hasInitializer())</div>
3456
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">return</span>;</div>
3457
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; </div>
3458
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a>* ca = SVFUtil::dyn_cast&lt;ConstantArray&gt;(glob-&gt;getInitializer());</div>
3459
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
3460
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">return</span>;</div>
3461
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; </div>
3462
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; std::vector&lt;Constant*&gt; newAnnotations;</div>
3463
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; ca-&gt;getNumOperands(); ++i)</div>
3464
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; {</div>
3465
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a>* structAn = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(ca-&gt;getOperand(i));</div>
3466
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span>)</div>
3467
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">continue</span>;</div>
3468
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; </div>
3469
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* expr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(0));</div>
3470
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (expr == <span class="keyword">nullptr</span> || expr-&gt;getOpcode() != Instruction::BitCast)</div>
3471
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div>
3472
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// Keep the annotation if it&#39;s not created using BitCast</span></div>
3473
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; newAnnotations.push_back(structAn);</div>
3474
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">continue</span>;</div>
3475
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div>
3476
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; </div>
3477
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* annotatedFunc = SVFUtil::dyn_cast&lt;Function&gt;(expr-&gt;getOperand(0));</div>
3478
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (annotatedFunc == <span class="keyword">nullptr</span> || std::find(removedFuncList.begin(), removedFuncList.end(), annotatedFunc) != removedFuncList.end())</div>
3479
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">continue</span>;</div>
3480
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
3481
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// Keep the annotation for all other functions</span></div>
3482
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; newAnnotations.push_back(structAn);</div>
3483
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div>
3484
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
3485
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">if</span> (newAnnotations.size() == ca-&gt;getNumOperands())</div>
3486
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// No annotations to remove</span></div>
3487
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; </div>
3488
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* annotationsType = ArrayType::get(ca-&gt;getType()-&gt;getElementType(), newAnnotations.size());</div>
3489
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* newCA = ConstantArray::get(annotationsType, newAnnotations);</div>
3490
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
3491
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// Check if a global variable with the name llvm.global.annotations already exists</span></div>
3492
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* existingGlobal = module-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
3493
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordflow">if</span> (existingGlobal)</div>
3494
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// Rename the existing llvm.global.annotations to llvm.global.annotations_old</span></div>
3495
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; existingGlobal-&gt;setName(<span class="stringliteral">&quot;llvm.global.annotations_old&quot;</span>);</div>
3496
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
3497
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// Create a new global variable with the updated annotations</span></div>
3498
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* newGlobal = <span class="keyword">new</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>(*module, newCA-&gt;getType(), glob-&gt;isConstant(),</div>
3499
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; glob-&gt;getLinkage(), newCA, <span class="stringliteral">&quot;llvm.global.annotations&quot;</span>, glob, glob-&gt;getThreadLocalMode());</div>
3500
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
3501
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// Copy other properties from the old global variable to the new one</span></div>
3502
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; newGlobal-&gt;setSection(glob-&gt;getSection());</div>
3503
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; newGlobal-&gt;setAlignment(llvm::MaybeAlign(glob-&gt;getAlignment()));</div>
3504
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
3505
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="comment">// Remove the old global variable</span></div>
3506
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; glob-&gt;eraseFromParent();</div>
3507
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;}</div>
3418
3508
  </div><!-- fragment -->
3419
3509
  </div>
3420
3510
  </div>
@@ -3439,45 +3529,45 @@ Functions</h2></td></tr>
3439
3529
  <p>Delete unused functions The functions to be deleted from extapi.bc can be categorized into two types. The first type includes functions do not contain any invocation statements, The second type includes functions whose contain invocation statements. It is necessary to delete functions of the second type first before deleting those of the first type; Otherwise, errors may occur when calling eraseFromParent().</p>
3440
3530
  <p>Check whether a function is called by other functions</p>
3441
3531
 
3442
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00615">615</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3443
- <div class="fragment"><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;{</div>
3444
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (removedFuncList.empty())</div>
3445
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">return</span>;</div>
3446
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
3447
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod = removedFuncList[0]-&gt;getParent();</div>
3448
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">if</span> (mod-&gt;getName().str() != ExtAPI::getExtAPI()-&gt;getExtBcPath())</div>
3449
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">return</span>;</div>
3450
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
3451
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">LLVMUtil::removeFunAnnotations</a>(removedFuncList);</div>
3452
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
3453
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; std::vector&lt;Function*&gt; funcsToKeep;</div>
3454
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">auto</span> isCalledFunction = [](<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">llvm::Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
3455
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div>
3456
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> &amp;&amp; <span class="stringliteral">&quot;Null function pointer!&quot;</span>);</div>
3457
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; use : <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;uses())</div>
3458
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; {</div>
3459
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">llvm::User</a>* user = use.getUser();</div>
3460
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">if</span> (llvm::isa&lt;llvm::CallBase&gt;(user))</div>
3461
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3462
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div>
3463
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3464
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; };</div>
3465
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; </div>
3466
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : removedFuncList)</div>
3467
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; {</div>
3468
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">if</span> (isCalledFunction(func))</div>
3469
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="comment">// Record first kind function(which does not contain any invocation statements)</span></div>
3470
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; funcsToKeep.push_back(func);</div>
3471
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">else</span></div>
3472
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="comment">// Delete second kind function(which contains invocation statements)</span></div>
3473
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; func-&gt;eraseFromParent();</div>
3474
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; }</div>
3475
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// Delete first kind functions</span></div>
3476
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : funcsToKeep)</div>
3477
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; func-&gt;eraseFromParent();</div>
3478
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// Delete unused global variables</span></div>
3479
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">removeUnusedGlobalVariables</a>(mod);</div>
3480
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;}</div>
3532
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00682">682</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3533
+ <div class="fragment"><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;{</div>
3534
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (removedFuncList.empty())</div>
3535
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span>;</div>
3536
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; </div>
3537
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod = removedFuncList[0]-&gt;getParent();</div>
3538
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (mod-&gt;getName().str() != ExtAPI::getExtAPI()-&gt;getExtBcPath())</div>
3539
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">return</span>;</div>
3540
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; </div>
3541
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">LLVMUtil::removeFunAnnotations</a>(removedFuncList);</div>
3542
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
3543
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; std::vector&lt;Function*&gt; funcsToKeep;</div>
3544
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keyword">auto</span> isCalledFunction = [](<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">llvm::Function</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
3545
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; {</div>
3546
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> &amp;&amp; <span class="stringliteral">&quot;Null function pointer!&quot;</span>);</div>
3547
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; use : <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;uses())</div>
3548
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
3549
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">llvm::User</a>* user = use.getUser();</div>
3550
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (llvm::isa&lt;llvm::CallBase&gt;(user))</div>
3551
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3552
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div>
3553
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3554
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; };</div>
3555
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; </div>
3556
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : removedFuncList)</div>
3557
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div>
3558
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">if</span> (isCalledFunction(func))</div>
3559
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="comment">// Record first kind function(which does not contain any invocation statements)</span></div>
3560
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; funcsToKeep.push_back(func);</div>
3561
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">else</span></div>
3562
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="comment">// Delete second kind function(which contains invocation statements)</span></div>
3563
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; func-&gt;eraseFromParent();</div>
3564
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div>
3565
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// Delete first kind functions</span></div>
3566
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : funcsToKeep)</div>
3567
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; func-&gt;eraseFromParent();</div>
3568
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// Delete unused global variables</span></div>
3569
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">removeUnusedGlobalVariables</a>(mod);</div>
3570
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;}</div>
3481
3571
  </div><!-- fragment -->
3482
3572
  </div>
3483
3573
  </div>
@@ -3497,19 +3587,19 @@ Functions</h2></td></tr>
3497
3587
  </table>
3498
3588
  </div><div class="memdoc">
3499
3589
 
3500
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00600">600</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3501
- <div class="fragment"><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;{</div>
3502
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; assert(module &amp;&amp; <span class="stringliteral">&quot;Null module pointer!&quot;</span>);</div>
3503
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; std::vector&lt;GlobalVariable*&gt; unusedGlobals;</div>
3504
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : module-&gt;globals())</div>
3505
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">isUnusedGlobalVariable</a>(global))</div>
3506
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">// Record unused global variables</span></div>
3507
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; unusedGlobals.push_back(&amp;global);</div>
3508
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; </div>
3509
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// Delete unused global variables</span></div>
3510
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* global : unusedGlobals)</div>
3511
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; global-&gt;eraseFromParent();</div>
3512
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;}</div>
3590
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00667">667</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3591
+ <div class="fragment"><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;{</div>
3592
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; assert(module &amp;&amp; <span class="stringliteral">&quot;Null module pointer!&quot;</span>);</div>
3593
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; std::vector&lt;GlobalVariable*&gt; unusedGlobals;</div>
3594
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : module-&gt;globals())</div>
3595
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">isUnusedGlobalVariable</a>(global))</div>
3596
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="comment">// Record unused global variables</span></div>
3597
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; unusedGlobals.push_back(&amp;global);</div>
3598
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; </div>
3599
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// Delete unused global variables</span></div>
3600
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* global : unusedGlobals)</div>
3601
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; global-&gt;eraseFromParent();</div>
3602
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div>
3513
3603
  </div><!-- fragment -->
3514
3604
  </div>
3515
3605
  </div>
@@ -3532,28 +3622,28 @@ Functions</h2></td></tr>
3532
3622
  <p>Strip off the all casts. </p>
3533
3623
  <p>Strip all casts </p>
3534
3624
 
3535
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00263">263</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3536
- <div class="fragment"><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;{</div>
3537
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
3538
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div>
3539
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> *ci = SVFUtil::dyn_cast&lt;CastInst&gt;(val))</div>
3540
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
3541
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; val = ci-&gt;getOperand(0);</div>
3542
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div>
3543
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3544
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div>
3545
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>(ce-&gt;isCast())</div>
3546
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; val = ce-&gt;getOperand(0);</div>
3547
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div>
3548
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">return</span> val;</div>
3549
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
3550
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">else</span></div>
3551
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; {</div>
3552
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> val;</div>
3553
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
3554
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div>
3555
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3556
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div>
3625
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00328">328</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3626
+ <div class="fragment"><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div>
3627
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
3628
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div>
3629
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> *ci = SVFUtil::dyn_cast&lt;CastInst&gt;(val))</div>
3630
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
3631
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; val = ci-&gt;getOperand(0);</div>
3632
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
3633
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *ce = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(val))</div>
3634
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
3635
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span>(ce-&gt;isCast())</div>
3636
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; val = ce-&gt;getOperand(0);</div>
3637
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span></div>
3638
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> val;</div>
3639
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
3640
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">else</span></div>
3641
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div>
3642
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> val;</div>
3643
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
3644
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
3645
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
3646
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div>
3557
3647
  </div><!-- fragment -->
3558
3648
  </div>
3559
3649
  </div>
@@ -3614,25 +3704,26 @@ Functions</h2></td></tr>
3614
3704
  </table>
3615
3705
  </div><div class="memdoc">
3616
3706
 
3617
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00387">387</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3618
- <div class="fragment"><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;{</div>
3619
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">llvm::Type</a>* llvm_rhs = LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMType(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
3620
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">llvm::PointerType</a>* llvm_rhs_ptr = SVFUtil::dyn_cast&lt;PointerType&gt;(llvm_rhs);</div>
3621
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; assert(llvm_rhs_ptr &amp;&amp; <span class="stringliteral">&quot;not a pointer type?&quot;</span>);</div>
3622
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *ptrElementType = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(llvm_rhs_ptr);</div>
3623
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> llvm_rhs_size = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b5fdf455c5dd40c0baa60185e5e41c6">LLVMUtil::getTypeSizeInBytes</a>(ptrElementType);</div>
3624
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> llvm_elem_size = -1;</div>
3625
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">if</span> (ptrElementType-&gt;isArrayTy() &amp;&amp; llvm_rhs_size &gt; 0)</div>
3626
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; {</div>
3627
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordtype">size_t</span> array_len = ptrElementType-&gt;getArrayNumElements();</div>
3628
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; llvm_elem_size = llvm_rhs_size / array_len;</div>
3629
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div>
3630
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">else</span></div>
3631
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div>
3632
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; llvm_elem_size =llvm_rhs_size;</div>
3633
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
3634
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">return</span> llvm_elem_size;</div>
3635
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;}</div>
3707
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8h_source.html#l00392">392</a> of file <a class="el" href="LLVMUtil_8h_source.html">LLVMUtil.h</a>.</p>
3708
+ <div class="fragment"><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;{</div>
3709
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">llvm::Type</a>* llvm_rhs = LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMType(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
3710
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">llvm::PointerType</a>* llvm_rhs_ptr = SVFUtil::dyn_cast&lt;PointerType&gt;(llvm_rhs);</div>
3711
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; assert(llvm_rhs_ptr &amp;&amp; <span class="stringliteral">&quot;not a pointer type?&quot;</span>);</div>
3712
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// TODO: getPtrElementType need type inference</span></div>
3713
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *ptrElementType = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(llvm_rhs_ptr);</div>
3714
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> llvm_rhs_size = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2b5fdf455c5dd40c0baa60185e5e41c6">LLVMUtil::getTypeSizeInBytes</a>(ptrElementType);</div>
3715
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> llvm_elem_size = -1;</div>
3716
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (ptrElementType-&gt;isArrayTy() &amp;&amp; llvm_rhs_size &gt; 0)</div>
3717
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div>
3718
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordtype">size_t</span> array_len = ptrElementType-&gt;getArrayNumElements();</div>
3719
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; llvm_elem_size = llvm_rhs_size / array_len;</div>
3720
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
3721
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">else</span></div>
3722
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; {</div>
3723
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; llvm_elem_size =llvm_rhs_size;</div>
3724
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
3725
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">return</span> llvm_elem_size;</div>
3726
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;}</div>
3636
3727
  </div><!-- fragment -->
3637
3728
  </div>
3638
3729
  </div>
@@ -3652,18 +3743,18 @@ Functions</h2></td></tr>
3652
3743
  </table>
3653
3744
  </div><div class="memdoc">
3654
3745
 
3655
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01158">1158</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3656
- <div class="fragment"><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;{</div>
3657
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> classNameOfThisPtr = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">LLVMUtil::getClassNameOfThisPtr</a>(cs);</div>
3658
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = cs-&gt;getCaller();</div>
3659
- <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(func) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(func))</div>
3660
- <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; {</div>
3661
- <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(func-&gt;getName().str());</div>
3662
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">if</span> (classNameOfThisPtr.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>) == 0)</div>
3663
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3664
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; }</div>
3665
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3666
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;}</div>
3746
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l01227">1227</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3747
+ <div class="fragment"><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;{</div>
3748
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> classNameOfThisPtr = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">LLVMUtil::getClassNameOfThisPtr</a>(cs);</div>
3749
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = cs-&gt;getCaller();</div>
3750
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">LLVMUtil::isConstructor</a>(func) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">LLVMUtil::isDestructor</a>(func))</div>
3751
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; {</div>
3752
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html">cppUtil::DemangledName</a> dname = <a class="code" href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">cppUtil::demangle</a>(func-&gt;getName().str());</div>
3753
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">if</span> (classNameOfThisPtr.compare(dname.<a class="code" href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">className</a>) == 0)</div>
3754
+ <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
3755
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; }</div>
3756
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
3757
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;}</div>
3667
3758
  </div><!-- fragment -->
3668
3759
  </div>
3669
3760
  </div>
@@ -3683,13 +3774,13 @@ Functions</h2></td></tr>
3683
3774
  </table>
3684
3775
  </div><div class="memdoc">
3685
3776
 
3686
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00244">244</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3687
- <div class="fragment"><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;{</div>
3688
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (fun != <span class="keyword">nullptr</span>)</div>
3689
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div>
3690
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; fun-&gt;viewCFG();</div>
3691
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
3692
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</div>
3777
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00309">309</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3778
+ <div class="fragment"><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;{</div>
3779
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (fun != <span class="keyword">nullptr</span>)</div>
3780
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
3781
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; fun-&gt;viewCFG();</div>
3782
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
3783
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div>
3693
3784
  </div><!-- fragment -->
3694
3785
  </div>
3695
3786
  </div>
@@ -3709,30 +3800,32 @@ Functions</h2></td></tr>
3709
3800
  </table>
3710
3801
  </div><div class="memdoc">
3711
3802
 
3712
- <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00252">252</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3713
- <div class="fragment"><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;{</div>
3714
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">if</span> (fun != <span class="keyword">nullptr</span>)</div>
3715
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
3716
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; fun-&gt;viewCFGOnly();</div>
3717
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
3718
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
3803
+ <p class="definition">Definition at line <a class="el" href="LLVMUtil_8cpp_source.html#l00317">317</a> of file <a class="el" href="LLVMUtil_8cpp_source.html">LLVMUtil.cpp</a>.</p>
3804
+ <div class="fragment"><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div>
3805
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">if</span> (fun != <span class="keyword">nullptr</span>)</div>
3806
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div>
3807
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; fun-&gt;viewCFGOnly();</div>
3808
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
3809
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;}</div>
3719
3810
  </div><!-- fragment -->
3720
3811
  </div>
3721
3812
  </div>
3722
3813
  </div><!-- contents -->
3723
3814
  <div class="ttc" id="anamespaceSVF_html_a827d09974dc7bf0849f96823cc2fee89"><div class="ttname"><a href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">SVF::DomTreeNode</a></div><div class="ttdeci">llvm::DomTreeNode DomTreeNode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00132">BasicTypes.h:132</a></div></div>
3724
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8e4add30bd0ce00d3f2aa2e31c64fef8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">SVF::LLVMUtil::getSourceLoc</a></div><div class="ttdeci">const std::string getSourceLoc(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00686">LLVMUtil.cpp:686</a></div></div>
3815
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8e4add30bd0ce00d3f2aa2e31c64fef8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">SVF::LLVMUtil::getSourceLoc</a></div><div class="ttdeci">const std::string getSourceLoc(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00753">LLVMUtil.cpp:753</a></div></div>
3816
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afa2f8c8ab19c75547c26ede53b9f6159"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afa2f8c8ab19c75547c26ede53b9f6159">SVF::LLVMUtil::dumpValue</a></div><div class="ttdeci">std::string dumpValue(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01359">LLVMUtil.cpp:1359</a></div></div>
3725
3817
  <div class="ttc" id="anamespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdoc">LLVM Dominators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
3726
3818
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aeaa116fd9718c8b31f30d3fe62bb6403"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aeaa116fd9718c8b31f30d3fe62bb6403">SVF::LLVMUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Value *val)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00051">LLVMUtil.h:51</a></div></div>
3727
3819
  <div class="ttc" id="aCommandLine_8h_html_a2429346d37bd4c40889bd7c6d319d9da"><div class="ttname"><a href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00018">CommandLine.h:18</a></div></div>
3728
3820
  <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>
3729
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2b5fdf455c5dd40c0baa60185e5e41c6"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2b5fdf455c5dd40c0baa60185e5e41c6">SVF::LLVMUtil::getTypeSizeInBytes</a></div><div class="ttdeci">u32_t getTypeSizeInBytes(const StructType *sty, u32_t field_index)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00672">LLVMUtil.cpp:672</a></div></div>
3821
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2b5fdf455c5dd40c0baa60185e5e41c6"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2b5fdf455c5dd40c0baa60185e5e41c6">SVF::LLVMUtil::getTypeSizeInBytes</a></div><div class="ttdeci">u32_t getTypeSizeInBytes(const StructType *sty, u32_t field_index)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00739">LLVMUtil.cpp:739</a></div></div>
3730
3822
  <div class="ttc" id="anamespaceSVF_html_a773900ea3c75022657aac1abf59fa51b"><div class="ttname"><a href="namespaceSVF.html#a773900ea3c75022657aac1abf59fa51b">SVF::MetadataAsValue</a></div><div class="ttdeci">llvm::MetadataAsValue MetadataAsValue</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
3731
3823
  <div class="ttc" id="anamespaceSVF_html_a6ec0236303089a01fd9da36a8bb84e0a"><div class="ttname"><a href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">SVF::FunctionType</a></div><div class="ttdeci">llvm::FunctionType FunctionType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
3732
3824
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a16d14e6712866d1d710c386c72d67181"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a16d14e6712866d1d710c386c72d67181">SVF::LLVMModuleSet::FunctionSetType</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; FunctionSetType</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00050">LLVMModule.h:50</a></div></div>
3733
3825
  <div class="ttc" id="aLLVMUtil_8cpp_html_a5f8da60b0fcc28445f508f4e42513a82"><div class="ttname"><a href="LLVMUtil_8cpp.html#a5f8da60b0fcc28445f508f4e42513a82">clsName</a></div><div class="ttdeci">const std::string clsName</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00043">LLVMUtil.cpp:43</a></div></div>
3734
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a08fbef6fe3e2af96a49f79ce23accb01"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">SVF::LLVMUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00909">LLVMUtil.cpp:909</a></div></div>
3826
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a08fbef6fe3e2af96a49f79ce23accb01"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">SVF::LLVMUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00976">LLVMUtil.cpp:976</a></div></div>
3735
3827
  <div class="ttc" id="anamespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00097">SVFType.h:97</a></div></div>
3828
+ <div class="ttc" id="anamespaceSVF_html_a893c345ff98bb2808ae905cf9f3671c5"><div class="ttname"><a href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">SVF::GEPOperator</a></div><div class="ttdeci">llvm::GEPOperator GEPOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00180">BasicTypes.h:180</a></div></div>
3736
3829
  <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>
3737
3830
  <div class="ttc" id="anamespaceSVF_html_a3d9e7f32dc17fe8d40f8d6a011403b91"><div class="ttname"><a href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">SVF::IntegerType</a></div><div class="ttdeci">llvm::IntegerType IntegerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00095">BasicTypes.h:95</a></div></div>
3738
3831
  <div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html">SVF::cppUtil::DemangledName</a></div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00046">CppUtil.h:46</a></div></div>
@@ -3740,17 +3833,17 @@ Functions</h2></td></tr>
3740
3833
  <div class="ttc" id="anamespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
3741
3834
  <div class="ttc" id="anamespaceSVF_html_a03db82b8a7914367024723dba4d6ca3c"><div class="ttname"><a href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">SVF::DataLayout</a></div><div class="ttdeci">llvm::DataLayout DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
3742
3835
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a07bd47ccfd02c5a2a6db26b537b2184f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">SVF::LLVMUtil::stripConstantCasts</a></div><div class="ttdeci">const Value * stripConstantCasts(const Value *val)</div><div class="ttdoc">Strip off the constant casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00232">LLVMUtil.cpp:232</a></div></div>
3743
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a200539f965bff5627abac41920498ee8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">SVF::LLVMUtil::getFirstUseViaCastInst</a></div><div class="ttdeci">const Value * getFirstUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00349">LLVMUtil.cpp:349</a></div></div>
3836
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a200539f965bff5627abac41920498ee8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">SVF::LLVMUtil::getFirstUseViaCastInst</a></div><div class="ttdeci">const Value * getFirstUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00414">LLVMUtil.cpp:414</a></div></div>
3744
3837
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2c61d741afbcfa853b505cd391f29f9b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">SVF::LLVMUtil::isUncalledFunction</a></div><div class="ttdeci">bool isUncalledFunction(const Function *fun)</div><div class="ttdoc">whether this is a function without any possible caller?</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00154">LLVMUtil.cpp:154</a></div></div>
3745
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00860">LLVMUtil.cpp:860</a></div></div>
3838
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00927">LLVMUtil.cpp:927</a></div></div>
3746
3839
  <div class="ttc" id="anamespaceSVF_html_a52c8654c221bb53a59f70ea3cb1e5c45"><div class="ttname"><a href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">SVF::StructLayout</a></div><div class="ttdeci">llvm::StructLayout StructLayout</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
3747
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae2b444bb3e7a27d77386f588a78af8e2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">SVF::LLVMUtil::removeUnusedGlobalVariables</a></div><div class="ttdeci">void removeUnusedGlobalVariables(Module *module)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00600">LLVMUtil.cpp:600</a></div></div>
3840
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae2b444bb3e7a27d77386f588a78af8e2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae2b444bb3e7a27d77386f588a78af8e2">SVF::LLVMUtil::removeUnusedGlobalVariables</a></div><div class="ttdeci">void removeUnusedGlobalVariables(Module *module)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00667">LLVMUtil.cpp:667</a></div></div>
3748
3841
  <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
3749
3842
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2064cb70c76f399ce115f2621adea35"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVF::SVFUtil::isHeapAllocExtCallViaRet</a></div><div class="ttdeci">bool isHeapAllocExtCallViaRet(const CallSite cs)</div><div class="ttdoc">interfaces to be used externally</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00442">SVFUtil.h:442</a></div></div>
3750
3843
  <div class="ttc" id="anamespaceSVF_html_a7cbe1c6567039e72958fd70e423d3597"><div class="ttname"><a href="namespaceSVF.html#a7cbe1c6567039e72958fd70e423d3597">SVF::ConstantAggregate</a></div><div class="ttdeci">llvm::ConstantAggregate ConstantAggregate</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00115">BasicTypes.h:115</a></div></div>
3751
3844
  <div class="ttc" id="acJSON_8h_html_a25d22ecc7e656d2c59332072684e8766"><div class="ttname"><a href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a></div><div class="ttdeci">const char *const name</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00264">cJSON.h:264</a></div></div>
3752
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a47d2af43ff12d9e1014fa19256619466"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">SVF::LLVMUtil::getCalledFunctions</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; getCalledFunctions(const Function *F)</div><div class="ttdoc">Get all called funcions in a parent function.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00566">LLVMUtil.cpp:566</a></div></div>
3753
- <div class="ttc" id="anamespaceSVF_html_a5c943191dc4e242704943e5f594ae99e"><div class="ttname"><a href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">SVF::const_pred_iterator</a></div><div class="ttdeci">llvm::const_pred_iterator const_pred_iterator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00251">BasicTypes.h:251</a></div></div>
3845
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a47d2af43ff12d9e1014fa19256619466"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">SVF::LLVMUtil::getCalledFunctions</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; getCalledFunctions(const Function *F)</div><div class="ttdoc">Get all called funcions in a parent function.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00633">LLVMUtil.cpp:633</a></div></div>
3846
+ <div class="ttc" id="anamespaceSVF_html_a5c943191dc4e242704943e5f594ae99e"><div class="ttname"><a href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">SVF::const_pred_iterator</a></div><div class="ttdeci">llvm::const_pred_iterator const_pred_iterator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00252">BasicTypes.h:252</a></div></div>
3754
3847
  <div class="ttc" id="anamespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
3755
3848
  <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>
3756
3849
  <div class="ttc" id="anamespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00121">BasicTypes.h:121</a></div></div>
@@ -3758,7 +3851,7 @@ Functions</h2></td></tr>
3758
3851
  <div class="ttc" id="anamespaceSVF_html_a5a6e8ab900d5cd17ef72661006a7fbe0"><div class="ttname"><a href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">SVF::LoadInst</a></div><div class="ttdeci">llvm::LoadInst LoadInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
3759
3852
  <div class="ttc" id="anamespaceSVF_html_a956458a8554bf734db1194f320fd4b4c"><div class="ttname"><a href="namespaceSVF.html#a956458a8554bf734db1194f320fd4b4c">SVF::BlockAddress</a></div><div class="ttdeci">llvm::BlockAddress BlockAddress</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00089">BasicTypes.h:89</a></div></div>
3760
3853
  <div class="ttc" id="anamespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
3761
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a68e7bad8eb537039559d8ddc851032e0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">SVF::LLVMUtil::getVCallThisPtr</a></div><div class="ttdeci">const Value * getVCallThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01013">LLVMUtil.cpp:1013</a></div></div>
3854
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a68e7bad8eb537039559d8ddc851032e0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a68e7bad8eb537039559d8ddc851032e0">SVF::LLVMUtil::getVCallThisPtr</a></div><div class="ttdeci">const Value * getVCallThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01082">LLVMUtil.cpp:1082</a></div></div>
3762
3855
  <div class="ttc" id="anamespaceSVF_html_a146d286041987860388da3d8bc85cee3"><div class="ttname"><a href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">SVF::ArrayType</a></div><div class="ttdeci">llvm::ArrayType ArrayType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
3763
3856
  <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html">SVF::SVFBasicBlock</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00522">SVFValue.h:522</a></div></div>
3764
3857
  <div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
@@ -3770,19 +3863,20 @@ Functions</h2></td></tr>
3770
3863
  <div class="ttc" id="anamespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
3771
3864
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a745a2addadc136075d45c7fb8437af3e"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a745a2addadc136075d45c7fb8437af3e">SVF::cppUtil::demangle</a></div><div class="ttdeci">struct DemangledName demangle(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00153">CppUtil.cpp:153</a></div></div>
3772
3865
  <div class="ttc" id="acJSON_8cpp_html_a930920b2bc42824a5c03be681830f4b2"><div class="ttname"><a href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a></div><div class="ttdeci">return true</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02295">cJSON.cpp:2295</a></div></div>
3773
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8a77403306e97ab4cb31a56d38bba5be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">SVF::LLVMUtil::isConstDataOrAggData</a></div><div class="ttdeci">bool isConstDataOrAggData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00414">LLVMUtil.h:414</a></div></div>
3866
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8a77403306e97ab4cb31a56d38bba5be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">SVF::LLVMUtil::isConstDataOrAggData</a></div><div class="ttdeci">bool isConstDataOrAggData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00420">LLVMUtil.h:420</a></div></div>
3774
3867
  <div class="ttc" id="anamespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00092">BasicTypes.h:92</a></div></div>
3775
3868
  <div class="ttc" id="anamespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
3776
3869
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
3777
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8a8c32a09340f491fffffcb07dd7a41"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">SVF::LLVMUtil::isIRFile</a></div><div class="ttdeci">bool isIRFile(const std::string &amp;filename)</div><div class="ttdoc">Check whether a file is an LLVM IR file.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00419">LLVMUtil.cpp:419</a></div></div>
3870
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8a8c32a09340f491fffffcb07dd7a41"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">SVF::LLVMUtil::isIRFile</a></div><div class="ttdeci">bool isIRFile(const std::string &amp;filename)</div><div class="ttdoc">Check whether a file is an LLVM IR file.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00486">LLVMUtil.cpp:486</a></div></div>
3778
3871
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a1cf2e4671b16b477cc779c72f2419234"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a1cf2e4671b16b477cc779c72f2419234">SVF::cppUtil::getBeforeBrackets</a></div><div class="ttdeci">std::string getBeforeBrackets(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00085">CppUtil.cpp:85</a></div></div>
3872
+ <div class="ttc" id="anamespaceSVF_html_a3bacb4f95c73e6d794901d01c6b65a83"><div class="ttname"><a href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">SVF::AllocaInst</a></div><div class="ttdeci">llvm::AllocaInst AllocaInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
3779
3873
  <div class="ttc" id="aLLVMUtil_8cpp_html_a211c0223a37893d84fb5e2fd2f9fc76b"><div class="ttname"><a href="LLVMUtil_8cpp.html#a211c0223a37893d84fb5e2fd2f9fc76b">vtblLabelBeforeDemangle</a></div><div class="ttdeci">const std::string vtblLabelBeforeDemangle</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00038">LLVMUtil.cpp:38</a></div></div>
3780
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a523a8c3f9bfaea178733822ac598d552"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">SVF::LLVMUtil::removeFunAnnotations</a></div><div class="ttdeci">void removeFunAnnotations(std::vector&lt; Function * &gt; &amp;removedFuncList)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00504">LLVMUtil.cpp:504</a></div></div>
3874
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a523a8c3f9bfaea178733822ac598d552"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a523a8c3f9bfaea178733822ac598d552">SVF::LLVMUtil::removeFunAnnotations</a></div><div class="ttdeci">void removeFunAnnotations(std::vector&lt; Function * &gt; &amp;removedFuncList)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00571">LLVMUtil.cpp:571</a></div></div>
3781
3875
  <div class="ttc" id="anamespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00110">BasicTypes.h:110</a></div></div>
3782
3876
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_af264312f0020bde9151697bccfde3263"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#af264312f0020bde9151697bccfde3263">SVF::SVFFunction::getReturnType</a></div><div class="ttdeci">const SVFType * getReturnType() const</div><div class="ttdoc">Returns the FunctionType.</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00389">SVFValue.h:389</a></div></div>
3783
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a206973624fcc58e6044c884dba23a754"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">SVF::LLVMUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01103">LLVMUtil.cpp:1103</a></div></div>
3784
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a151fd7fb2b2ebe72af7c417defbb4f4d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">SVF::LLVMUtil::getDataLayout</a></div><div class="ttdeci">static DataLayout * getDataLayout(Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00332">LLVMUtil.h:332</a></div></div>
3785
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_adfa4a4e6d13004d14137d9168bd32463"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">SVF::LLVMUtil::isInt2PtrConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isInt2PtrConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00244">LLVMUtil.h:244</a></div></div>
3877
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a206973624fcc58e6044c884dba23a754"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a206973624fcc58e6044c884dba23a754">SVF::LLVMUtil::isDestructor</a></div><div class="ttdeci">bool isDestructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01172">LLVMUtil.cpp:1172</a></div></div>
3878
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a151fd7fb2b2ebe72af7c417defbb4f4d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">SVF::LLVMUtil::getDataLayout</a></div><div class="ttdeci">static DataLayout * getDataLayout(Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00337">LLVMUtil.h:337</a></div></div>
3879
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_adfa4a4e6d13004d14137d9168bd32463"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">SVF::LLVMUtil::isInt2PtrConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isInt2PtrConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00249">LLVMUtil.h:249</a></div></div>
3786
3880
  <div class="ttc" id="aLLVMUtil_8cpp_html_a61c158146c07e77234eb4a2f9b940821"><div class="ttname"><a href="LLVMUtil_8cpp.html#a61c158146c07e77234eb4a2f9b940821">structName</a></div><div class="ttdeci">const std::string structName</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00044">LLVMUtil.cpp:44</a></div></div>
3787
3881
  <div class="ttc" id="anamespaceSVF_html_a962e9a9044a46fc4bd2367384f6e0827"><div class="ttname"><a href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">SVF::CastInst</a></div><div class="ttdeci">llvm::CastInst CastInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00156">BasicTypes.h:156</a></div></div>
3788
3882
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a0095d23a9c9d5d62ec4a23c56824b5f0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">SVF::LLVMUtil::getLLVMCallSite</a></div><div class="ttdeci">const CallBase * getLLVMCallSite(const Value *value)</div><div class="ttdoc">Return LLVM callsite given a value.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00068">LLVMUtil.h:68</a></div></div>
@@ -3800,31 +3894,32 @@ Functions</h2></td></tr>
3800
3894
  <div class="ttc" id="anamespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
3801
3895
  <div class="ttc" id="aclassSVF_1_1StInfo_html_ac0a9f85f90524abfd519d3cd2ac95a56"><div class="ttname"><a href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">SVF::StInfo::getFlattenFieldTypes</a></div><div class="ttdeci">std::vector&lt; const SVFType * &gt; &amp; getFlattenFieldTypes()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00192">SVFType.h:192</a></div></div>
3802
3896
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abb4b5ed04ec70a2e7fca8198132370cf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abb4b5ed04ec70a2e7fca8198132370cf">SVF::LLVMUtil::basicBlockHasRetInst</a></div><div class="ttdeci">bool basicBlockHasRetInst(const BasicBlock *bb)</div><div class="ttdoc">Return true if the function has a return instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00104">LLVMUtil.cpp:104</a></div></div>
3803
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa841a295ec803b6a1f2bd248f63f863f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">SVF::LLVMUtil::getClassNameOfThisPtr</a></div><div class="ttdeci">std::string getClassNameOfThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01189">LLVMUtil.cpp:1189</a></div></div>
3804
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa81614cdb6a2a912638d5dc980480af7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa81614cdb6a2a912638d5dc980480af7">SVF::LLVMUtil::getRefTypeOfHeapAllocOrStatic</a></div><div class="ttdeci">const PointerType * getRefTypeOfHeapAllocOrStatic(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00155">LLVMUtil.h:155</a></div></div>
3897
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa841a295ec803b6a1f2bd248f63f863f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa841a295ec803b6a1f2bd248f63f863f">SVF::LLVMUtil::getClassNameOfThisPtr</a></div><div class="ttdeci">std::string getClassNameOfThisPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01258">LLVMUtil.cpp:1258</a></div></div>
3898
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa81614cdb6a2a912638d5dc980480af7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa81614cdb6a2a912638d5dc980480af7">SVF::LLVMUtil::getRefTypeOfHeapAllocOrStatic</a></div><div class="ttdeci">const PointerType * getRefTypeOfHeapAllocOrStatic(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00160">LLVMUtil.h:160</a></div></div>
3899
+ <div class="ttc" id="anamespaceSVF_html_adc8b60ca7d60cf6c81feae20e4a04c63"><div class="ttname"><a href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">SVF::CallInst</a></div><div class="ttdeci">llvm::CallInst CallInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00145">BasicTypes.h:145</a></div></div>
3805
3900
  <div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html_a5cd207bce618521166e6fa235014b297"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a5cd207bce618521166e6fa235014b297">SVF::cppUtil::DemangledName::className</a></div><div class="ttdeci">std::string className</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00048">CppUtil.h:48</a></div></div>
3806
- <div class="ttc" id="anamespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00273">BasicTypes.h:273</a></div></div>
3807
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_acee7c2fb08e111eda4d91ce5479de05e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">SVF::LLVMUtil::isUnusedGlobalVariable</a></div><div class="ttdeci">bool isUnusedGlobalVariable(const GlobalVariable &amp;global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00585">LLVMUtil.cpp:585</a></div></div>
3901
+ <div class="ttc" id="anamespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00274">BasicTypes.h:274</a></div></div>
3902
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_acee7c2fb08e111eda4d91ce5479de05e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#acee7c2fb08e111eda4d91ce5479de05e">SVF::LLVMUtil::isUnusedGlobalVariable</a></div><div class="ttdeci">bool isUnusedGlobalVariable(const GlobalVariable &amp;global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00652">LLVMUtil.cpp:652</a></div></div>
3808
3903
  <div class="ttc" id="astructSVF_1_1cppUtil_1_1DemangledName_html_a1dd17b240663bc9412adefde82385e02"><div class="ttname"><a href="structSVF_1_1cppUtil_1_1DemangledName.html#a1dd17b240663bc9412adefde82385e02">SVF::cppUtil::DemangledName::funcName</a></div><div class="ttdeci">std::string funcName</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8h_source.html#l00049">CppUtil.h:49</a></div></div>
3809
3904
  <div class="ttc" id="anamespaceSVF_html_afc1b50355821e7299df03b026e36f1df"><div class="ttname"><a href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">SVF::User</a></div><div class="ttdeci">llvm::User User</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00140">BasicTypes.h:140</a></div></div>
3810
3905
  <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>
3811
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2b32283ee2dbb9cef1d17ab6f2719e0c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">SVF::LLVMUtil::getSourceLocOfFunction</a></div><div class="ttdeci">const std::string getSourceLocOfFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00790">LLVMUtil.cpp:790</a></div></div>
3812
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a207fe02ded216fd0412fc894e13bee6e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">SVF::LLVMUtil::getClassNameFromType</a></div><div class="ttdeci">std::string getClassNameFromType(const StructType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01171">LLVMUtil.cpp:1171</a></div></div>
3906
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2b32283ee2dbb9cef1d17ab6f2719e0c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2b32283ee2dbb9cef1d17ab6f2719e0c">SVF::LLVMUtil::getSourceLocOfFunction</a></div><div class="ttdeci">const std::string getSourceLocOfFunction(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00857">LLVMUtil.cpp:857</a></div></div>
3907
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a207fe02ded216fd0412fc894e13bee6e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a207fe02ded216fd0412fc894e13bee6e">SVF::LLVMUtil::getClassNameFromType</a></div><div class="ttdeci">std::string getClassNameFromType(const StructType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01240">LLVMUtil.cpp:1240</a></div></div>
3813
3908
  <div class="ttc" id="anamespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
3814
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4c94a6c02fb89c1a1604c87414956acd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">SVF::LLVMUtil::getPrevInsts</a></div><div class="ttdeci">void getPrevInsts(const Instruction *curInst, std::vector&lt; const SVFInstruction * &gt; &amp;instList)</div><div class="ttdoc">Get the previous instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00316">LLVMUtil.cpp:316</a></div></div>
3909
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4c94a6c02fb89c1a1604c87414956acd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">SVF::LLVMUtil::getPrevInsts</a></div><div class="ttdeci">void getPrevInsts(const Instruction *curInst, std::vector&lt; const SVFInstruction * &gt; &amp;instList)</div><div class="ttdoc">Get the previous instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00381">LLVMUtil.cpp:381</a></div></div>
3815
3910
  <div class="ttc" id="aSVFFileSystem_8cpp_html_ab25baccb41e3b67ef0bfdaa1336c9649"><div class="ttname"><a href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a></div><div class="ttdeci">#define F(f)</div></div>
3816
3911
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4638a12f5481dff947b59cf8353e619b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4638a12f5481dff947b59cf8353e619b">SVF::LLVMUtil::isIntrinsicFun</a></div><div class="ttdeci">bool isIntrinsicFun(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00202">LLVMUtil.cpp:202</a></div></div>
3817
3912
  <div class="ttc" id="anamespaceSVF_html_a3011dbac9102f044ad5f36a4ad3d4a71"><div class="ttname"><a href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">SVF::NamedMDNode</a></div><div class="ttdeci">llvm::NamedMDNode NamedMDNode</div><div class="ttdoc">LLVM metadata and debug information.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
3818
3913
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a5a7dc8680a9714e08b01dd339b85bb20"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a5a7dc8680a9714e08b01dd339b85bb20">SVF::LLVMUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00046">LLVMUtil.h:46</a></div></div>
3819
3914
  <div class="ttc" id="anamespaceSVF_html_a28eec26ec8edaa5e96aecfeb01f6c0d4"><div class="ttname"><a href="namespaceSVF.html#a28eec26ec8edaa5e96aecfeb01f6c0d4">SVF::MDString</a></div><div class="ttdeci">llvm::MDString MDString</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
3820
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a17cce1a11e1bfc342a9e3e79fe35deef"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a17cce1a11e1bfc342a9e3e79fe35deef">SVF::LLVMUtil::isNoCallerFunction</a></div><div class="ttdeci">bool isNoCallerFunction(const Function *fun)</div><div class="ttdoc">Function does not have any possible caller in the call graph.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00195">LLVMUtil.h:195</a></div></div>
3821
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afbd60d5443c7fa1448813d00bb5d0fa7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">SVF::LLVMUtil::getNextInsts</a></div><div class="ttdeci">void getNextInsts(const Instruction *curInst, std::vector&lt; const SVFInstruction * &gt; &amp;instList)</div><div class="ttdoc">Get the next instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00287">LLVMUtil.cpp:287</a></div></div>
3915
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a17cce1a11e1bfc342a9e3e79fe35deef"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a17cce1a11e1bfc342a9e3e79fe35deef">SVF::LLVMUtil::isNoCallerFunction</a></div><div class="ttdeci">bool isNoCallerFunction(const Function *fun)</div><div class="ttdoc">Function does not have any possible caller in the call graph.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00200">LLVMUtil.h:200</a></div></div>
3916
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afbd60d5443c7fa1448813d00bb5d0fa7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">SVF::LLVMUtil::getNextInsts</a></div><div class="ttdeci">void getNextInsts(const Instruction *curInst, std::vector&lt; const SVFInstruction * &gt; &amp;instList)</div><div class="ttdoc">Get the next instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00352">LLVMUtil.cpp:352</a></div></div>
3822
3917
  <div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00626">SVFValue.h:626</a></div></div>
3823
3918
  <div class="ttc" id="anamespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00054">SVFType.h:54</a></div></div>
3824
3919
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a003b769751b93b94bdb011bd704cfde1"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">SVF::LLVMUtil::isIntrinsicInst</a></div><div class="ttdeci">bool isIntrinsicInst(const Instruction *inst)</div><div class="ttdoc">Return true if it is an intrinsic instruction.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00216">LLVMUtil.cpp:216</a></div></div>
3825
3920
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00119">LLVMUtil.h:119</a></div></div>
3826
3921
  <div class="ttc" id="anamespaceSVF_html_a7332f8059ea95472dcc231de884a5768"><div class="ttname"><a href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">SVF::ConstantData</a></div><div class="ttdeci">llvm::ConstantData ConstantData</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00114">BasicTypes.h:114</a></div></div>
3827
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6dd1590b82d2bd86766886bd21bc2b72"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">SVF::LLVMUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01072">LLVMUtil.cpp:1072</a></div></div>
3922
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a6dd1590b82d2bd86766886bd21bc2b72"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6dd1590b82d2bd86766886bd21bc2b72">SVF::LLVMUtil::isConstructor</a></div><div class="ttdeci">bool isConstructor(const Function *F)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01141">LLVMUtil.cpp:1141</a></div></div>
3828
3923
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
3829
3924
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00056">SVFUtil.h:56</a></div></div>
3830
3925
  <div class="ttc" id="anamespaceSVF_html_a58cdfbc4160cae08745b67844ac29801"><div class="ttname"><a href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">SVF::Argument</a></div><div class="ttdeci">llvm::Argument Argument</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00143">BasicTypes.h:143</a></div></div>