svf-tools 1.0.402 → 1.0.405

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 (265) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +2 -2
  3. package/SVF-doxygen/html/html/CHG_8h_source.html +5 -6
  4. package/SVF-doxygen/html/html/CPPUtil_8cpp.html +3 -3
  5. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +3 -2
  6. package/SVF-doxygen/html/html/CSC_8cpp_source.html +4 -4
  7. package/SVF-doxygen/html/html/CSC_8h_source.html +3 -3
  8. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -2
  9. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +4 -4
  10. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +2 -2
  14. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +5 -5
  17. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
  18. package/SVF-doxygen/html/html/ICFG_8h_source.html +3 -3
  19. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  20. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -2
  21. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +5 -5
  22. package/SVF-doxygen/html/html/LocationSet_8h_source.html +7 -7
  23. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
  24. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +3 -3
  27. package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +2 -2
  28. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -5
  30. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +10 -10
  31. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
  33. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +6 -6
  34. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +5 -5
  35. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +1 -2
  36. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
  37. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -3
  38. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  39. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  40. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  41. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  42. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  44. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +1 -1
  46. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  47. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  49. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +10 -10
  50. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  53. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  54. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +2 -2
  55. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +17 -17
  56. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
  57. package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +1 -1
  58. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
  59. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +4 -4
  60. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +24 -24
  61. package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1CSC-members.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +11 -11
  64. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  65. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  69. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +4 -4
  73. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  75. package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +1 -2
  76. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +1 -1
  79. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  81. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +1 -1
  82. package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
  86. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +1 -1
  87. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +3 -3
  88. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +2 -2
  90. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  91. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  94. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +1 -1
  95. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +1 -1
  96. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +2 -2
  97. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +2 -2
  98. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
  100. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +13 -13
  101. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +16 -16
  103. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +12 -12
  106. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +1 -1
  108. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
  109. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
  110. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  111. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
  112. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  113. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +1 -1
  114. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
  115. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +2 -2
  116. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
  117. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +1 -1
  118. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  119. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  120. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +3 -3
  121. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +24 -24
  122. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
  123. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +1 -1
  128. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +5 -5
  131. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +48 -48
  132. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  133. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  134. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +1 -1
  135. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +9 -9
  137. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  138. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
  139. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile-members.html +1 -1
  141. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +8 -8
  142. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +1 -1
  153. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +16 -16
  157. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +2 -2
  158. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +63 -63
  159. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +2 -2
  161. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  166. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  168. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +9 -9
  170. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  178. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  179. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +1 -1
  186. package/SVF-doxygen/html/html/functions_a.html +6 -6
  187. package/SVF-doxygen/html/html/functions_b.html +1 -1
  188. package/SVF-doxygen/html/html/functions_f.html +2 -2
  189. package/SVF-doxygen/html/html/functions_func.html +6 -6
  190. package/SVF-doxygen/html/html/functions_func_f.html +1 -1
  191. package/SVF-doxygen/html/html/functions_func_g.html +9 -9
  192. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  193. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  194. package/SVF-doxygen/html/html/functions_func_v.html +1 -1
  195. package/SVF-doxygen/html/html/functions_g.html +9 -9
  196. package/SVF-doxygen/html/html/functions_i.html +1 -1
  197. package/SVF-doxygen/html/html/functions_l.html +1 -1
  198. package/SVF-doxygen/html/html/functions_n.html +1 -1
  199. package/SVF-doxygen/html/html/functions_s.html +3 -3
  200. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  201. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  202. package/SVF-doxygen/html/html/functions_v.html +3 -3
  203. package/SVF-doxygen/html/html/functions_vars_b.html +1 -1
  204. package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
  205. package/SVF-doxygen/html/html/functions_vars_v.html +2 -2
  206. package/SVF-doxygen/html/html/namespaceSVF.html +5 -5
  207. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  208. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +4 -4
  209. package/SVF-doxygen/html/html/namespacemembers_s.html +1 -1
  210. package/SVF-doxygen/html/html/namespacemembers_type_s.html +1 -1
  211. package/SVF-doxygen/html/html/search/all_1.js +4 -4
  212. package/SVF-doxygen/html/html/search/all_13.js +4 -4
  213. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  214. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  215. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  216. package/SVF-doxygen/html/html/search/all_7.js +5 -5
  217. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  218. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  219. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  220. package/SVF-doxygen/html/html/search/functions_0.js +4 -4
  221. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  222. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  223. package/SVF-doxygen/html/html/search/functions_5.js +1 -1
  224. package/SVF-doxygen/html/html/search/functions_6.js +5 -5
  225. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  226. package/SVF-doxygen/html/html/search/functions_a.js +1 -1
  227. package/SVF-doxygen/html/html/search/typedefs_11.js +2 -2
  228. package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
  229. package/SVF-doxygen/html/html/search/variables_16.js +2 -2
  230. package/SVF-doxygen/html/html/search/variables_2.js +1 -1
  231. package/SVF-doxygen/html/html/search/variables_6.js +1 -1
  232. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +2 -2
  233. package/include/Graphs/CHG.h +6 -6
  234. package/include/Graphs/ConsGEdge.h +1 -1
  235. package/include/Graphs/ICFG.h +1 -1
  236. package/include/Graphs/ICFGEdge.h +3 -3
  237. package/include/MemoryModel/LocationSet.h +5 -5
  238. package/include/MemoryModel/PAGBuilderFromFile.h +1 -1
  239. package/include/MemoryModel/SVFIR.h +1 -1
  240. package/include/MemoryModel/SVFStatements.h +4 -4
  241. package/include/MemoryModel/SVFVariables.h +2 -2
  242. package/include/MemoryModel/SymbolTableInfo.h +1 -1
  243. package/include/SVF-FE/SVFIRBuilder.h +2 -2
  244. package/include/Util/IRAnnotator.h +2 -2
  245. package/include/Util/SVFBasicTypes.h +1 -1
  246. package/include/WPA/AndersenSFR.h +1 -1
  247. package/include/WPA/CSC.h +1 -1
  248. package/lib/Graphs/ICFG.cpp +1 -1
  249. package/lib/MTA/MHP.cpp +2 -2
  250. package/lib/MemoryModel/LocationSet.cpp +3 -3
  251. package/lib/MemoryModel/PAGBuilderFromFile.cpp +2 -2
  252. package/lib/MemoryModel/SVFIR.cpp +1 -1
  253. package/lib/MemoryModel/SymbolTableInfo.cpp +3 -3
  254. package/lib/SVF-FE/CPPUtil.cpp +6 -6
  255. package/lib/SVF-FE/ICFGBuilder.cpp +1 -1
  256. package/lib/SVF-FE/LLVMUtil.cpp +1 -1
  257. package/lib/SVF-FE/SVFIRBuilder.cpp +17 -10
  258. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
  259. package/lib/Util/Conditions.cpp +1 -1
  260. package/lib/Util/ExtAPI.cpp +13 -0
  261. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  262. package/lib/WPA/AndersenSFR.cpp +6 -6
  263. package/lib/WPA/CSC.cpp +5 -5
  264. package/lib/WPA/TypeAnalysis.cpp +3 -3
  265. package/package.json +1 -1
