svf-tools 1.0.372 → 1.0.376

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 (254) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +5 -6
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +10 -10
  4. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
  9. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  10. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +15 -15
  14. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +7 -7
  16. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +7 -7
  17. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -10
  20. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  21. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +6 -6
  22. package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
  23. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/LLVMUtil_8h.html +3 -3
  25. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +2 -2
  26. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +11 -11
  28. package/SVF-doxygen/html/html/LocationSet_8h_source.html +10 -11
  29. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +10 -10
  30. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/Options_8cpp_source.html +22 -21
  32. package/SVF-doxygen/html/html/Options_8h_source.html +22 -21
  33. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +17 -17
  35. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +8 -8
  37. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  38. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +11 -11
  39. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +14 -14
  40. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +8 -10
  42. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +72 -73
  43. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +37 -35
  44. package/SVF-doxygen/html/html/SVFIR_8h_source.html +66 -68
  45. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +5 -5
  48. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +18 -19
  50. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +121 -127
  51. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +6 -6
  52. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  53. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +39 -30
  54. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +10 -7
  55. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +93 -53
  56. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +82 -85
  57. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +5 -5
  58. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +17 -16
  60. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  62. package/SVF-doxygen/html/html/VFG_8cpp_source.html +7 -7
  63. package/SVF-doxygen/html/html/VFG_8h_source.html +2 -2
  64. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +4 -4
  65. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  66. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +5 -5
  67. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  69. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  70. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +8 -8
  71. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +8 -8
  72. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +4 -4
  73. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +5 -6
  74. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +3 -3
  75. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +12 -13
  76. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
  77. package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +2 -2
  78. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
  79. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +22 -25
  81. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +16 -25
  82. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +22 -25
  83. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +17 -26
  84. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +23 -26
  85. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +17 -26
  86. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
  87. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +5 -5
  89. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +6 -6
  90. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  91. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  92. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +12 -12
  93. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +22 -25
  94. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +18 -27
  95. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +21 -24
  96. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +18 -27
  97. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +22 -25
  98. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +19 -28
  99. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
  100. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +10 -10
  101. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +8 -8
  102. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -17
  103. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +24 -27
  107. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +42 -51
  108. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +12 -12
  109. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +30 -35
  110. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +34 -106
  111. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  112. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +3 -3
  113. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  114. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +2 -2
  115. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  116. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +15 -16
  117. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +47 -81
  118. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +12 -12
  119. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +87 -87
  120. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +1 -1
  121. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  122. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +7 -8
  123. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +162 -211
  124. package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +22 -25
  125. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +23 -32
  126. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +55 -54
  128. package/SVF-doxygen/html/html/classSVF_1_1Options.html +47 -21
  129. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  130. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +4 -4
  131. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +18 -18
  132. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
  133. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +30 -30
  134. package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +22 -25
  135. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +18 -27
  136. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
  137. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +4 -4
  138. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +214 -227
  139. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +82 -83
  140. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +582 -529
  141. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +23 -26
  143. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +54 -151
  144. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +6 -6
  145. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +43 -43
  147. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder-members.html +10 -7
  148. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +182 -72
  149. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +9 -11
  150. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +131 -162
  151. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +5 -5
  152. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
  153. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +26 -25
  154. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
  155. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +8 -8
  156. package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +21 -24
  157. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +16 -25
  158. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +22 -25
  159. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +18 -27
  160. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +7 -7
  161. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +5 -5
  162. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
  163. package/SVF-doxygen/html/html/functions_a.html +24 -24
  164. package/SVF-doxygen/html/html/functions_c.html +1 -1
  165. package/SVF-doxygen/html/html/functions_f.html +19 -22
  166. package/SVF-doxygen/html/html/functions_func.html +24 -24
  167. package/SVF-doxygen/html/html/functions_func_c.html +1 -1
  168. package/SVF-doxygen/html/html/functions_func_g.html +20 -23
  169. package/SVF-doxygen/html/html/functions_func_h.html +1 -1
  170. package/SVF-doxygen/html/html/functions_func_i.html +11 -17
  171. package/SVF-doxygen/html/html/functions_func_l.html +2 -2
  172. package/SVF-doxygen/html/html/functions_func_o.html +4 -4
  173. package/SVF-doxygen/html/html/functions_func_r.html +5 -2
  174. package/SVF-doxygen/html/html/functions_g.html +18 -21
  175. package/SVF-doxygen/html/html/functions_h.html +1 -1
  176. package/SVF-doxygen/html/html/functions_i.html +12 -21
  177. package/SVF-doxygen/html/html/functions_l.html +8 -8
  178. package/SVF-doxygen/html/html/functions_m.html +4 -1
  179. package/SVF-doxygen/html/html/functions_o.html +22 -18
  180. package/SVF-doxygen/html/html/functions_p.html +3 -3
  181. package/SVF-doxygen/html/html/functions_r.html +5 -2
  182. package/SVF-doxygen/html/html/functions_rela.html +2 -1
  183. package/SVF-doxygen/html/html/functions_s.html +6 -5
  184. package/SVF-doxygen/html/html/functions_t.html +4 -4
  185. package/SVF-doxygen/html/html/functions_v.html +3 -3
  186. package/SVF-doxygen/html/html/functions_vars_f.html +0 -3
  187. package/SVF-doxygen/html/html/functions_vars_i.html +3 -6
  188. package/SVF-doxygen/html/html/functions_vars_m.html +3 -0
  189. package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
  190. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +8 -8
  191. package/SVF-doxygen/html/html/namespacemembers_func.html +1 -1
  192. package/SVF-doxygen/html/html/namespacemembers_s.html +1 -1
  193. package/SVF-doxygen/html/html/search/all_1.js +22 -22
  194. package/SVF-doxygen/html/html/search/all_10.js +4 -4
  195. package/SVF-doxygen/html/html/search/all_12.js +5 -4
  196. package/SVF-doxygen/html/html/search/all_13.js +6 -6
  197. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  198. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  199. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  200. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  201. package/SVF-doxygen/html/html/search/all_6.js +0 -1
  202. package/SVF-doxygen/html/html/search/all_7.js +9 -9
  203. package/SVF-doxygen/html/html/search/all_8.js +1 -1
  204. package/SVF-doxygen/html/html/search/all_9.js +2 -5
  205. package/SVF-doxygen/html/html/search/all_c.js +4 -4
  206. package/SVF-doxygen/html/html/search/all_d.js +1 -0
  207. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  208. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  209. package/SVF-doxygen/html/html/search/functions_0.js +22 -22
  210. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  211. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  212. package/SVF-doxygen/html/html/search/functions_6.js +9 -9
  213. package/SVF-doxygen/html/html/search/functions_7.js +1 -1
  214. package/SVF-doxygen/html/html/search/functions_8.js +1 -3
  215. package/SVF-doxygen/html/html/search/functions_a.js +1 -1
  216. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  217. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  218. package/SVF-doxygen/html/html/search/functions_f.js +1 -0
  219. package/SVF-doxygen/html/html/search/related_9.js +1 -1
  220. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  221. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  222. package/SVF-doxygen/html/html/search/variables_6.js +0 -1
  223. package/SVF-doxygen/html/html/search/variables_9.js +1 -2
  224. package/SVF-doxygen/html/html/search/variables_d.js +1 -0
  225. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  226. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  227. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +7 -21
  228. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +3 -3
  229. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  230. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +4 -4
  231. package/SVF-doxygen/html/html/svf-ex_8cpp.html +2 -2
  232. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
  233. package/include/MemoryModel/LocationSet.h +0 -6
  234. package/include/MemoryModel/SVFIR.h +5 -37
  235. package/include/MemoryModel/SVFStatements.h +1 -1
  236. package/include/MemoryModel/SVFVariables.h +4 -21
  237. package/include/MemoryModel/SymbolTableInfo.h +8 -24
  238. package/include/SVF-FE/LLVMUtil.h +1 -1
  239. package/include/SVF-FE/SVFIRBuilder.h +91 -108
  240. package/include/SVF-FE/SymbolTableBuilder.h +9 -2
  241. package/include/Util/Options.h +1 -0
  242. package/lib/Graphs/ICFG.cpp +1 -47
  243. package/lib/MemoryModel/LocationSet.cpp +7 -3
  244. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  245. package/lib/MemoryModel/SVFIR.cpp +61 -19
  246. package/lib/MemoryModel/SVFVariables.cpp +6 -13
  247. package/lib/MemoryModel/SymbolTableInfo.cpp +57 -68
  248. package/lib/SVF-FE/LLVMUtil.cpp +3 -3
  249. package/lib/SVF-FE/SVFIRBuilder.cpp +83 -136
  250. package/lib/SVF-FE/SymbolTableBuilder.cpp +81 -23
  251. package/lib/Util/Options.cpp +6 -0
  252. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  253. package/lib/WPA/AndersenStat.cpp +1 -1
  254. package/package.json +1 -1