@@ -66,11 +66,10 @@ $(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="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#a828941e63c26448bc9ace9adb72db454"> 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#a828941e63c26448bc9ace9adb72db454">StInfo::getOriginalElemType</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"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08"> 78</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="l00079"></a><span class="lineno"> 79</span>&#160;{</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(T);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; TypeToFieldInfoMap::iterator it = typeToFieldInfo.find(T);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (it != typeToFieldInfo.end())</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> it;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span></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; collectTypeInfo(T);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> typeToFieldInfo.find(T);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a2b0f2c6745d14a9f6447ed96484dddac"> 94</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="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span>(type &amp;&amp; type-&gt;isPointerTy()){</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</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="l00099"></a><span class="lineno"> 99</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="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> typeInfo;</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;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 107</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="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">if</span> (symInfo == <span class="keyword">nullptr</span>)</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; symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; symInfo-&gt;setModelConstants(<a class="code" href="classSVF_1_1Options.html#a5c051cf6a93a87a07aa1d31e302a2877">Options::ModelConsts</a>);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> symInfo;</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;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 120</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="l00121"></a><span class="lineno"> 121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</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="l00123"></a><span class="lineno"> 123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</span>&#160; collectArrayInfo(aty);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</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="l00127"></a><span class="lineno"> 127</span>&#160; collectStructInfo(sty);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</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;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 136</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="l00137"></a><span class="lineno"> 137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</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="l00140"></a><span class="lineno"> 140</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="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; elemTy = aty-&gt;getElementType();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</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="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="l00147"></a><span class="lineno"> 147</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span>(totalElemNum==0){</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, elemTy, 0);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(elemTy);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(elemTy);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</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="l00162"></a><span class="lineno"> 162</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="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</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#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[j];</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(fieldTy);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</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="l00172"></a><span class="lineno"> 172</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="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; totalElemNum; i++){</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</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="l00176"></a><span class="lineno"> 176</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[j]);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().size() == nfE * totalElemNum &amp;&amp; <span class="stringliteral">&quot;typeForArray size incorrect!!!&quot;</span>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfE, nfE * totalElemNum);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</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;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 189</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="l00190"></a><span class="lineno"> 190</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</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="l00193"></a><span class="lineno"> 193</span>&#160; typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// The offset when considering array stride info</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">for</span> (StructType::element_iterator it = sty-&gt;element_begin(), ie =</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; sty-&gt;element_end(); it != ie; ++it)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(nf, et, strideOffset);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</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="l00207"></a><span class="lineno"> 207</span>&#160; {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</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="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</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#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[j];</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(elemTy);</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; nf += nfE;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; strideOffset += nfE * subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpi = 0; tpi &lt; subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>(); tpi++){</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpj = 0; tpj &lt; nfE; tpj++){</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[tpj]);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</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; nf += 1;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; strideOffset += 1;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(et);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(et);</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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().size() == strideOffset &amp;&amp; <span class="stringliteral">&quot;typeForStruct size incorrect!&quot;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nf,strideOffset);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (nf &gt; maxStSize)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; maxStruct = sty;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; maxStSize = nf;</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="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 248</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="l00249"></a><span class="lineno"> 249</span>&#160;{</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</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="l00251"></a><span class="lineno"> 251</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, ty, 0);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(ty);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(ty);</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;const Type*&gt; &amp;fields = stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;const Type*&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="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = *it;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</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="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(elemTy))</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</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; <span class="keywordflow">return</span> v-&gt;isConstant();</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"> 368</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="l00369"></a><span class="lineno"> 369</span>&#160;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 372</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="l00373"></a><span class="lineno"> 373</span>&#160;{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</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="l00377"></a><span class="lineno"> 377</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 381</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="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</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="l00386"></a><span class="lineno"> 386</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 390</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="l00391"></a><span class="lineno"> 391</span>&#160;{</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</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="l00393"></a><span class="lineno"> 393</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="l00394"></a><span class="lineno"> 394</span>&#160; objMap[symId] = memObj;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> memObj;</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;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aec579894eed558ea89740b68360187aa"> 399</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="l00400"></a><span class="lineno"> 400</span>&#160;{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</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="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenElements();</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenFields();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;}</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6fe89e9d6c18a6aff6dffc1c78d08dff"> 408</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="l00409"></a><span class="lineno"> 409</span>&#160;{</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</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="l00411"></a><span class="lineno"> 411</span>&#160; std::vector&lt;u32_t&gt;&amp; so = getStructInfoIter(T)-&gt;second-&gt;getFlattenedElemIdxVec();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</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;element index out of bounds, can&#39;t get flattened index!&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span> so[origId];</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StructType&gt;(T)){</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; std::vector&lt;u32_t&gt;&amp; so = getStructInfoIter(T)-&gt;second-&gt;getFlattenedFieldIdxVec();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</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="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> so[origId];</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</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="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abffa6bdac98c5e64615291e8f2537caa"> 429</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#abffa6bdac98c5e64615291e8f2537caa">SymbolTableInfo::getOriginalElemType</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> origId)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;{</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(baseType)-&gt;second-&gt;getOriginalElemType(origId);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;}</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87ee08e81de307eb9c02889b6ed98dd5"> 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#a87ee08e81de307eb9c02889b6ed98dd5">SymbolTableInfo::getFlatternedElemType</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> flatten_idx){</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</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="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keyword">const</span> std::vector&lt;const Type*&gt;&amp; so = getStructInfoIter(baseType)-&gt;second-&gt;getFlattenElementTypes();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (flatten_idx &lt;= so.size() &amp;&amp; !so.empty() &amp;&amp; <span class="stringliteral">&quot;element index out of bounds, can&#39;t get element type!&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> so[flatten_idx];</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">const</span> std::vector&lt;const Type*&gt;&amp; so = getStructInfoIter(baseType)-&gt;second-&gt;getFlattenFieldTypes();</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (flatten_idx &lt;= so.size() &amp;&amp; !so.empty() &amp;&amp; <span class="stringliteral">&quot;element index out of bounds, can&#39;t get element type!&quot;</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> so[flatten_idx];</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;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abdd4abea485b94ae31fd9b75dd3866de"> 449</a></span>&#160;<span class="keyword">const</span> std::vector&lt;const Type*&gt;&amp; <a class="code" href="classSVF_1_1SymbolTableInfo.html#abdd4abea485b94ae31fd9b75dd3866de">SymbolTableInfo::getFlattenFieldTypes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</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; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getFlattenFieldTypes();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;}</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 457</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="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">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="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#aed0b0b9f035057552a6a82154fd88e61">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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(at);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\tarray type &quot;</span>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t [element size = &quot;</span> &lt;&lt; getNumOfFlattenElements(at) &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</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; <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="l00471"></a><span class="lineno"> 471</span>&#160; {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(st);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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; std::vector&lt;const Type*&gt;&amp; finfo = getStructInfo(st)-&gt;getFlattenFieldTypes();</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;const Type*&gt;::const_iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; it!=eit; ++it, field_idx++)</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; \tField_idx = &quot;</span> &lt;&lt; field_idx;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;, field type: &quot;</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(*it);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</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="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getNumOfFlattenElements(pt-&gt;getElementType());</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(pt);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\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> <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="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="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(fu-&gt;getReturnType());</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;(Function)}\n\n&quot;</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</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">else</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</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="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getNumOfFlattenElements(type);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(type);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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="l00514"></a><span class="lineno"> 514</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;}</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 518</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="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">switch</span> (symtype) {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlackHole&quot;</span>;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ConstantObj&quot;</span>;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlkPtr&quot;</span>;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NullPtr&quot;</span>;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ValSym&quot;</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ObjSym&quot;</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;RetSym&quot;</span>;</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">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;VarargSym&quot;</span>;</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="keywordflow">default</span>: {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Invalid SYMTYPE&quot;</span>;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</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;</div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 551</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="l00552"></a><span class="lineno"> 552</span>&#160;{</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;SymID, Value*&gt;</a> idmap;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; ++iter)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</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="l00559"></a><span class="lineno"> 559</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</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="l00561"></a><span class="lineno"> 561</span>&#160; idmap[i] = val;</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="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; ++iter)</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</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="l00569"></a><span class="lineno"> 569</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; ++iter)</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</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="l00575"></a><span class="lineno"> 575</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</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="l00577"></a><span class="lineno"> 577</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; ++iter)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</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="l00585"></a><span class="lineno"> 585</span>&#160; idmap[i] = val;</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;{SymbolTableInfo \n&quot;</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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="l00590"></a><span class="lineno"> 590</span>&#160; }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</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#a3a58b1e0192b92dac5bbfad24adbcdac"> 597</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="l00598"></a><span class="lineno"> 598</span>&#160;{</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</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="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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; <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="l00603"></a><span class="lineno"> 603</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="l00604"></a><span class="lineno"> 604</span>&#160; {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; ety = AT-&gt;getElementType();</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</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="l00609"></a><span class="lineno"> 609</span>&#160; {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a87ee08e81de307eb9c02889b6ed98dd5">getFlatternedElemType</a>(ety, ls.<a class="code" href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">accumulateConstantFieldIdx</a>());</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">if</span>(elemTy-&gt;isPointerTy())</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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; <span class="keywordflow">else</span></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; <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="l00619"></a><span class="lineno"> 619</span>&#160; }</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;</div><div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 625</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="l00626"></a><span class="lineno"> 626</span>&#160;{</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; typeInfo-&gt;setMaxFieldOffsetLimit(<a class="code" href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">StInfo::getMaxFieldLimit</a>());</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;}</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;</div><div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 634</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="l00635"></a><span class="lineno"> 635</span>&#160; symId(id), refVal(val), typeInfo(ti)</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;}</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 642</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="l00643"></a><span class="lineno"> 643</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</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="l00645"></a><span class="lineno"> 645</span>&#160;}</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;</div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 649</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="l00650"></a><span class="lineno"> 650</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</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="l00652"></a><span class="lineno"> 652</span>&#160; {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</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="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">return</span> type-&gt;getElementType();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</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="l00657"></a><span class="lineno"> 657</span>&#160; }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</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="l00659"></a><span class="lineno"> 659</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="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</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="l00662"></a><span class="lineno"> 662</span>&#160;}</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 666</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="l00667"></a><span class="lineno"> 667</span>&#160;{</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;}</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88"> 673</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="l00674"></a><span class="lineno"> 674</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</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="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="l00679"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 679</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="l00680"></a><span class="lineno"> 680</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</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="l00682"></a><span class="lineno"> 682</span>&#160;}</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 685</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="l00686"></a><span class="lineno"> 686</span>&#160;{</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</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="l00688"></a><span class="lineno"> 688</span>&#160;}</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 690</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="l00691"></a><span class="lineno"> 691</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</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="l00693"></a><span class="lineno"> 693</span>&#160;}</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 695</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="l00696"></a><span class="lineno"> 696</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</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="l00698"></a><span class="lineno"> 698</span>&#160;}</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"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 700</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="l00701"></a><span class="lineno"> 701</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</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="l00703"></a><span class="lineno"> 703</span>&#160;}</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 705</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="l00706"></a><span class="lineno"> 706</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</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="l00708"></a><span class="lineno"> 708</span>&#160;}</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 710</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="l00711"></a><span class="lineno"> 711</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</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="l00713"></a><span class="lineno"> 713</span>&#160;}</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 715</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="l00716"></a><span class="lineno"> 716</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</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="l00718"></a><span class="lineno"> 718</span>&#160;}</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div><div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 720</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="l00721"></a><span class="lineno"> 721</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</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="l00723"></a><span class="lineno"> 723</span>&#160;}</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 725</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="l00726"></a><span class="lineno"> 726</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</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="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#a616e9f4d6f82a253f94391c47668b9a6"> 730</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="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#aca1e900f9b0a774684af77666cf033e3">isVarArray</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#a019a77516c403f1f3cc72917b810a41f"> 735</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="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#a41f916ab4e3a2c163fca636eae948ce7">isConstantStruct</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#a7f828731597450f1d43b61413ab0e7bb"> 740</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="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#ac1ee7a720959c0e97496870d6e759212">isConstantArray</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#a1a4ff4aaaf2573240a318e1b79328cd0"> 745</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="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#a8e6c60978df9828c1dcb54086e83edc1">isConstDataOrConstGlobal</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#aa50d7c3b4e7ac0aa769bc094bea26e16"> 750</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="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#a6f6c80f7d067a6082a9af04d2547cf34">isConstantData</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#a6dae1b3429c6049f0153ec006d329082"> 755</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="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#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</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#ad6926becf26a625cfe165aec120b2a1e"> 760</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="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#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</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#a614b26f4a3db926055a576b13842c1d7"> 765</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="l00766"></a><span class="lineno"> 766</span>&#160; std::string str;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</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="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</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#l00412">SymbolTableInfo.h:412</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#a828941e63c26448bc9ace9adb72db454"> 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#a828941e63c26448bc9ace9adb72db454">StInfo::getOriginalElemType</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"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08"> 78</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="l00079"></a><span class="lineno"> 79</span>&#160;{</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(T);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; TypeToFieldInfoMap::iterator it = typeToFieldInfo.find(T);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (it != typeToFieldInfo.end())</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> it;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span></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; collectTypeInfo(T);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> typeToFieldInfo.find(T);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a2b0f2c6745d14a9f6447ed96484dddac"> 94</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="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span>(type &amp;&amp; type-&gt;isPointerTy()){</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</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="l00099"></a><span class="lineno"> 99</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="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> typeInfo;</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;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 107</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="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">if</span> (symInfo == <span class="keyword">nullptr</span>)</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; symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; symInfo-&gt;setModelConstants(<a class="code" href="classSVF_1_1Options.html#a5c051cf6a93a87a07aa1d31e302a2877">Options::ModelConsts</a>);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> symInfo;</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;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 120</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="l00121"></a><span class="lineno"> 121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</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="l00123"></a><span class="lineno"> 123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</span>&#160; collectArrayInfo(aty);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</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="l00127"></a><span class="lineno"> 127</span>&#160; collectStructInfo(sty);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</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;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 136</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="l00137"></a><span class="lineno"> 137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</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="l00140"></a><span class="lineno"> 140</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="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; elemTy = aty-&gt;getElementType();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</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="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="l00147"></a><span class="lineno"> 147</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span>(totalElemNum==0){</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, elemTy, 0);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(elemTy);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(elemTy);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</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="l00162"></a><span class="lineno"> 162</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="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</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#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[j];</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(fieldTy);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</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="l00172"></a><span class="lineno"> 172</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="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; totalElemNum; i++){</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</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="l00176"></a><span class="lineno"> 176</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[j]);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().size() == nfE * totalElemNum &amp;&amp; <span class="stringliteral">&quot;typeForArray size incorrect!!!&quot;</span>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfE, nfE * totalElemNum);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</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;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 189</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="l00190"></a><span class="lineno"> 190</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</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="l00193"></a><span class="lineno"> 193</span>&#160; typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// The offset when considering array stride info</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">for</span> (StructType::element_iterator it = sty-&gt;element_begin(), ie =</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; sty-&gt;element_end(); it != ie; ++it)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(nf, et, strideOffset);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</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="l00207"></a><span class="lineno"> 207</span>&#160; {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</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="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</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#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[j];</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(elemTy);</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; nf += nfE;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; strideOffset += nfE * subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpi = 0; tpi &lt; subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>(); tpi++){</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpj = 0; tpj &lt; nfE; tpj++){</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(subStinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>()[tpj]);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</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; nf += 1;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; strideOffset += 1;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(et);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(et);</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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().size() == strideOffset &amp;&amp; <span class="stringliteral">&quot;typeForStruct size incorrect!&quot;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nf,strideOffset);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (nf &gt; maxStSize)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; maxStruct = sty;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; maxStSize = nf;</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="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 248</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="l00249"></a><span class="lineno"> 249</span>&#160;{</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</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="l00251"></a><span class="lineno"> 251</span>&#160; typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, ty, 0);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>().push_back(ty);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; stinfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">getFlattenElementTypes</a>().push_back(ty);</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#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#a63c5c8e03b35e0d0cea94137d309c853">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;const Type*&gt; &amp;fields = stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a7fe5593e487a04e8f0eb28ca7bc31fe9">getFlattenFieldTypes</a>();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;const Type*&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="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = *it;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</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="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(elemTy))</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</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; <span class="keywordflow">return</span> v-&gt;isConstant();</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"> 368</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="l00369"></a><span class="lineno"> 369</span>&#160;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 372</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="l00373"></a><span class="lineno"> 373</span>&#160;{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</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="l00377"></a><span class="lineno"> 377</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 381</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="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</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="l00386"></a><span class="lineno"> 386</span>&#160; objMap[symId] = obj;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 390</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="l00391"></a><span class="lineno"> 391</span>&#160;{</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</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="l00393"></a><span class="lineno"> 393</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="l00394"></a><span class="lineno"> 394</span>&#160; objMap[symId] = memObj;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> memObj;</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;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aec579894eed558ea89740b68360187aa"> 399</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="l00400"></a><span class="lineno"> 400</span>&#160;{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</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="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenElements();</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getNumOfFlattenFields();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;}</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8fc42c2b02317621d6aeb3c5f52d3ee8"> 408</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a8fc42c2b02317621d6aeb3c5f52d3ee8">SymbolTableInfo::getFlattenedElemIdx</a>(<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> origId)</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"> 410</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="l00411"></a><span class="lineno"> 411</span>&#160; std::vector&lt;u32_t&gt;&amp; so = getStructInfoIter(T)-&gt;second-&gt;getFlattenedElemIdxVec();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</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;element index out of bounds, can&#39;t get flattened index!&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span> so[origId];</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StructType&gt;(T)){</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; std::vector&lt;u32_t&gt;&amp; so = getStructInfoIter(T)-&gt;second-&gt;getFlattenedFieldIdxVec();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</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="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> so[origId];</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</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="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abffa6bdac98c5e64615291e8f2537caa"> 429</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#abffa6bdac98c5e64615291e8f2537caa">SymbolTableInfo::getOriginalElemType</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> origId)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;{</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">return</span> getStructInfoIter(baseType)-&gt;second-&gt;getOriginalElemType(origId);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;}</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87ee08e81de307eb9c02889b6ed98dd5"> 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#a87ee08e81de307eb9c02889b6ed98dd5">SymbolTableInfo::getFlatternedElemType</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> flatten_idx){</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</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="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keyword">const</span> std::vector&lt;const Type*&gt;&amp; so = getStructInfoIter(baseType)-&gt;second-&gt;getFlattenElementTypes();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (flatten_idx &lt;= so.size() &amp;&amp; !so.empty() &amp;&amp; <span class="stringliteral">&quot;element index out of bounds, can&#39;t get element type!&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> so[flatten_idx];</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">const</span> std::vector&lt;const Type*&gt;&amp; so = getStructInfoIter(baseType)-&gt;second-&gt;getFlattenFieldTypes();</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (flatten_idx &lt;= so.size() &amp;&amp; !so.empty() &amp;&amp; <span class="stringliteral">&quot;element index out of bounds, can&#39;t get element type!&quot;</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> so[flatten_idx];</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;}</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abdd4abea485b94ae31fd9b75dd3866de"> 449</a></span>&#160;<span class="keyword">const</span> std::vector&lt;const Type*&gt;&amp; <a class="code" href="classSVF_1_1SymbolTableInfo.html#abdd4abea485b94ae31fd9b75dd3866de">SymbolTableInfo::getFlattenFieldTypes</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</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; <span class="keywordflow">return</span> getStructInfoIter(T)-&gt;second-&gt;getFlattenFieldTypes();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;}</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 457</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="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">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="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#aed0b0b9f035057552a6a82154fd88e61">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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(at);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\tarray type &quot;</span>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t [element size = &quot;</span> &lt;&lt; getNumOfFlattenElements(at) &lt;&lt; <span class="stringliteral">&quot;]\n&quot;</span>;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</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; <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="l00471"></a><span class="lineno"> 471</span>&#160; {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(st);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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; std::vector&lt;const Type*&gt;&amp; finfo = getStructInfo(st)-&gt;getFlattenFieldTypes();</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;const Type*&gt;::const_iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; it!=eit; ++it, field_idx++)</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; \tField_idx = &quot;</span> &lt;&lt; field_idx;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;, field type: &quot;</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(*it);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</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="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getNumOfFlattenElements(pt-&gt;getElementType());</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(pt);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\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> <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="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="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(fu-&gt;getReturnType());</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;(Function)}\n\n&quot;</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</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">else</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</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="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getNumOfFlattenElements(type);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt;<span class="stringliteral">&quot; {Type: &quot;</span>;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a817a63e8330530cb18e077556f7ce518">type2String</a>(type);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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="l00514"></a><span class="lineno"> 514</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;}</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 518</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="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">switch</span> (symtype) {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlackHole&quot;</span>;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ConstantObj&quot;</span>;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;BlkPtr&quot;</span>;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;NullPtr&quot;</span>;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ValSym&quot;</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ObjSym&quot;</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;RetSym&quot;</span>;</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">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;VarargSym&quot;</span>;</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="keywordflow">default</span>: {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Invalid SYMTYPE&quot;</span>;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</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;</div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 551</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="l00552"></a><span class="lineno"> 552</span>&#160;{</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;SymID, Value*&gt;</a> idmap;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; ++iter)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</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="l00559"></a><span class="lineno"> 559</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</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="l00561"></a><span class="lineno"> 561</span>&#160; idmap[i] = val;</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="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; ++iter)</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</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="l00569"></a><span class="lineno"> 569</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; ++iter)</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</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="l00575"></a><span class="lineno"> 575</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</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="l00577"></a><span class="lineno"> 577</span>&#160; idmap[i] = val;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; ++iter)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter-&gt;second;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; maxid = max(i, maxid);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</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="l00585"></a><span class="lineno"> 585</span>&#160; idmap[i] = val;</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;{SymbolTableInfo \n&quot;</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">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="l00590"></a><span class="lineno"> 590</span>&#160; }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</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#a3a58b1e0192b92dac5bbfad24adbcdac"> 597</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="l00598"></a><span class="lineno"> 598</span>&#160;{</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</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="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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; <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="l00603"></a><span class="lineno"> 603</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="l00604"></a><span class="lineno"> 604</span>&#160; {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; ety = AT-&gt;getElementType();</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</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="l00609"></a><span class="lineno"> 609</span>&#160; {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a87ee08e81de307eb9c02889b6ed98dd5">getFlatternedElemType</a>(ety, ls.<a class="code" href="classSVF_1_1LocationSet.html#a63c5c8e03b35e0d0cea94137d309c853">accumulateConstantFieldIdx</a>());</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">if</span>(elemTy-&gt;isPointerTy())</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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; <span class="keywordflow">else</span></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; <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="l00619"></a><span class="lineno"> 619</span>&#160; }</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;</div><div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 625</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="l00626"></a><span class="lineno"> 626</span>&#160;{</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; typeInfo-&gt;setMaxFieldOffsetLimit(<a class="code" href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">StInfo::getMaxFieldLimit</a>());</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;}</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;</div><div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 634</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="l00635"></a><span class="lineno"> 635</span>&#160; symId(id), refVal(val), typeInfo(ti)</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;}</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 642</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="l00643"></a><span class="lineno"> 643</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</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="l00645"></a><span class="lineno"> 645</span>&#160;}</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;</div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 649</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="l00650"></a><span class="lineno"> 650</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</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="l00652"></a><span class="lineno"> 652</span>&#160; {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</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="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">return</span> type-&gt;getElementType();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</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="l00657"></a><span class="lineno"> 657</span>&#160; }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</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="l00659"></a><span class="lineno"> 659</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="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</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="l00662"></a><span class="lineno"> 662</span>&#160;}</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 666</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="l00667"></a><span class="lineno"> 667</span>&#160;{</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;}</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88"> 673</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="l00674"></a><span class="lineno"> 674</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</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="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="l00679"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 679</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="l00680"></a><span class="lineno"> 680</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</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="l00682"></a><span class="lineno"> 682</span>&#160;}</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 685</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="l00686"></a><span class="lineno"> 686</span>&#160;{</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</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="l00688"></a><span class="lineno"> 688</span>&#160;}</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 690</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="l00691"></a><span class="lineno"> 691</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</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="l00693"></a><span class="lineno"> 693</span>&#160;}</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 695</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="l00696"></a><span class="lineno"> 696</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</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="l00698"></a><span class="lineno"> 698</span>&#160;}</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"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 700</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="l00701"></a><span class="lineno"> 701</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</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="l00703"></a><span class="lineno"> 703</span>&#160;}</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 705</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="l00706"></a><span class="lineno"> 706</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</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="l00708"></a><span class="lineno"> 708</span>&#160;}</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 710</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="l00711"></a><span class="lineno"> 711</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</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="l00713"></a><span class="lineno"> 713</span>&#160;}</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 715</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="l00716"></a><span class="lineno"> 716</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</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="l00718"></a><span class="lineno"> 718</span>&#160;}</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div><div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 720</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="l00721"></a><span class="lineno"> 721</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</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="l00723"></a><span class="lineno"> 723</span>&#160;}</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 725</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="l00726"></a><span class="lineno"> 726</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</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="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#a616e9f4d6f82a253f94391c47668b9a6"> 730</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="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#aca1e900f9b0a774684af77666cf033e3">isVarArray</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#a019a77516c403f1f3cc72917b810a41f"> 735</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="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#a41f916ab4e3a2c163fca636eae948ce7">isConstantStruct</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#a7f828731597450f1d43b61413ab0e7bb"> 740</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="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#ac1ee7a720959c0e97496870d6e759212">isConstantArray</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#a1a4ff4aaaf2573240a318e1b79328cd0"> 745</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="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#a8e6c60978df9828c1dcb54086e83edc1">isConstDataOrConstGlobal</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#aa50d7c3b4e7ac0aa769bc094bea26e16"> 750</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="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#a6f6c80f7d067a6082a9af04d2547cf34">isConstantData</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#a6dae1b3429c6049f0153ec006d329082"> 755</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="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#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</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#ad6926becf26a625cfe165aec120b2a1e"> 760</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="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#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</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#a614b26f4a3db926055a576b13842c1d7"> 765</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="l00766"></a><span class="lineno"> 766</span>&#160; std::string str;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</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="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</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#l00412">SymbolTableInfo.h:412</a></div></div>
70
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#l00715">SymbolTableInfo.cpp:715</a></div></div>
71
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
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#l00642">SymbolTableInfo.cpp:642</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#l00090">LocationSet.h:90</a></div></div>
74
73
  <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#l00192">SymbolTableInfo.h:192</a></div></div>
75
74
  <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#l00407">SymbolTableInfo.h:407</a></div></div>
76
75
  <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="Util_2BasicTypes_8h_source.html#l00104">BasicTypes.h:104</a></div></div>
@@ -94,8 +93,10 @@ $(function() {
94
93
  <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#l00518">SymbolTableInfo.cpp:518</a></div></div>
95
94
  <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#l00685">SymbolTableInfo.cpp:685</a></div></div>
96
95
  <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#l00649">SymbolTableInfo.cpp:649</a></div></div>
96
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a8fc42c2b02317621d6aeb3c5f52d3ee8"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a8fc42c2b02317621d6aeb3c5f52d3ee8">SVF::SymbolTableInfo::getFlattenedElemIdx</a></div><div class="ttdeci">u32_t getFlattenedElemIdx(const Type *T, u32_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#l00408">SymbolTableInfo.cpp:408</a></div></div>
97
97
  <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="Util_2BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
98
98
  <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#l00740">SymbolTableInfo.cpp:740</a></div></div>
99
+ <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
99
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#l00372">SymbolTableInfo.cpp:372</a></div></div>
100
101
  <div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
101
102
  <div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
@@ -105,7 +106,6 @@ $(function() {
105
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#l00765">SymbolTableInfo.cpp:765</a></div></div>
106
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#l00735">SymbolTableInfo.cpp:735</a></div></div>
107
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#l00077">SVFBasicTypes.h:77</a></div></div>
108
- <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#l00080">SVFBasicTypes.h:80</a></div></div>
109
109
  <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>
110
110
  <div class="ttc" id="classSVF_1_1StInfo_html_ae46e3a2f3eb02e9facf3e317faaf337d"><div class="ttname"><a href="classSVF_1_1StInfo.html#ae46e3a2f3eb02e9facf3e317faaf337d">SVF::StInfo::getFlattenElementTypes</a></div><div class="ttdeci">std::vector&lt; const Type * &gt; &amp; getFlattenElementTypes()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00556">SymbolTableInfo.h:556</a></div></div>
111
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#l00675">SymbolTableInfo.h:675</a></div></div>
@@ -131,6 +131,7 @@ $(function() {
131
131
  <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#l00457">SymbolTableInfo.cpp:457</a></div></div>
132
132
  <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#l00636">SymbolTableInfo.h:636</a></div></div>
133
133
  <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#l00673">SymbolTableInfo.cpp:673</a></div></div>
134
+ <div class="ttc" id="classSVF_1_1LocationSet_html_a63c5c8e03b35e0d0cea94137d309c853"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a63c5c8e03b35e0d0cea94137d309c853">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">s32_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00090">LocationSet.h:90</a></div></div>
134
135
  <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>
135
136
  <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#l00537">SymbolTableInfo.h:537</a></div></div>
136
137
  <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#l00716">SymbolTableInfo.h:716</a></div></div>
@@ -159,7 +160,6 @@ $(function() {
159
160
  <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#l00394">LLVMUtil.h:394</a></div></div>
160
161
  <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#l00679">SymbolTableInfo.cpp:679</a></div></div>
161
162
  <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#l00634">SymbolTableInfo.cpp:634</a></div></div>
162
- <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#l00408">SymbolTableInfo.cpp:408</a></div></div>
163
163
  <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>
164
164
  <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#l00437">SymbolTableInfo.h:437</a></div></div>
165
165
  <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#l00597">SymbolTableInfo.cpp:597</a></div></div>