@@ -66,94 +66,134 @@ $(function() {
66
66
  <div class="title">SymbolTableInfo.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="SymbolTableInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- SymbolTableInfo.cpp -- Symbol information from IR------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * SymbolTableInfo.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: Nov 11, 2013</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SymbolTableInfo_8h.html">MemoryModel/SymbolTableInfo.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>* SymbolTableInfo::dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::symInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> StInfo::maxFieldLimit = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986"> 48</a></span>&#160;<span class="keywordtype">void</span> StInfo::addFldWithType(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemIdx)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; fldIdxVec.push_back(fldIdx);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; elemIdxVec.push_back(elemIdx);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; fldIdx2TypeMap[fldIdx] = type;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">//{@</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#acf1ba3bc3ffbd2f7d457b613b6c5f4be"> 59</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* StInfo::getOriginalFieldType(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, const Type*&gt;::const_iterator</a> it = fldIdx2TypeMap.find(fldIdx);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span>(it!=fldIdx2TypeMap.end())</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#aecd92dab41e8200a5dd4a10085ad882b"> 66</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* StInfo::getFlatternedFieldType(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>&amp; fallenedFld : finfo){</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span>(fallenedFld.getFlattenFldIdx() == fldIdx)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> fallenedFld.getFlattenElemTy();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08"> 75</a></span>&#160;SymbolTableInfo::TypeToFieldInfoMap::iterator SymbolTableInfo::getStructInfoIter(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(T);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; TypeToFieldInfoMap::iterator it = typeToFieldInfo.find(T);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (it != typeToFieldInfo.end())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> it;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; collectTypeInfo(T);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> typeToFieldInfo.find(T);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a76971ba9b579907ef937cd7adda89562"> 91</a></span>&#160;<a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* SymbolTableInfo::createObjTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* typeInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>(StInfo::getMaxFieldLimit(),type);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; typeInfo-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">analyzeHeapObjType</a>(type);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> typeInfo;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;}</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 101</a></span>&#160;<a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::SymbolInfo()</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;{</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (symInfo == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; symInfo-&gt;setModelConstants(Options::ModelConsts);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> symInfo;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 114</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::collectTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typeToFieldInfo.find(ty) == typeToFieldInfo.end() &amp;&amp; <span class="stringliteral">&quot;this type has been collected before&quot;</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(ty))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; collectArrayInfo(aty);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast&lt;StructType&gt;(ty))</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; collectStructInfo(sty);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 130</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::collectArrayInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;{</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty-&gt;getElementType();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(elemTy))</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; elemTy = aty-&gt;getElementType();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(totalElemNum);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; j++)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* fieldTy = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(idx, fieldTy);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; outArrayElemNum; i++)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, elemTy, (i * nfE * totalElemNum)/outArrayElemNum);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfE, nfE * totalElemNum);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 169</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::collectStructInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// The offset when considering array stride info</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">for</span> (StructType::element_iterator it = sty-&gt;element_begin(), ie =</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; sty-&gt;element_end(); it != ie; ++it)</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(nf, et, strideOffset);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType&gt;(et) || SVFUtil::isa&lt;ArrayType&gt;(et))</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">//Copy ST&#39;s info, whose element 0 is the size of ST itself.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; j++)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx = nf + subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(fldIdx, elemTy);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; nf += nfE;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; strideOffset += nfE * subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">else</span> <span class="comment">//simple type</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(nf, et);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; nf += 1;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; strideOffset += 1;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nf,strideOffset);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (nf &gt; maxStSize)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; maxStruct = sty;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; maxStSize = nf;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 224</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::collectSimpleTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, ty, 0);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, ty);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee"> 242</a></span>&#160;<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> SymbolTableInfo::getModulusOffset(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;{</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span>(offset &lt; 0)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;try to create a gep node with negative offset.&quot;</span>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; offset = abs(offset);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxOffset = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (maxOffset != 0)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; offset = offset % maxOffset;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; offset = 0;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e"> 269</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::destroy()</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">for</span> (IDToMemMapTy::iterator iter = objMap.begin(); iter != objMap.end();</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; ++iter)</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (iter-&gt;second)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">delete</span> iter-&gt;second;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">for</span> (TypeToFieldInfoMap::iterator iter = typeToFieldInfo.begin();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; iter != typeToFieldInfo.end(); ++iter)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">if</span> (iter-&gt;second)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">delete</span> iter-&gt;second;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span>(dl){</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keyword">delete</span> dl;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span>(mod){</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">delete</span> mod;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; mod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90"> 298</a></span>&#160;<span class="keywordtype">bool</span> SymbolTableInfo::isNullPtrSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;{</div><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#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* v = SVFUtil::dyn_cast&lt;Constant&gt;(val))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">return</span> v-&gt;isNullValue() &amp;&amp; v-&gt;getType()-&gt;isPointerTy();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;}</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb"> 310</a></span>&#160;<span class="keywordtype">bool</span> SymbolTableInfo::isBlackholeSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> (SVFUtil::isa&lt;UndefValue&gt;(val));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35"> 318</a></span>&#160;<span class="keywordtype">bool</span> SymbolTableInfo::isConstantObjSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</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><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(v))</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v-&gt;hasInitializer()){</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span>(v-&gt;isExternalLinkage(v-&gt;getLinkage()))</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = getStructInfo(v-&gt;getInitializer()-&gt;getType());</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt; &amp;fields = stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;FlattenedFieldInfo&gt;::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> &amp;field = *it;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = field.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>();</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;FunctionType&gt;(elemTy) &amp;&amp; <span class="stringliteral">&quot;Initializer of a global is a function?&quot;</span>);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(elemTy))</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">return</span> v-&gt;isConstant();</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVFUtil::isConstantData</a>(val);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 350</a></span>&#160;<a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createBlkObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;}</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 359</a></span>&#160;<a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createConstantObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;{</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;}</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 368</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createDummyObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;{</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end() &amp;&amp; <span class="stringliteral">&quot;this dummy obj has been created before&quot;</span>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(type));</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; objMap[symId] = memObj;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> memObj;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;}</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a747073d433e05e15085a2675f6a1e18f"> 377</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getNumOfFlattenElements(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenElements();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;}</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a5ef16ff6a5787d89fd3f829bf518cf87"> 383</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getNumOfFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;{</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenFields();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;}</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a439024050e7b78021259ca5a2d68a83f"> 389</a></span>&#160;<span class="keyword">const</span> std::vector&lt;u32_t&gt;&amp; SymbolTableInfo::getFlattenedElemIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;{</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getFlattenedElemIdxVec();</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;}</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af0477d1e8af9ad51a9884e687fcdf29b"> 395</a></span>&#160;<span class="keyword">const</span> std::vector&lt;u32_t&gt;&amp; SymbolTableInfo::getFlattenedFieldIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getFlattenedFieldIdxVec();</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;}</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0"> 400</a></span>&#160;<span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt;&amp; SymbolTableInfo::getFlattenedFieldInfoVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;{</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getFlattenedFieldInfoVec();</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;}</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49"> 405</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getOriginalFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(baseType)-&gt;second-&gt;getOriginalFieldType(field_idx);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;}</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4"> 410</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getFlatternedFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx){</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(baseType)-&gt;second-&gt;getFlatternedFieldType(field_idx);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;}</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 417</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::printFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;{</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *at = SVFUtil::dyn_cast&lt;ArrayType&gt; (type))</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; at-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\tarray type &quot;</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t [element size = &quot;</span> &lt;&lt; getTypeSizeInBytes(at-&gt;getElementType()) &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *st = SVFUtil::dyn_cast&lt;StructType&gt; (type))</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; st-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; std::vector&lt;FlattenedFieldInfo&gt;&amp; finfo = getStructInfo(st)-&gt;getFlattenedFieldInfoVec();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;FlattenedFieldInfo&gt;::iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; it!=eit; ++it, field_idx++)</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; \tField_idx = &quot;</span> &lt;&lt; (*it).getFlattenFldIdx();</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;, field type: &quot;</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; (*it).getFlattenElemTy()-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;, field size: &quot;</span> &lt;&lt; getTypeSizeInBytes((*it).getFlattenElemTy());</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt= SVFUtil::dyn_cast&lt;PointerType&gt; (type))</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sizeInBits = getTypeSizeInBytes(type);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(pt-&gt;getElementType());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; pt-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot;\t [pointer size = &quot;</span> &lt;&lt; sizeInBits &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot;\t [target size = &quot;</span> &lt;&lt; eSize &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* fu= SVFUtil::dyn_cast&lt;FunctionType&gt; (type))</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; fu-&gt;getReturnType()-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;(Function)}\n\n&quot;</span>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type-&gt;isSingleValueType() &amp;&amp; <span class="stringliteral">&quot;not a single value type, then what else!!&quot;</span>);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(type);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; type-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot;\t [object size = &quot;</span> &lt;&lt; eSize &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 481</a></span>&#160;std::string SymbolTableInfo::toString(<a class="code" href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SYMTYPE</a> symtype)</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;{</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">switch</span> (symtype) {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlackHole&quot;</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ConstantObj&quot;</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlkPtr&quot;</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NullPtr&quot;</span>;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ValSym&quot;</span>;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ObjSym&quot;</span>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;RetSym&quot;</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;VarargSym&quot;</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Invalid SYMTYPE&quot;</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;}</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 514</a></span>&#160;<span class="keywordtype">void</span> SymbolTableInfo::dump()</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;{</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;SymID, Value*&gt;</a> idmap;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; ++iter)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; ++iter)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; ++iter)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; ++iter)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;{SymbolTableInfo \n&quot;</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; iter.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(iter.second) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;}</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment"> * Get the type size given a target data layout</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e"> 560</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;{</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span>(type-&gt;isSized())</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">return</span> getDataLayout(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule())-&gt;getTypeStoreSize(const_cast&lt;Type*&gt;(type));</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;}</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ada63ac47515daa4402914083058baec8"> 570</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;{</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = getDataLayout(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule())-&gt;getStructLayout( const_cast&lt;StructType *&gt;(sty) );</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">if</span>(sty-&gt;isOpaque())</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> stTySL-&gt;getElementOffset(field_idx);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;}</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78"> 586</a></span>&#160;<span class="keywordtype">void</span> ObjTypeInfo::analyzeHeapObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;{</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; setFlag(HEAP_OBJ);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;}</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#aa8b97a2cbd2de56b3c6c5c0e2e0a2211"> 597</a></span>&#160;<span class="keywordtype">void</span> ObjTypeInfo::analyzeStaticObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;{</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; setFlag(STATIC_OBJ);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;}</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac"> 608</a></span>&#160;<span class="keywordtype">bool</span> ObjTypeInfo::isNonPtrFieldObj(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;{</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">if</span> (isHeap() || isStaticObj())</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ety = getType();</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *AT= SVFUtil::dyn_cast&lt;ArrayType&gt;(ety))</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; ety = AT-&gt;getElementType();</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType&gt;(ety) || SVFUtil::isa&lt;ArrayType&gt;(ety))</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordtype">bool</span> hasIntersection = <span class="keyword">false</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> vector&lt;FlattenedFieldInfo&gt; &amp;infovec = SymbolTableInfo::SymbolInfo()-&gt;getFlattenedFieldInfoVec(ety);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; vector&lt;FlattenedFieldInfo&gt;::const_iterator it = infovec.begin();</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; vector&lt;FlattenedFieldInfo&gt;::const_iterator eit = infovec.end();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">for</span> (; it != eit; ++it)</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>&amp; fieldLS = *it;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">if</span> (ls.<a class="code" href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">intersects</a>(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(fieldLS)))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; hasIntersection = <span class="keyword">true</span>;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">if</span> (fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>()-&gt;isPointerTy())</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="comment">//assert(hasIntersection &amp;&amp; &quot;cannot find field of specified offset&quot;);</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span> (isStaticObj() || isHeap())</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="comment">// TODO: Objects which cannot find proper field for a certain offset including</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">// arguments in main(), static objects allocated before main and heap</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="comment">// objects. Right now they&#39;re considered to have infinite fields and we</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="comment">// treat each field as pointers conservatively.</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="comment">// Try to model static and heap objects more accurately in the future.</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="comment">// TODO: Using new memory model (locMM) may create objects with spurious offset</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">// as we simply return new offset by mod operation without checking its</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="comment">// correctness in LocSymTableInfo::getModulusOffset(). So the following</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// assertion may fail. Try to refine the new memory model.</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="comment">//assert(ls.getConstantFieldIdx() == 0 &amp;&amp; &quot;cannot get a field from a non-struct type&quot;);</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">return</span> (hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;}</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 665</a></span>&#160;<span class="keywordtype">void</span> MemObj::setFieldSensitive()</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;{</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; typeInfo-&gt;setMaxFieldOffsetLimit(StInfo::getMaxFieldLimit());</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;}</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 674</a></span>&#160;MemObj::MemObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* ti, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val) :</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; symId(id), refVal(val), typeInfo(ti)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;{</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;}</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;</div><div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 682</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">MemObj::isBlackHoleObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;}</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 689</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">MemObj::getType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* type = SVFUtil::dyn_cast&lt;PointerType&gt;(<a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>()))</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> type-&gt;getElementType();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>() &amp;&amp; SVFUtil::isa&lt;Instruction&gt;(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVFUtil::getTypeOfHeapAlloc</a>(SVFUtil::cast&lt;Instruction&gt;(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;}</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 706</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">MemObj::destroy</a>()</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;{</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;}</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88"> 713</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">MemObj::getMaxFieldOffsetLimit</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;}</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 719</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">MemObj::isFieldInsensitive</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>() == 0;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;}</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 725</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">MemObj::setFieldInsensitive</a>()</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;{</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">setMaxFieldOffsetLimit</a>(0);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;}</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 730</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">MemObj::isFunction</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">isFunction</a>();</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;}</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;</div><div class="line"><a name="l00735"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 735</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">MemObj::isGlobalObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">isGlobalObj</a>();</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;}</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 740</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">MemObj::isStaticObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>();</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;}</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 745</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">MemObj::isStack</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">isStack</a>();</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;}</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 750</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">MemObj::isHeap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>();</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;}</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;</div><div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 755</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">MemObj::isStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">isStruct</a>();</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;}</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 760</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">MemObj::isArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">isArray</a>();</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;}</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 765</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">MemObj::isVarStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">isVarStruct</a>();</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;}</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="line"><a name="l00770"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6"> 770</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">MemObj::isVarArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">isVarArray</a>();</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;}</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;</div><div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f"> 775</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">MemObj::isConstantStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">isConstantStruct</a>();</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;}</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;</div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb"> 780</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">MemObj::isConstantArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">isConstantArray</a>();</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;}</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;</div><div class="line"><a name="l00785"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0"> 785</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">MemObj::isConstDataOrConstGlobal</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">isConstDataOrConstGlobal</a>();</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;}</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16"> 790</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">MemObj::isConstantData</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">isConstantData</a>();</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;}</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;</div><div class="line"><a name="l00795"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082"> 795</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">MemObj::hasPtrObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>();</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;}</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;</div><div class="line"><a name="l00800"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e"> 800</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">MemObj::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)<span class="keyword"> const</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;}</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;</div><div class="line"><a name="l00805"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7"> 805</a></span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">MemObj::toString</a>()<span class="keyword"> const</span>{</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; std::string str;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;MemObj : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>())&lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;}</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div><div class="ttc" id="classSVF_1_1MemObj_html_a750770ea992d39b22c8b2dda9aff2eaf"><div class="ttname"><a href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">SVF::MemObj::typeInfo</a></div><div class="ttdeci">ObjTypeInfo * typeInfo</div><div class="ttdoc">Type information of this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00420">SymbolTableInfo.h:420</a></div></div>
70
- <div class="ttc" id="classSVF_1_1MemObj_html_a132df66e2751e5db6b0ba82d767a3286"><div class="ttname"><a href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">SVF::MemObj::isStruct</a></div><div class="ttdeci">bool isStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00755">SymbolTableInfo.cpp:755</a></div></div>
71
- <div class="ttc" id="classSVF_1_1StInfo_html_a1a8be773f23b5a5fd36d44698bae9986"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">SVF::StInfo::addFldWithType</a></div><div class="ttdeci">void addFldWithType(u32_t fldIdx, const Type *type, u32_t elemIdx)</div><div class="ttdoc">Add field index and element index and their corresponding type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00048">SymbolTableInfo.cpp:48</a></div></div>
72
- <div class="ttc" id="classSVF_1_1MemObj_html_a7b890ca9e93b1c61cc6437b7e6a82a8c"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">SVF::MemObj::isBlackHoleObj</a></div><div class="ttdeci">bool isBlackHoleObj() const</div><div class="ttdoc">Whether it is a black hole object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00682">SymbolTableInfo.cpp:682</a></div></div>
73
- <div class="ttc" id="classSVF_1_1LocationSet_html_ab987c41ffdae931d941f89d03ed09146"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">s64_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00120">LocationSet.h:120</a></div></div>
69
+ <a href="SymbolTableInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- SymbolTableInfo.cpp -- Symbol information from IR------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * SymbolTableInfo.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: Nov 11, 2013</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SymbolTableInfo_8h.html">MemoryModel/SymbolTableInfo.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>* SymbolTableInfo::dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::symInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> StInfo::maxFieldLimit = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a351edf73b2b035ce61a99a10b3d9de87"> 47</a></span>&#160;ObjTypeInfo::ObjTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* t, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> max) : type(t), flags(0), maxOffsetLimit(max)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(t &amp;&amp; <span class="stringliteral">&quot;no type information for this object?&quot;</span>);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a57d714a511273b8275374cd4c7f14373"> 53</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html#a57d714a511273b8275374cd4c7f14373">ObjTypeInfo::resetTypeForHeapStaticObj</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* t){</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((<a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>() || <a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>()) &amp;&amp; <span class="stringliteral">&quot;can only reset the inferred type for heap and static objects!&quot;</span>);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a> = t;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986"> 59</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">StInfo::addFldWithType</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a>, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemIdx)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; fldIdxVec.push_back(fldIdx);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; elemIdxVec.push_back(elemIdx);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; fldIdx2TypeMap[fldIdx] = <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">//{@</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#acf1ba3bc3ffbd2f7d457b613b6c5f4be"> 70</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1StInfo.html#acf1ba3bc3ffbd2f7d457b613b6c5f4be">StInfo::getOriginalFieldType</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, const Type*&gt;::const_iterator</a> it = fldIdx2TypeMap.find(fldIdx);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span>(it!=fldIdx2TypeMap.end())</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#aecd92dab41e8200a5dd4a10085ad882b"> 77</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1StInfo.html#aecd92dab41e8200a5dd4a10085ad882b">StInfo::getFlatternedFieldType</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>&amp; fallenedFld : finfo){</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span>(fallenedFld.getFlattenFldIdx() == fldIdx)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> fallenedFld.getFlattenElemTy();</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08"> 86</a></span>&#160;SymbolTableInfo::TypeToFieldInfoMap::iterator <a class="code" href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08">SymbolTableInfo::getStructInfoIter</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(T);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; TypeToFieldInfoMap::iterator it = typeToFieldInfo.find(T);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (it != typeToFieldInfo.end())</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> it;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; collectTypeInfo(T);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> typeToFieldInfo.find(T);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a2b0f2c6745d14a9f6447ed96484dddac"> 102</a></span>&#160;<a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#a2b0f2c6745d14a9f6447ed96484dddac">SymbolTableInfo::createObjTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a>)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* typeInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html#a351edf73b2b035ce61a99a10b3d9de87">ObjTypeInfo</a>(type, <a class="code" href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">StInfo::getMaxFieldLimit</a>());</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span>(type &amp;&amp; type-&gt;isPointerTy()){</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; typeInfo-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ad6fb2bfae3d4b73a6821a87106f65f49">setFlag</a>(<a class="code" href="classSVF_1_1ObjTypeInfo.html#a91b41b7ade5871362b77a2ef566b2830a692b4b0df23bad19ea04d18b01bf445c">ObjTypeInfo::HEAP_OBJ</a>);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; typeInfo-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ad6fb2bfae3d4b73a6821a87106f65f49">setFlag</a>(<a class="code" href="classSVF_1_1ObjTypeInfo.html#a91b41b7ade5871362b77a2ef566b2830ad17b2a35fb492561c4011dbe3880c6c9">ObjTypeInfo::HASPTR_OBJ</a>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> typeInfo;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 115</a></span>&#160;<a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (symInfo == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; symInfo-&gt;setModelConstants(<a class="code" href="classSVF_1_1Options.html#a5c051cf6a93a87a07aa1d31e302a2877">Options::ModelConsts</a>);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> symInfo;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 128</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462">SymbolTableInfo::collectTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typeToFieldInfo.find(ty) == typeToFieldInfo.end() &amp;&amp; <span class="stringliteral">&quot;this type has been collected before&quot;</span>);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(ty))</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; collectArrayInfo(aty);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast&lt;StructType&gt;(ty))</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; collectStructInfo(sty);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e">SymbolTableInfo::collectArrayInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty-&gt;getElementType();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(elemTy))</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; elemTy = aty-&gt;getElementType();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(totalElemNum);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span>(totalElemNum==0){</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, elemTy, 0);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, elemTy);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">getNumOfFlattenFields</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; j++)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* fieldTy = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(idx, fieldTy);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; outArrayElemNum; i++)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, elemTy, (i * nfE * totalElemNum)/outArrayElemNum);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfE, nfE * totalElemNum);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;}</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 192</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804">SymbolTableInfo::collectStructInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// The offset when considering array stride info</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (StructType::element_iterator it = sty-&gt;element_begin(), ie =</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; sty-&gt;element_end(); it != ie; ++it)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(nf, et, strideOffset);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType&gt;(et) || SVFUtil::isa&lt;ArrayType&gt;(et))</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">getNumOfFlattenFields</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">//Copy ST&#39;s info, whose element 0 is the size of ST itself.</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; j++)</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx = nf + subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(fldIdx, elemTy);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; nf += nfE;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; strideOffset += nfE * subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">else</span> <span class="comment">//simple type</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(nf, et);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; nf += 1;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; strideOffset += 1;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nf,strideOffset);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (nf &gt; maxStSize)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; maxStruct = sty;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; maxStSize = nf;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 247</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad">SymbolTableInfo::collectSimpleTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;{</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, ty, 0);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, ty);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;}</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee"> 265</a></span>&#160;<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee">SymbolTableInfo::getModulusOffset</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>(offset &lt; 0)</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;try to create a gep node with negative offset.&quot;</span>);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; offset = abs(offset);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxOffset = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (maxOffset != 0)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; offset = offset % maxOffset;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; offset = 0;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;}</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e"> 292</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e">SymbolTableInfo::destroy</a>()</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span> (IDToMemMapTy::iterator iter = objMap.begin(); iter != objMap.end();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; ++iter)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span> (iter-&gt;second)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">delete</span> iter-&gt;second;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">for</span> (TypeToFieldInfoMap::iterator iter = typeToFieldInfo.begin();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; iter != typeToFieldInfo.end(); ++iter)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (iter-&gt;second)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">delete</span> iter-&gt;second;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">if</span>(dl){</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">delete</span> dl;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span>(mod){</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">delete</span> mod;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; mod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90"> 321</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90">SymbolTableInfo::isNullPtrSym</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;{</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* v = SVFUtil::dyn_cast&lt;Constant&gt;(val))</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> v-&gt;isNullValue() &amp;&amp; v-&gt;getType()-&gt;isPointerTy();</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;}</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb"> 333</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb">SymbolTableInfo::isBlackholeSym</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;{</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">return</span> (SVFUtil::isa&lt;UndefValue&gt;(val));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35"> 341</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35">SymbolTableInfo::isConstantObjSym</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;{</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</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><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(v))</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v-&gt;hasInitializer()){</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">if</span>(v-&gt;isExternalLinkage(v-&gt;getLinkage()))</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = getStructInfo(v-&gt;getInitializer()-&gt;getType());</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt; &amp;fields = stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;FlattenedFieldInfo&gt;::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> &amp;field = *it;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = field.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>();</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;FunctionType&gt;(elemTy) &amp;&amp; <span class="stringliteral">&quot;Initializer of a global is a function?&quot;</span>);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(elemTy))</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">return</span> v-&gt;isConstant();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVFUtil::isConstantData</a>(val);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;}</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 373</a></span>&#160;<a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776">SymbolTableInfo::createBlkObj</a>(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(IntegerType::get(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getContext(), 32)));</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;}</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 382</a></span>&#160;<a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e">SymbolTableInfo::createConstantObj</a>(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;{</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(IntegerType::get(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getContext(), 32)));</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;}</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 391</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18">SymbolTableInfo::createDummyObj</a>(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a>)</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;{</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end() &amp;&amp; <span class="stringliteral">&quot;this dummy obj has been created before&quot;</span>);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(type));</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; objMap[symId] = memObj;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> memObj;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aec579894eed558ea89740b68360187aa"> 400</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SymbolTableInfo.html#aec579894eed558ea89740b68360187aa">SymbolTableInfo::getNumOfFlattenElements</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;{</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a170426acc0f9d99470fd1bde40d273e2">Options::ModelArrays</a>)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenElements();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenFields();</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;}</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6fe89e9d6c18a6aff6dffc1c78d08dff"> 409</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a6fe89e9d6c18a6aff6dffc1c78d08dff">SymbolTableInfo::getFlattenedElemIdx</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T, <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> origId)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;{</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a170426acc0f9d99470fd1bde40d273e2">Options::ModelArrays</a>){</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; std::vector&lt;u32_t&gt;&amp; so = getStructInfoIter(T)-&gt;second-&gt;getFlattenedElemIdxVec();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> ((<span class="keywordtype">unsigned</span>)origId &lt;= so.size() &amp;&amp; !so.empty() &amp;&amp; <span class="stringliteral">&quot;Array index out of bounds, can&#39;t get flattened index!&quot;</span>);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">return</span> so[origId];</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StructType&gt;(T)){</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; std::vector&lt;u32_t&gt;&amp; so = getStructInfoIter(T)-&gt;second-&gt;getFlattenedFieldIdxVec();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> ((<span class="keywordtype">unsigned</span>)origId &lt;= so.size() &amp;&amp; !so.empty() &amp;&amp; <span class="stringliteral">&quot;Struct index out of bounds, can&#39;t get flattened index!&quot;</span>);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> so[origId];</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ArrayType&gt;(T) &amp;&amp; <span class="stringliteral">&quot;Only accept struct or array type if Options::ModelArrays is disabled!&quot;</span>);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;}</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0"> 430</a></span>&#160;<span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt;&amp; <a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">SymbolTableInfo::getFlattenedFieldInfoVec</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getFlattenedFieldInfoVec();</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;}</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49"> 435</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49">SymbolTableInfo::getOriginalFieldType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;{</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(baseType)-&gt;second-&gt;getOriginalFieldType(field_idx);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;}</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4"> 440</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4">SymbolTableInfo::getFlatternedFieldType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx){</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(baseType)-&gt;second-&gt;getFlatternedFieldType(field_idx);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;}</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 447</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737">SymbolTableInfo::printFlattenFields</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a>)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *at = SVFUtil::dyn_cast&lt;ArrayType&gt; (type))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; at-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\tarray type &quot;</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t [element size = &quot;</span> &lt;&lt; getTypeSizeInBytes(at-&gt;getElementType()) &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *st = SVFUtil::dyn_cast&lt;StructType&gt; (type))</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; st-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; std::vector&lt;FlattenedFieldInfo&gt;&amp; finfo = getStructInfo(st)-&gt;getFlattenedFieldInfoVec();</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;FlattenedFieldInfo&gt;::iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; it!=eit; ++it, field_idx++)</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; \tField_idx = &quot;</span> &lt;&lt; (*it).getFlattenFldIdx();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;, field type: &quot;</span>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; (*it).getFlattenElemTy()-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;, field size: &quot;</span> &lt;&lt; getTypeSizeInBytes((*it).getFlattenElemTy());</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; }</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt= SVFUtil::dyn_cast&lt;PointerType&gt; (type))</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sizeInBits = getTypeSizeInBytes(type);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(pt-&gt;getElementType());</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; pt-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot;\t [pointer size = &quot;</span> &lt;&lt; sizeInBits &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot;\t [target size = &quot;</span> &lt;&lt; eSize &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* fu= SVFUtil::dyn_cast&lt;FunctionType&gt; (type))</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; fu-&gt;getReturnType()-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;(Function)}\n\n&quot;</span>;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type-&gt;isSingleValueType() &amp;&amp; <span class="stringliteral">&quot;not a single value type, then what else!!&quot;</span>);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(type);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; type-&gt;print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt;<span class="stringliteral">&quot;\t [object size = &quot;</span> &lt;&lt; eSize &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;}</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 511</a></span>&#160;std::string <a class="code" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e">SymbolTableInfo::toString</a>(<a class="code" href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SYMTYPE</a> symtype)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;{</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">switch</span> (symtype) {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlackHole&quot;</span>;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ConstantObj&quot;</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlkPtr&quot;</span>;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NullPtr&quot;</span>;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ValSym&quot;</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ObjSym&quot;</span>;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;RetSym&quot;</span>;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;VarargSym&quot;</span>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Invalid SYMTYPE&quot;</span>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;}</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 544</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9">SymbolTableInfo::dump</a>()</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;{</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;SymID, Value*&gt;</a> idmap;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; ++iter)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; ++iter)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; ++iter)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; ++iter)</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter-&gt;first;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;{SymbolTableInfo \n&quot;</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; iter.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(iter.second) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;}</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="comment"> * Get the type size given a target data layout</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e"> 590</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e">SymbolTableInfo::getTypeSizeInBytes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">type</a>)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;{</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">if</span>(type-&gt;isSized())</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">return</span> getDataLayout(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>())-&gt;getTypeStoreSize(const_cast&lt;Type*&gt;(type));</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;}</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ada63ac47515daa4402914083058baec8"> 600</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e">SymbolTableInfo::getTypeSizeInBytes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;{</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = getDataLayout(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getMainLLVMModule())-&gt;getStructLayout( const_cast&lt;StructType *&gt;(sty) );</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">if</span>(sty-&gt;isOpaque())</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">return</span> stTySL-&gt;getElementOffset(field_idx);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;}</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac"> 615</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">ObjTypeInfo::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;{</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ety = <a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *AT= SVFUtil::dyn_cast&lt;ArrayType&gt;(ety))</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; ety = AT-&gt;getElementType();</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType&gt;(ety) || SVFUtil::isa&lt;ArrayType&gt;(ety))</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordtype">bool</span> hasIntersection = <span class="keyword">false</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> vector&lt;FlattenedFieldInfo&gt; &amp;infovec = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(ety);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; vector&lt;FlattenedFieldInfo&gt;::const_iterator it = infovec.begin();</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; vector&lt;FlattenedFieldInfo&gt;::const_iterator eit = infovec.end();</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">for</span> (; it != eit; ++it)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>&amp; fieldLS = *it;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (ls.<a class="code" href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">intersects</a>(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a34759f793f0445d2941c9a7d1413b7b2">getFlattenFldIdx</a>())))</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; hasIntersection = <span class="keyword">true</span>;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>()-&gt;isPointerTy())</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="comment">//assert(hasIntersection &amp;&amp; &quot;cannot find field of specified offset&quot;);</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>() == <span class="keyword">false</span>);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;}</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 654</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca">MemObj::setFieldSensitive</a>()</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;{</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; typeInfo-&gt;setMaxFieldOffsetLimit(<a class="code" href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">StInfo::getMaxFieldLimit</a>());</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;}</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;</div><div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 663</a></span>&#160;<a class="code" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1">MemObj::MemObj</a>(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* ti, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val) :</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; symId(id), refVal(val), typeInfo(ti)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;{</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;}</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 671</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">MemObj::isBlackHoleObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;}</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div><div class="line"><a name="l00678"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 678</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">MemObj::getType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* type = SVFUtil::dyn_cast&lt;PointerType&gt;(<a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>()))</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> type-&gt;getElementType();</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>() &amp;&amp; SVFUtil::isa&lt;Instruction&gt;(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVFUtil::getTypeOfHeapAlloc</a>(SVFUtil::cast&lt;Instruction&gt;(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()));</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;}</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 695</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">MemObj::destroy</a>()</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;}</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88"> 702</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">MemObj::getMaxFieldOffsetLimit</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;}</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 708</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">MemObj::isFieldInsensitive</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>() == 0;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;}</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 714</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">MemObj::setFieldInsensitive</a>()</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;{</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">setMaxFieldOffsetLimit</a>(0);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;}</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 719</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">MemObj::isFunction</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">isFunction</a>();</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;}</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00724"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 724</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">MemObj::isGlobalObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">isGlobalObj</a>();</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;}</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;</div><div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 729</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">MemObj::isStaticObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>();</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;}</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;</div><div class="line"><a name="l00734"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 734</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">MemObj::isStack</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">isStack</a>();</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;}</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 739</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">MemObj::isHeap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>();</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;}</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 744</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">MemObj::isStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">isStruct</a>();</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;}</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;</div><div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 749</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">MemObj::isArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">isArray</a>();</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;</div><div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 754</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">MemObj::isVarStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">isVarStruct</a>();</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;}</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6"> 759</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">MemObj::isVarArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">isVarArray</a>();</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;}</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f"> 764</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">MemObj::isConstantStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">isConstantStruct</a>();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;}</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</div><div class="line"><a name="l00769"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb"> 769</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">MemObj::isConstantArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">isConstantArray</a>();</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;}</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;</div><div class="line"><a name="l00774"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0"> 774</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">MemObj::isConstDataOrConstGlobal</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">isConstDataOrConstGlobal</a>();</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;}</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16"> 779</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">MemObj::isConstantData</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">isConstantData</a>();</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;}</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;</div><div class="line"><a name="l00784"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082"> 784</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">MemObj::hasPtrObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>();</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;}</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;</div><div class="line"><a name="l00789"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e"> 789</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">MemObj::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)<span class="keyword"> const</span></div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-&gt;<a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;}</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7"> 794</a></span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">MemObj::toString</a>()<span class="keyword"> const</span>{</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; std::string str;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;MemObj : &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>())&lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;}</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;</div><div class="ttc" id="classSVF_1_1MemObj_html_a750770ea992d39b22c8b2dda9aff2eaf"><div class="ttname"><a href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">SVF::MemObj::typeInfo</a></div><div class="ttdeci">ObjTypeInfo * typeInfo</div><div class="ttdoc">Type information of this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00416">SymbolTableInfo.h:416</a></div></div>
70
+ <div class="ttc" id="classSVF_1_1MemObj_html_a132df66e2751e5db6b0ba82d767a3286"><div class="ttname"><a href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">SVF::MemObj::isStruct</a></div><div class="ttdeci">bool isStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00744">SymbolTableInfo.cpp:744</a></div></div>
71
+ <div class="ttc" id="classSVF_1_1StInfo_html_a1a8be773f23b5a5fd36d44698bae9986"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">SVF::StInfo::addFldWithType</a></div><div class="ttdeci">void addFldWithType(u32_t fldIdx, const Type *type, u32_t elemIdx)</div><div class="ttdoc">Add field index and element index and their corresponding type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00059">SymbolTableInfo.cpp:59</a></div></div>
72
+ <div class="ttc" id="classSVF_1_1MemObj_html_a7b890ca9e93b1c61cc6437b7e6a82a8c"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">SVF::MemObj::isBlackHoleObj</a></div><div class="ttdeci">bool isBlackHoleObj() const</div><div class="ttdoc">Whether it is a black hole object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00671">SymbolTableInfo.cpp:671</a></div></div>
73
+ <div class="ttc" id="classSVF_1_1LocationSet_html_ab987c41ffdae931d941f89d03ed09146"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">s64_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00114">LocationSet.h:114</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ad9cdb21e20182f3bc95f04bbb97712f3"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SVF::SymbolTableInfo::isBlkObj</a></div><div class="ttdeci">static bool isBlkObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00198">SymbolTableInfo.h:198</a></div></div>
75
- <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00415">SymbolTableInfo.h:415</a></div></div>
75
+ <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00411">SymbolTableInfo.h:411</a></div></div>
76
76
  <div class="ttc" id="namespaceSVF_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#l00109">BasicTypes.h:109</a></div></div>
77
- <div class="ttc" id="classSVF_1_1LocationSet_html_a0e1cddc4228e310c95f68c661c7b94c8"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">SVF::LocationSet::intersects</a></div><div class="ttdeci">bool intersects(const LocationSet &amp;RHS) const</div><div class="ttdoc">Return TRUE if we share any location in common with RHS. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00146">LocationSet.h:146</a></div></div>
78
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a26c179394fbda9a9261d0bf3f52b619d"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">SVF::ObjTypeInfo::isHeap</a></div><div class="ttdeci">bool isHeap()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00698">SymbolTableInfo.h:698</a></div></div>
79
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac1ee7a720959c0e97496870d6e759212"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">SVF::ObjTypeInfo::isConstantArray</a></div><div class="ttdeci">bool isConstantArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00723">SymbolTableInfo.h:723</a></div></div>
80
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a9fff869c63776c6ebeff78933e0f6092"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">SVF::ObjTypeInfo::setMaxFieldOffsetLimit</a></div><div class="ttdeci">void setMaxFieldOffsetLimit(u32_t limit)</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00663">SymbolTableInfo.h:663</a></div></div>
81
- <div class="ttc" id="classSVF_1_1MemObj_html_ae1d14e2bf0be36cdadebf119822f607b"><div class="ttname"><a href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">SVF::MemObj::isFunction</a></div><div class="ttdeci">bool isFunction() const</div><div class="ttdoc">object attributes methods </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00730">SymbolTableInfo.cpp:730</a></div></div>
77
+ <div class="ttc" id="classSVF_1_1LocationSet_html_a0e1cddc4228e310c95f68c661c7b94c8"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">SVF::LocationSet::intersects</a></div><div class="ttdeci">bool intersects(const LocationSet &amp;RHS) const</div><div class="ttdoc">Return TRUE if we share any location in common with RHS. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00140">LocationSet.h:140</a></div></div>
78
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a26c179394fbda9a9261d0bf3f52b619d"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">SVF::ObjTypeInfo::isHeap</a></div><div class="ttdeci">bool isHeap()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00682">SymbolTableInfo.h:682</a></div></div>
79
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac1ee7a720959c0e97496870d6e759212"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">SVF::ObjTypeInfo::isConstantArray</a></div><div class="ttdeci">bool isConstantArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00707">SymbolTableInfo.h:707</a></div></div>
80
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a480a7565dcb5d9a94f4b0ffb44b127ee"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee">SVF::SymbolTableInfo::getModulusOffset</a></div><div class="ttdeci">virtual LocationSet getModulusOffset(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Given an offset from a Gep Instruction, return it modulus offset by considering memory layout...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00265">SymbolTableInfo.cpp:265</a></div></div>
81
+ <div class="ttc" id="classSVF_1_1Options_html_a5c051cf6a93a87a07aa1d31e302a2877"><div class="ttname"><a href="classSVF_1_1Options.html#a5c051cf6a93a87a07aa1d31e302a2877">SVF::Options::ModelConsts</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; ModelConsts</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00213">Options.h:213</a></div></div>
82
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a9fff869c63776c6ebeff78933e0f6092"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">SVF::ObjTypeInfo::setMaxFieldOffsetLimit</a></div><div class="ttdeci">void setMaxFieldOffsetLimit(u32_t limit)</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00647">SymbolTableInfo.h:647</a></div></div>
83
+ <div class="ttc" id="classSVF_1_1MemObj_html_ae1d14e2bf0be36cdadebf119822f607b"><div class="ttname"><a href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">SVF::MemObj::isFunction</a></div><div class="ttdeci">bool isFunction() const</div><div class="ttdoc">object attributes methods </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00719">SymbolTableInfo.cpp:719</a></div></div>
82
84
  <div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
83
85
  <div class="ttc" id="namespaceSVF_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#l00083">BasicTypes.h:83</a></div></div>
84
86
  <div class="ttc" id="classSVF_1_1FlattenedFieldInfo_html_a92c1b65c36feeabf09541c9af4650f14"><div class="ttname"><a href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">SVF::FlattenedFieldInfo::getFlattenElemTy</a></div><div class="ttdeci">const Type * getFlattenElemTy() const</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00059">LocationSet.h:59</a></div></div>
85
87
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
86
88
  <div class="ttc" id="namespaceSVF_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#l00108">BasicTypes.h:108</a></div></div>
87
- <div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00735">SymbolTableInfo.cpp:735</a></div></div>
88
- <div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00745">SymbolTableInfo.cpp:745</a></div></div>
89
- <div class="ttc" id="classSVF_1_1MemObj_html_a6dae1b3429c6049f0153ec006d329082"><div class="ttname"><a href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">SVF::MemObj::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00795">SymbolTableInfo.cpp:795</a></div></div>
90
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac99fa14fdf7bc0dd3e9ff36c7a3a351f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">SVF::ObjTypeInfo::isFunction</a></div><div class="ttdeci">bool isFunction()</div><div class="ttdoc">Object attributes. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00682">SymbolTableInfo.h:682</a></div></div>
91
- <div class="ttc" id="classSVF_1_1MemObj_html_ab9637ea9acd1f8ae4933b4ab2b997e5c"><div class="ttname"><a href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">SVF::MemObj::setFieldInsensitive</a></div><div class="ttdeci">void setFieldInsensitive()</div><div class="ttdoc">Set the memory object to be field insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00725">SymbolTableInfo.cpp:725</a></div></div>
92
- <div class="ttc" id="classSVF_1_1MemObj_html_aa4fa7a1b86d66692ffffeaee0e187216"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">SVF::MemObj::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get obj type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00689">SymbolTableInfo.cpp:689</a></div></div>
89
+ <div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00724">SymbolTableInfo.cpp:724</a></div></div>
90
+ <div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00734">SymbolTableInfo.cpp:734</a></div></div>
91
+ <div class="ttc" id="classSVF_1_1MemObj_html_a6dae1b3429c6049f0153ec006d329082"><div class="ttname"><a href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">SVF::MemObj::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00784">SymbolTableInfo.cpp:784</a></div></div>
92
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_aeb3f594076c60fc313c29d282f347f08"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08">SVF::SymbolTableInfo::getStructInfoIter</a></div><div class="ttdeci">TypeToFieldInfoMap::iterator getStructInfoIter(const Type *T)</div><div class="ttdoc">Get struct info. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00086">SymbolTableInfo.cpp:86</a></div></div>
93
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a351edf73b2b035ce61a99a10b3d9de87"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a351edf73b2b035ce61a99a10b3d9de87">SVF::ObjTypeInfo::ObjTypeInfo</a></div><div class="ttdeci">ObjTypeInfo(const Type *t, u32_t max)</div><div class="ttdoc">Constructors. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00047">SymbolTableInfo.cpp:47</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac99fa14fdf7bc0dd3e9ff36c7a3a351f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">SVF::ObjTypeInfo::isFunction</a></div><div class="ttdeci">bool isFunction()</div><div class="ttdoc">Object attributes. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00666">SymbolTableInfo.h:666</a></div></div>
95
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a7d3001549966444622d5918e5811e89e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e">SVF::SymbolTableInfo::toString</a></div><div class="ttdeci">static std::string toString(SYMTYPE symtype)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00511">SymbolTableInfo.cpp:511</a></div></div>
96
+ <div class="ttc" id="classSVF_1_1MemObj_html_ab9637ea9acd1f8ae4933b4ab2b997e5c"><div class="ttname"><a href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">SVF::MemObj::setFieldInsensitive</a></div><div class="ttdeci">void setFieldInsensitive()</div><div class="ttdoc">Set the memory object to be field insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00714">SymbolTableInfo.cpp:714</a></div></div>
97
+ <div class="ttc" id="classSVF_1_1MemObj_html_aa4fa7a1b86d66692ffffeaee0e187216"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">SVF::MemObj::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get obj type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00678">SymbolTableInfo.cpp:678</a></div></div>
93
98
  <div class="ttc" id="namespaceSVF_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#l00107">BasicTypes.h:107</a></div></div>
94
- <div class="ttc" id="classSVF_1_1MemObj_html_a7f828731597450f1d43b61413ab0e7bb"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">SVF::MemObj::isConstantArray</a></div><div class="ttdeci">bool isConstantArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00780">SymbolTableInfo.cpp:780</a></div></div>
99
+ <div class="ttc" id="classSVF_1_1MemObj_html_a7f828731597450f1d43b61413ab0e7bb"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">SVF::MemObj::isConstantArray</a></div><div class="ttdeci">bool isConstantArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00769">SymbolTableInfo.cpp:769</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a6ddf057415f641bd8ad15bded1415776"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776">SVF::SymbolTableInfo::createBlkObj</a></div><div class="ttdeci">MemObj * createBlkObj(SymID symId)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00373">SymbolTableInfo.cpp:373</a></div></div>
95
101
  <div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
96
102
  <div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
97
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a41f916ab4e3a2c163fca636eae948ce7"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">SVF::ObjTypeInfo::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00711">SymbolTableInfo.h:711</a></div></div>
98
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aca1e900f9b0a774684af77666cf033e3"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">SVF::ObjTypeInfo::isVarArray</a></div><div class="ttdeci">bool isVarArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00719">SymbolTableInfo.h:719</a></div></div>
103
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a41f916ab4e3a2c163fca636eae948ce7"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">SVF::ObjTypeInfo::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00695">SymbolTableInfo.h:695</a></div></div>
104
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aca1e900f9b0a774684af77666cf033e3"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">SVF::ObjTypeInfo::isVarArray</a></div><div class="ttdeci">bool isVarArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00703">SymbolTableInfo.h:703</a></div></div>
99
105
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
100
- <div class="ttc" id="classSVF_1_1MemObj_html_a614b26f4a3db926055a576b13842c1d7"><div class="ttname"><a href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">SVF::MemObj::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00805">SymbolTableInfo.cpp:805</a></div></div>
101
- <div class="ttc" id="classSVF_1_1MemObj_html_a019a77516c403f1f3cc72917b810a41f"><div class="ttname"><a href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">SVF::MemObj::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00775">SymbolTableInfo.cpp:775</a></div></div>
106
+ <div class="ttc" id="classSVF_1_1MemObj_html_a614b26f4a3db926055a576b13842c1d7"><div class="ttname"><a href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">SVF::MemObj::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00794">SymbolTableInfo.cpp:794</a></div></div>
107
+ <div class="ttc" id="classSVF_1_1MemObj_html_a019a77516c403f1f3cc72917b810a41f"><div class="ttname"><a href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">SVF::MemObj::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00764">SymbolTableInfo.cpp:764</a></div></div>
102
108
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
103
109
  <div class="ttc" id="namespaceSVF_html_abe09d99af006554a5c00803e9a89f9a6"><div class="ttname"><a href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">SVF::s64_t</a></div><div class="ttdeci">signed s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
104
110
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00069">SVFUtil.cpp:69</a></div></div>
105
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3594dc1c1943dbac0ab72f2ff163c523"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">SVF::ObjTypeInfo::isStaticObj</a></div><div class="ttdeci">bool isStaticObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00690">SymbolTableInfo.h:690</a></div></div>
106
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a81bc3d785062c7e527ecf8e564cd52a4"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">SVF::ObjTypeInfo::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit()</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00657">SymbolTableInfo.h:657</a></div></div>
107
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a0627e8b9dda2e13cc77c334eefab21e1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">SVF::ObjTypeInfo::isArray</a></div><div class="ttdeci">bool isArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00727">SymbolTableInfo.h:727</a></div></div>
108
- <div class="ttc" id="classSVF_1_1MemObj_html_aeba6eeed4843a1a90cf1d4b7deb197af"><div class="ttname"><a href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">SVF::MemObj::isArray</a></div><div class="ttdeci">bool isArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00760">SymbolTableInfo.cpp:760</a></div></div>
109
- <div class="ttc" id="classSVF_1_1MemObj_html_a954eba54eda95e6735eb1d32bd8a276e"><div class="ttname"><a href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">SVF::MemObj::isStaticObj</a></div><div class="ttdeci">bool isStaticObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00740">SymbolTableInfo.cpp:740</a></div></div>
111
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3594dc1c1943dbac0ab72f2ff163c523"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">SVF::ObjTypeInfo::isStaticObj</a></div><div class="ttdeci">bool isStaticObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00674">SymbolTableInfo.h:674</a></div></div>
112
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a81bc3d785062c7e527ecf8e564cd52a4"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">SVF::ObjTypeInfo::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit()</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00641">SymbolTableInfo.h:641</a></div></div>
113
+ <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a9fe3fa15a6a0ec25864cb8439a45596e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">SVF::LLVMModuleSet::getMainLLVMModule</a></div><div class="ttdeci">Module * getMainLLVMModule() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00193">LLVMModule.h:193</a></div></div>
114
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a0627e8b9dda2e13cc77c334eefab21e1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">SVF::ObjTypeInfo::isArray</a></div><div class="ttdeci">bool isArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00711">SymbolTableInfo.h:711</a></div></div>
115
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a91b41b7ade5871362b77a2ef566b2830a692b4b0df23bad19ea04d18b01bf445c"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a91b41b7ade5871362b77a2ef566b2830a692b4b0df23bad19ea04d18b01bf445c">SVF::ObjTypeInfo::HEAP_OBJ</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00603">SymbolTableInfo.h:603</a></div></div>
116
+ <div class="ttc" id="classSVF_1_1MemObj_html_aeba6eeed4843a1a90cf1d4b7deb197af"><div class="ttname"><a href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">SVF::MemObj::isArray</a></div><div class="ttdeci">bool isArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00749">SymbolTableInfo.cpp:749</a></div></div>
117
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a866085ff37b7841606c523817c621f49"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49">SVF::SymbolTableInfo::getOriginalFieldType</a></div><div class="ttdeci">const Type * getOriginalFieldType(const Type *baseType, u32_t field_idx)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00435">SymbolTableInfo.cpp:435</a></div></div>
118
+ <div class="ttc" id="classSVF_1_1MemObj_html_a954eba54eda95e6735eb1d32bd8a276e"><div class="ttname"><a href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">SVF::MemObj::isStaticObj</a></div><div class="ttdeci">bool isStaticObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00729">SymbolTableInfo.cpp:729</a></div></div>
119
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a9f4cf6914b400b9f69c7852f13c496a9"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9">SVF::SymbolTableInfo::dump</a></div><div class="ttdeci">virtual void dump()</div><div class="ttdoc">Another debug method. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00544">SymbolTableInfo.cpp:544</a></div></div>
120
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_aa99cab5480116905dd41ab0ad24b9462"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462">SVF::SymbolTableInfo::collectTypeInfo</a></div><div class="ttdeci">void collectTypeInfo(const Type *T)</div><div class="ttdoc">Collect type info. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00128">SymbolTableInfo.cpp:128</a></div></div>
121
+ <div class="ttc" id="classSVF_1_1MemObj_html_a981b7424901ef74467f725ffc9fec0ca"><div class="ttname"><a href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca">SVF::MemObj::setFieldSensitive</a></div><div class="ttdeci">void setFieldSensitive()</div><div class="ttdoc">Set the memory object to be field sensitive (up to max field limit) </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00654">SymbolTableInfo.cpp:654</a></div></div>
122
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ad6fb2bfae3d4b73a6821a87106f65f49"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ad6fb2bfae3d4b73a6821a87106f65f49">SVF::ObjTypeInfo::setFlag</a></div><div class="ttdeci">void setFlag(MEMTYPE mask)</div><div class="ttdoc">Flag for this object type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00654">SymbolTableInfo.h:654</a></div></div>
110
123
  <div class="ttc" id="classSVF_1_1FlattenedFieldInfo_html"><div class="ttname"><a href="classSVF_1_1FlattenedFieldInfo.html">SVF::FlattenedFieldInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00045">LocationSet.h:45</a></div></div>
111
- <div class="ttc" id="classSVF_1_1StInfo_html_af5094ec542f345d214a682d4138cf690"><div class="ttname"><a href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">SVF::StInfo::getStride</a></div><div class="ttdeci">u32_t getStride() const</div><div class="ttdoc">Return the stride. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00589">SymbolTableInfo.h:589</a></div></div>
124
+ <div class="ttc" id="classSVF_1_1StInfo_html_af5094ec542f345d214a682d4138cf690"><div class="ttname"><a href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">SVF::StInfo::getStride</a></div><div class="ttdeci">u32_t getStride() const</div><div class="ttdoc">Return the stride. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00585">SymbolTableInfo.h:585</a></div></div>
125
+ <div class="ttc" id="classSVF_1_1StInfo_html_aecd92dab41e8200a5dd4a10085ad882b"><div class="ttname"><a href="classSVF_1_1StInfo.html#aecd92dab41e8200a5dd4a10085ad882b">SVF::StInfo::getFlatternedFieldType</a></div><div class="ttdeci">const Type * getFlatternedFieldType(u32_t fldIdx)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00077">SymbolTableInfo.cpp:77</a></div></div>
112
126
  <div class="ttc" id="namespaceSVF_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#l00116">BasicTypes.h:116</a></div></div>
113
127
  <div class="ttc" id="SymbolTableInfo_8h_html"><div class="ttname"><a href="SymbolTableInfo_8h.html">SymbolTableInfo.h</a></div></div>
114
128
  <div class="ttc" id="namespaceSVF_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#l00106">BasicTypes.h:106</a></div></div>
115
129
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
116
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa568dc82decd28d2ef40785a4a647602"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">SVF::ObjTypeInfo::isStack</a></div><div class="ttdeci">bool isStack()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00694">SymbolTableInfo.h:694</a></div></div>
117
- <div class="ttc" id="classSVF_1_1MemObj_html_a616e9f4d6f82a253f94391c47668b9a6"><div class="ttname"><a href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">SVF::MemObj::isVarArray</a></div><div class="ttdeci">bool isVarArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00770">SymbolTableInfo.cpp:770</a></div></div>
130
+ <div class="ttc" id="classSVF_1_1FlattenedFieldInfo_html_a34759f793f0445d2941c9a7d1413b7b2"><div class="ttname"><a href="classSVF_1_1FlattenedFieldInfo.html#a34759f793f0445d2941c9a7d1413b7b2">SVF::FlattenedFieldInfo::getFlattenFldIdx</a></div><div class="ttdeci">u32_t getFlattenFldIdx() const</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00055">LocationSet.h:55</a></div></div>
131
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ab15112d3900f28525848cbe5fad37deb"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb">SVF::SymbolTableInfo::isBlackholeSym</a></div><div class="ttdeci">static bool isBlackholeSym(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00333">SymbolTableInfo.cpp:333</a></div></div>
132
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa568dc82decd28d2ef40785a4a647602"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">SVF::ObjTypeInfo::isStack</a></div><div class="ttdeci">bool isStack()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00678">SymbolTableInfo.h:678</a></div></div>
133
+ <div class="ttc" id="classSVF_1_1MemObj_html_a616e9f4d6f82a253f94391c47668b9a6"><div class="ttname"><a href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">SVF::MemObj::isVarArray</a></div><div class="ttdeci">bool isVarArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00759">SymbolTableInfo.cpp:759</a></div></div>
118
134
  <div class="ttc" id="namespaceSVF_html_ad11fe2412b2182365a662ff0e4639b48"><div class="ttname"><a href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SVF::SymID</a></div><div class="ttdeci">unsigned SymID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00082">SVFBasicTypes.h:82</a></div></div>
119
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a706cdc47e78732853252d5a4af85653a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">SVF::ObjTypeInfo::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get LLVM type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00651">SymbolTableInfo.h:651</a></div></div>
120
- <div class="ttc" id="classSVF_1_1MemObj_html_a51be7ad70bc2c6a4230bd2f6b86bdc88"><div class="ttname"><a href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">SVF::MemObj::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit() const</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00713">SymbolTableInfo.cpp:713</a></div></div>
135
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a2b0f2c6745d14a9f6447ed96484dddac"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a2b0f2c6745d14a9f6447ed96484dddac">SVF::SymbolTableInfo::createObjTypeInfo</a></div><div class="ttdeci">ObjTypeInfo * createObjTypeInfo(const Type *type)</div><div class="ttdoc">Create an objectInfo based on LLVM type (value is null, and type could be null, representing a dummy ...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00102">SymbolTableInfo.cpp:102</a></div></div>
136
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_aa40ff2fcaba3d4297d63269b74738737"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737">SVF::SymbolTableInfo::printFlattenFields</a></div><div class="ttdeci">void printFlattenFields(const Type *type)</div><div class="ttdoc">Debug method. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00447">SymbolTableInfo.cpp:447</a></div></div>
137
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a706cdc47e78732853252d5a4af85653a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">SVF::ObjTypeInfo::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get LLVM type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00635">SymbolTableInfo.h:635</a></div></div>
138
+ <div class="ttc" id="classSVF_1_1MemObj_html_a51be7ad70bc2c6a4230bd2f6b86bdc88"><div class="ttname"><a href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">SVF::MemObj::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit() const</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00702">SymbolTableInfo.cpp:702</a></div></div>
121
139
  <div class="ttc" id="namespaceSVF_1_1cppUtil_html_aeef0f5c6486379043a7d47b0635f2667"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">SVF::cppUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00123">CPPUtil.cpp:123</a></div></div>
122
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a8e6c60978df9828c1dcb54086e83edc1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">SVF::ObjTypeInfo::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00731">SymbolTableInfo.h:731</a></div></div>
123
- <div class="ttc" id="classSVF_1_1MemObj_html_ad6926becf26a625cfe165aec120b2a1e"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">SVF::MemObj::isNonPtrFieldObj</a></div><div class="ttdeci">bool isNonPtrFieldObj(const LocationSet &amp;ls) const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00800">SymbolTableInfo.cpp:800</a></div></div>
140
+ <div class="ttc" id="classSVF_1_1StInfo_html_ad6e599717952f8ccc2771cd72254b6b2"><div class="ttname"><a href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">SVF::StInfo::getMaxFieldLimit</a></div><div class="ttdeci">static u32_t getMaxFieldLimit()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00539">SymbolTableInfo.h:539</a></div></div>
141
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a8e6c60978df9828c1dcb54086e83edc1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">SVF::ObjTypeInfo::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00715">SymbolTableInfo.h:715</a></div></div>
142
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a57d714a511273b8275374cd4c7f14373"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a57d714a511273b8275374cd4c7f14373">SVF::ObjTypeInfo::resetTypeForHeapStaticObj</a></div><div class="ttdeci">void resetTypeForHeapStaticObj(const Type *type)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00053">SymbolTableInfo.cpp:53</a></div></div>
143
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a91b41b7ade5871362b77a2ef566b2830ad17b2a35fb492561c4011dbe3880c6c9"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a91b41b7ade5871362b77a2ef566b2830ad17b2a35fb492561c4011dbe3880c6c9">SVF::ObjTypeInfo::HASPTR_OBJ</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00610">SymbolTableInfo.h:610</a></div></div>
144
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a267169023fc4f8dd66b145f7231fec11"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SVF::SymbolTableInfo::SymbolInfo</a></div><div class="ttdeci">static SymbolTableInfo * SymbolInfo()</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00115">SymbolTableInfo.cpp:115</a></div></div>
145
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a8e40c578ccdd3a108a10a191a309bd18"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18">SVF::SymbolTableInfo::createDummyObj</a></div><div class="ttdeci">const MemObj * createDummyObj(SymID symId, const Type *type)</div><div class="ttdoc">Can only be invoked by SVFIR::addDummyNode() when creaing SVFIR from file. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00391">SymbolTableInfo.cpp:391</a></div></div>
146
+ <div class="ttc" id="classSVF_1_1MemObj_html_ad6926becf26a625cfe165aec120b2a1e"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">SVF::MemObj::isNonPtrFieldObj</a></div><div class="ttdeci">bool isNonPtrFieldObj(const LocationSet &amp;ls) const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00789">SymbolTableInfo.cpp:789</a></div></div>
147
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a9ca564bdc1f40a2ccd30d98e0e4075b0"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">SVF::SymbolTableInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">const std::vector&lt; FlattenedFieldInfo &gt; &amp; getFlattenedFieldInfoVec(const Type *T)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00430">SymbolTableInfo.cpp:430</a></div></div>
124
148
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7486fd8e5350879ed1cbd835c0d4e191"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVF::SVFUtil::value2String</a></div><div class="ttdeci">const std::string value2String(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00390">SVFUtil.cpp:390</a></div></div>
125
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a40d6703875b370aed2c6dc41c0594af5"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">SVF::ObjTypeInfo::isVarStruct</a></div><div class="ttdeci">bool isVarStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00707">SymbolTableInfo.h:707</a></div></div>
149
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a40d6703875b370aed2c6dc41c0594af5"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">SVF::ObjTypeInfo::isVarStruct</a></div><div class="ttdeci">bool isVarStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00691">SymbolTableInfo.h:691</a></div></div>
150
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ab5297b79a02d8afce647a8b61bdab804"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804">SVF::SymbolTableInfo::collectStructInfo</a></div><div class="ttdeci">virtual void collectStructInfo(const StructType *T)</div><div class="ttdoc">Collect the struct info. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00192">SymbolTableInfo.cpp:192</a></div></div>
126
151
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
127
- <div class="ttc" id="classSVF_1_1MemObj_html_a1e6ff4c2b04b07c5f71e5e7a6a0d7735"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">SVF::MemObj::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00706">SymbolTableInfo.cpp:706</a></div></div>
128
- <div class="ttc" id="classSVF_1_1MemObj_html_ad1966c52f95775ac7d65c0ba6632c3cf"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">SVF::MemObj::isVarStruct</a></div><div class="ttdeci">bool isVarStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00765">SymbolTableInfo.cpp:765</a></div></div>
152
+ <div class="ttc" id="classSVF_1_1MemObj_html_a1e6ff4c2b04b07c5f71e5e7a6a0d7735"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">SVF::MemObj::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00695">SymbolTableInfo.cpp:695</a></div></div>
153
+ <div class="ttc" id="classSVF_1_1MemObj_html_ad1966c52f95775ac7d65c0ba6632c3cf"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">SVF::MemObj::isVarStruct</a></div><div class="ttdeci">bool isVarStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00754">SymbolTableInfo.cpp:754</a></div></div>
129
154
  <div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
130
155
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
131
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac5bae1e7917f415193a805e8d2e29320"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">SVF::ObjTypeInfo::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00739">SymbolTableInfo.h:739</a></div></div>
132
- <div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00750">SymbolTableInfo.cpp:750</a></div></div>
156
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac5bae1e7917f415193a805e8d2e29320"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">SVF::ObjTypeInfo::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00723">SymbolTableInfo.h:723</a></div></div>
157
+ <div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00739">SymbolTableInfo.cpp:739</a></div></div>
158
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a65a7e9d6d238a04291cb7d0aa15ece90"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90">SVF::SymbolTableInfo::isNullPtrSym</a></div><div class="ttdeci">static bool isNullPtrSym(const Value *val)</div><div class="ttdoc">special value </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00321">SymbolTableInfo.cpp:321</a></div></div>
133
159
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_afd2cf6ef6d7f2a583c709a72067be89b"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SVF::SymbolTableInfo::SYMTYPE</a></div><div class="ttdeci">SYMTYPE</div><div class="ttdoc">Symbol types. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00054">SymbolTableInfo.h:54</a></div></div>
160
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a6e7780d4e2639c089ff6c853d8d78a4d"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a6e7780d4e2639c089ff6c853d8d78a4d">SVF::ObjTypeInfo::type</a></div><div class="ttdeci">const Type * type</div><div class="ttdoc">LLVM type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00615">SymbolTableInfo.h:615</a></div></div>
161
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_af4239ff717303dee25f1f4ba60070f9e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e">SVF::SymbolTableInfo::getTypeSizeInBytes</a></div><div class="ttdeci">u32_t getTypeSizeInBytes(const Type *type)</div><div class="ttdoc">Helper method to get the size of the type from target data layout. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00590">SymbolTableInfo.cpp:590</a></div></div>
162
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a87cc3289dd69e5378487dd9ae2c9e82e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e">SVF::SymbolTableInfo::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00292">SymbolTableInfo.cpp:292</a></div></div>
163
+ <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
134
164
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a9e85d445e8b7b205134acd3874bba388"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVF::SVFUtil::isConstantData</a></div><div class="ttdeci">bool isConstantData(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#l00392">LLVMUtil.h:392</a></div></div>
135
- <div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00719">SymbolTableInfo.cpp:719</a></div></div>
165
+ <div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00708">SymbolTableInfo.cpp:708</a></div></div>
166
+ <div class="ttc" id="classSVF_1_1MemObj_html_afc62b5dbcaf790e561c852f567ca5bd1"><div class="ttname"><a href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1">SVF::MemObj::MemObj</a></div><div class="ttdeci">MemObj(SymID id, ObjTypeInfo *ti, const Value *val=nullptr)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00663">SymbolTableInfo.cpp:663</a></div></div>
167
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a6fe89e9d6c18a6aff6dffc1c78d08dff"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a6fe89e9d6c18a6aff6dffc1c78d08dff">SVF::SymbolTableInfo::getFlattenedElemIdx</a></div><div class="ttdeci">u32_t getFlattenedElemIdx(const Type *T, s64_t origId)</div><div class="ttdoc">Flatterned element idx of an array or struct by considering stride. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00409">SymbolTableInfo.cpp:409</a></div></div>
136
168
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
137
- <div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00445">SymbolTableInfo.h:445</a></div></div>
138
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3a58b1e0192b92dac5bbfad24adbcdac"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">SVF::ObjTypeInfo::isNonPtrFieldObj</a></div><div class="ttdeci">virtual bool isNonPtrFieldObj(const LocationSet &amp;ls)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00608">SymbolTableInfo.cpp:608</a></div></div>
169
+ <div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00441">SymbolTableInfo.h:441</a></div></div>
170
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3a58b1e0192b92dac5bbfad24adbcdac"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">SVF::ObjTypeInfo::isNonPtrFieldObj</a></div><div class="ttdeci">virtual bool isNonPtrFieldObj(const LocationSet &amp;ls)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00615">SymbolTableInfo.cpp:615</a></div></div>
171
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_aec579894eed558ea89740b68360187aa"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aec579894eed558ea89740b68360187aa">SVF::SymbolTableInfo::getNumOfFlattenElements</a></div><div class="ttdeci">u32_t getNumOfFlattenElements(const Type *T)</div><div class="ttdoc">Number of flattenned elements of an array or struct. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00400">SymbolTableInfo.cpp:400</a></div></div>
139
172
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
140
173
  <div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
141
- <div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00439">SymbolTableInfo.h:439</a></div></div>
142
- <div class="ttc" id="classSVF_1_1StInfo_html_ab5908115f11eccee61bd0759a51d5af0"><div class="ttname"><a href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">SVF::StInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">std::vector&lt; FlattenedFieldInfo &gt; &amp; getFlattenedFieldInfoVec()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00563">SymbolTableInfo.h:563</a></div></div>
143
- <div class="ttc" id="classSVF_1_1MemObj_html_aa50d7c3b4e7ac0aa769bc094bea26e16"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">SVF::MemObj::isConstantData</a></div><div class="ttdeci">bool isConstantData() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00790">SymbolTableInfo.cpp:790</a></div></div>
144
- <div class="ttc" id="classSVF_1_1StInfo_html_a1a07c2b1415c29d7d70791c6dfe602a3"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">SVF::StInfo::setNumOfFieldsAndElems</a></div><div class="ttdeci">void setNumOfFieldsAndElems(u32_t nf, u32_t ne)</div><div class="ttdoc">Set number of fields and elements of an aggrate. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00573">SymbolTableInfo.h:573</a></div></div>
174
+ <div class="ttc" id="classSVF_1_1StInfo_html_acf1ba3bc3ffbd2f7d457b613b6c5f4be"><div class="ttname"><a href="classSVF_1_1StInfo.html#acf1ba3bc3ffbd2f7d457b613b6c5f4be">SVF::StInfo::getOriginalFieldType</a></div><div class="ttdeci">const Type * getOriginalFieldType(u32_t fldIdx)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00070">SymbolTableInfo.cpp:70</a></div></div>
175
+ <div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00435">SymbolTableInfo.h:435</a></div></div>
176
+ <div class="ttc" id="classSVF_1_1StInfo_html_ab5908115f11eccee61bd0759a51d5af0"><div class="ttname"><a href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">SVF::StInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">std::vector&lt; FlattenedFieldInfo &gt; &amp; getFlattenedFieldInfoVec()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00559">SymbolTableInfo.h:559</a></div></div>
177
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ab5c9d593aa68c7150cd382db230eec3e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e">SVF::SymbolTableInfo::createConstantObj</a></div><div class="ttdeci">MemObj * createConstantObj(SymID symId)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00382">SymbolTableInfo.cpp:382</a></div></div>
178
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a666d1dff7a629bd34abbd2031c1037a4"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4">SVF::SymbolTableInfo::getFlatternedFieldType</a></div><div class="ttdeci">const Type * getFlatternedFieldType(const Type *baseType, u32_t field_idx)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00440">SymbolTableInfo.cpp:440</a></div></div>
179
+ <div class="ttc" id="classSVF_1_1MemObj_html_aa50d7c3b4e7ac0aa769bc094bea26e16"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">SVF::MemObj::isConstantData</a></div><div class="ttdeci">bool isConstantData() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00779">SymbolTableInfo.cpp:779</a></div></div>
180
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a61bda1c1c52fb765d0027d8141d35c35"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35">SVF::SymbolTableInfo::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00341">SymbolTableInfo.cpp:341</a></div></div>
181
+ <div class="ttc" id="classSVF_1_1StInfo_html_a1a07c2b1415c29d7d70791c6dfe602a3"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">SVF::StInfo::setNumOfFieldsAndElems</a></div><div class="ttdeci">void setNumOfFieldsAndElems(u32_t nf, u32_t ne)</div><div class="ttdoc">Set number of fields and elements of an aggrate. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00569">SymbolTableInfo.h:569</a></div></div>
145
182
  <div class="ttc" id="namespaceSVF_html_a03db82b8a7914367024723dba4d6ca3c"><div class="ttname"><a href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">SVF::DataLayout</a></div><div class="ttdeci">llvm::DataLayout DataLayout</div><div class="ttdoc">LLVM data layout. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00115">BasicTypes.h:115</a></div></div>
146
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html">SVF::ObjTypeInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00597">SymbolTableInfo.h:597</a></div></div>
183
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html">SVF::ObjTypeInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00593">SymbolTableInfo.h:593</a></div></div>
147
184
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
148
- <div class="ttc" id="classSVF_1_1StInfo_html"><div class="ttname"><a href="classSVF_1_1StInfo.html">SVF::StInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00503">SymbolTableInfo.h:503</a></div></div>
149
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a6f6c80f7d067a6082a9af04d2547cf34"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">SVF::ObjTypeInfo::isConstantData</a></div><div class="ttdeci">bool isConstantData()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00735">SymbolTableInfo.h:735</a></div></div>
150
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a66692043a56c327ac7ac00cc3126cd78"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">SVF::ObjTypeInfo::analyzeHeapObjType</a></div><div class="ttdeci">void analyzeHeapObjType(const Type *type)</div><div class="ttdoc">Analyse types of heap and static objects. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00586">SymbolTableInfo.cpp:586</a></div></div>
185
+ <div class="ttc" id="classSVF_1_1StInfo_html"><div class="ttname"><a href="classSVF_1_1StInfo.html">SVF::StInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00499">SymbolTableInfo.h:499</a></div></div>
186
+ <div class="ttc" id="classSVF_1_1StInfo_html_ae5fad367673315da57a604e64b5889f0"><div class="ttname"><a href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">SVF::StInfo::getNumOfFlattenFields</a></div><div class="ttdeci">u32_t getNumOfFlattenFields() const</div><div class="ttdoc">Return the number of fields after flattenning (ignoring array elements) </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00581">SymbolTableInfo.h:581</a></div></div>
187
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a6f6c80f7d067a6082a9af04d2547cf34"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">SVF::ObjTypeInfo::isConstantData</a></div><div class="ttdeci">bool isConstantData()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00719">SymbolTableInfo.h:719</a></div></div>
151
188
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a973113323e30a01fd904b35ac18d40ce"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVF::SVFUtil::getTypeOfHeapAlloc</a></div><div class="ttdeci">const Type * getTypeOfHeapAlloc(const llvm::Instruction *inst)</div><div class="ttdoc">Get the type of the heap allocation. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00269">LLVMUtil.cpp:269</a></div></div>
152
189
  <div class="ttc" id="namespaceSVF_html_a366625858f450a1ea5f985a3c83e0f14"><div class="ttname"><a href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">SVF::u64_t</a></div><div class="ttdeci">unsigned long long u64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00077">SVFBasicTypes.h:77</a></div></div>
153
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa2855b69150287e5f04a7a683dc4c91f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">SVF::ObjTypeInfo::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00686">SymbolTableInfo.h:686</a></div></div>
154
- <div class="ttc" id="classSVF_1_1MemObj_html_a1a4ff4aaaf2573240a318e1b79328cd0"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">SVF::MemObj::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00785">SymbolTableInfo.cpp:785</a></div></div>
155
- <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a06493939f797f122b70b90bbf22cad7a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">SVF::ObjTypeInfo::isStruct</a></div><div class="ttdeci">bool isStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00715">SymbolTableInfo.h:715</a></div></div>
190
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa2855b69150287e5f04a7a683dc4c91f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">SVF::ObjTypeInfo::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00670">SymbolTableInfo.h:670</a></div></div>
191
+ <div class="ttc" id="classSVF_1_1Options_html_a170426acc0f9d99470fd1bde40d273e2"><div class="ttname"><a href="classSVF_1_1Options.html#a170426acc0f9d99470fd1bde40d273e2">SVF::Options::ModelArrays</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; ModelArrays</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00214">Options.h:214</a></div></div>
192
+ <div class="ttc" id="classSVF_1_1MemObj_html_a1a4ff4aaaf2573240a318e1b79328cd0"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">SVF::MemObj::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00774">SymbolTableInfo.cpp:774</a></div></div>
193
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_aea1c4ec32c307feb5da455a41cc51b5e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e">SVF::SymbolTableInfo::collectArrayInfo</a></div><div class="ttdeci">virtual void collectArrayInfo(const ArrayType *T)</div><div class="ttdoc">Collect the array info. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00144">SymbolTableInfo.cpp:144</a></div></div>
194
+ <div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a06493939f797f122b70b90bbf22cad7a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">SVF::ObjTypeInfo::isStruct</a></div><div class="ttdeci">bool isStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00699">SymbolTableInfo.h:699</a></div></div>
156
195
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html">SVF::SymbolTableInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00047">SymbolTableInfo.h:47</a></div></div>
196
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_abf7567c655499d6744de8df689c11fad"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad">SVF::SymbolTableInfo::collectSimpleTypeInfo</a></div><div class="ttdeci">virtual void collectSimpleTypeInfo(const Type *T)</div><div class="ttdoc">Collect simple type (non-aggregate) info. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00247">SymbolTableInfo.cpp:247</a></div></div>
157
197
  <div class="ttc" id="namespaceSVF_html_aedf0d6718ca176e0b9e17ab4b30729c6"><div class="ttname"><a href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">SVF::OrderedMap</a></div><div class="ttdeci">std::map&lt; Key, Value, Compare, Allocator &gt; OrderedMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00107">SVFBasicTypes.h:107</a></div></div>
158
198
  </div><!-- fragment --></div><!-- contents -->
159
199
  <!-- start footer part -->