svf-tools 1.0.478 → 1.0.481

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 (322) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  3. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/CFGNormalizer_8cpp.html +5 -4
  5. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +50 -40
  6. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +20 -18
  7. package/SVF-doxygen/html/html/CFLAlias_8cpp.html +80 -0
  8. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +107 -0
  9. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +14 -35
  10. package/SVF-doxygen/html/html/CFLGramGraphChecker_8h_source.html +10 -10
  11. package/SVF-doxygen/html/html/CFLGrammar_8cpp.html +1 -0
  12. package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +34 -23
  13. package/SVF-doxygen/html/html/CFLGrammar_8h.html +9 -1
  14. package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +106 -62
  15. package/SVF-doxygen/html/html/CFLGrammar_8txt.html +58 -151
  16. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +24 -11
  17. package/SVF-doxygen/html/html/CFLGraphBuilder_8h.html +2 -0
  18. package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +18 -19
  19. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +27 -16
  20. package/SVF-doxygen/html/html/CFLGraph_8h_source.html +20 -16
  21. package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +14 -14
  22. package/SVF-doxygen/html/html/CFLSolver_8h_source.html +5 -5
  23. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
  25. package/SVF-doxygen/html/html/CHG_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
  29. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +7 -7
  32. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  33. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
  34. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
  36. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +36 -32
  38. package/SVF-doxygen/html/html/ExtAPI_8h.html +36 -0
  39. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +66 -64
  40. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +1 -1
  42. package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +14 -17
  43. package/SVF-doxygen/html/html/GrammarBuilder_8h.html +0 -1
  44. package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +9 -11
  45. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +5 -3
  46. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +2 -2
  47. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  53. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  55. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  57. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  59. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  61. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  62. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  66. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  68. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  69. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
  71. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
  73. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
  74. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
  75. package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
  76. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +8 -8
  77. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  78. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +17 -17
  79. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +15 -15
  80. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  81. package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
  82. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  83. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
  84. package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
  85. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  86. package/SVF-doxygen/html/html/annotated.html +298 -293
  87. package/SVF-doxygen/html/html/cfl_8cpp.html +2 -2
  88. package/SVF-doxygen/html/html/cfl_8cpp_source.html +3 -3
  89. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder-members.html +96 -0
  90. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +197 -0
  91. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.png +0 -0
  92. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +1 -1
  94. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +1 -1
  95. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +1 -1
  96. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  98. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +1 -1
  100. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +3 -3
  102. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +108 -99
  103. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +52 -39
  105. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge-members.html +3 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge.html +62 -0
  107. package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList-members.html +91 -0
  108. package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList.html +459 -0
  109. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar-members.html +47 -38
  110. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar.html +180 -137
  111. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph-members.html +21 -20
  112. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +44 -22
  113. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder-members.html +8 -8
  114. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +53 -43
  115. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.png +0 -0
  116. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +3 -3
  117. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +14 -14
  118. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
  119. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +1 -1
  120. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
  121. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  122. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
  123. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +5 -4
  124. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +158 -125
  125. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +20 -21
  126. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  127. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase-members.html +29 -21
  128. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +397 -179
  129. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash-members.html +81 -0
  130. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +124 -0
  131. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder-members.html +6 -7
  132. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +73 -91
  133. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  134. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
  135. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
  137. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
  138. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
  139. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +3 -3
  140. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  141. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +3 -3
  145. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +14 -14
  148. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +2 -2
  149. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +54 -53
  150. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +11 -11
  152. package/SVF-doxygen/html/html/classes.html +105 -106
  153. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +1 -1
  154. package/SVF-doxygen/html/html/cuddInt_8c.html +17 -17
  155. package/SVF-doxygen/html/html/cuddInt_8c_source.html +3 -3
  156. package/SVF-doxygen/html/html/cuddInt_8h.html +5 -5
  157. package/SVF-doxygen/html/html/cudd_8h.html +9 -9
  158. package/SVF-doxygen/html/html/cudd_8h_source.html +1 -1
  159. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  160. package/SVF-doxygen/html/html/dir_98f9a352f241e0e917d4efaa4086f6e8.html +2 -0
  161. package/SVF-doxygen/html/html/files.html +5 -4
  162. package/SVF-doxygen/html/html/functions_0x7e.html +3 -0
  163. package/SVF-doxygen/html/html/functions_a.html +14 -8
  164. package/SVF-doxygen/html/html/functions_b.html +4 -3
  165. package/SVF-doxygen/html/html/functions_c.html +37 -35
  166. package/SVF-doxygen/html/html/functions_d.html +8 -4
  167. package/SVF-doxygen/html/html/functions_e.html +15 -8
  168. package/SVF-doxygen/html/html/functions_f.html +16 -17
  169. package/SVF-doxygen/html/html/functions_func.html +1 -1
  170. package/SVF-doxygen/html/html/functions_func_0x7e.html +3 -0
  171. package/SVF-doxygen/html/html/functions_func_b.html +3 -2
  172. package/SVF-doxygen/html/html/functions_func_c.html +32 -28
  173. package/SVF-doxygen/html/html/functions_func_e.html +14 -7
  174. package/SVF-doxygen/html/html/functions_func_f.html +3 -2
  175. package/SVF-doxygen/html/html/functions_func_g.html +22 -18
  176. package/SVF-doxygen/html/html/functions_func_i.html +18 -9
  177. package/SVF-doxygen/html/html/functions_func_l.html +2 -5
  178. package/SVF-doxygen/html/html/functions_func_o.html +20 -5
  179. package/SVF-doxygen/html/html/functions_func_p.html +9 -7
  180. package/SVF-doxygen/html/html/functions_func_s.html +12 -6
  181. package/SVF-doxygen/html/html/functions_g.html +25 -21
  182. package/SVF-doxygen/html/html/functions_i.html +29 -20
  183. package/SVF-doxygen/html/html/functions_k.html +2 -1
  184. package/SVF-doxygen/html/html/functions_l.html +1 -4
  185. package/SVF-doxygen/html/html/functions_n.html +1 -1
  186. package/SVF-doxygen/html/html/functions_o.html +24 -15
  187. package/SVF-doxygen/html/html/functions_p.html +18 -18
  188. package/SVF-doxygen/html/html/functions_r.html +5 -5
  189. package/SVF-doxygen/html/html/functions_s.html +24 -16
  190. package/SVF-doxygen/html/html/functions_t.html +5 -7
  191. package/SVF-doxygen/html/html/functions_type_d.html +4 -2
  192. package/SVF-doxygen/html/html/functions_type_p.html +1 -1
  193. package/SVF-doxygen/html/html/functions_type_s.html +7 -1
  194. package/SVF-doxygen/html/html/functions_type_v.html +3 -0
  195. package/SVF-doxygen/html/html/functions_v.html +7 -1
  196. package/SVF-doxygen/html/html/functions_vars_a.html +6 -0
  197. package/SVF-doxygen/html/html/functions_vars_c.html +1 -1
  198. package/SVF-doxygen/html/html/functions_vars_d.html +4 -2
  199. package/SVF-doxygen/html/html/functions_vars_e.html +1 -1
  200. package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
  201. package/SVF-doxygen/html/html/functions_vars_k.html +1 -0
  202. package/SVF-doxygen/html/html/functions_vars_n.html +1 -1
  203. package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
  204. package/SVF-doxygen/html/html/functions_vars_s.html +2 -2
  205. package/SVF-doxygen/html/html/functions_vars_t.html +1 -1
  206. package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
  207. package/SVF-doxygen/html/html/functions_w.html +6 -10
  208. package/SVF-doxygen/html/html/globals.html +1 -2
  209. package/SVF-doxygen/html/html/globals_a.html +1 -6
  210. package/SVF-doxygen/html/html/globals_c.html +129 -126
  211. package/SVF-doxygen/html/html/globals_defs_j.html +6 -0
  212. package/SVF-doxygen/html/html/globals_e.html +7 -8
  213. package/SVF-doxygen/html/html/globals_f.html +6 -12
  214. package/SVF-doxygen/html/html/globals_func.html +0 -6
  215. package/SVF-doxygen/html/html/globals_func_f.html +0 -8
  216. package/SVF-doxygen/html/html/globals_g.html +4 -2
  217. package/SVF-doxygen/html/html/globals_j.html +6 -0
  218. package/SVF-doxygen/html/html/globals_l.html +3 -0
  219. package/SVF-doxygen/html/html/globals_s.html +7 -9
  220. package/SVF-doxygen/html/html/globals_v.html +3 -0
  221. package/SVF-doxygen/html/html/globals_vars.html +17 -13
  222. package/SVF-doxygen/html/html/hierarchy.html +449 -444
  223. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  224. package/SVF-doxygen/html/html/namespaceSVF.html +8 -4
  225. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +2 -2
  226. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +8 -8
  227. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  228. package/SVF-doxygen/html/html/search/all_0.js +1 -1
  229. package/SVF-doxygen/html/html/search/all_1.js +5 -4
  230. package/SVF-doxygen/html/html/search/all_10.js +12 -12
  231. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  232. package/SVF-doxygen/html/html/search/all_13.js +22 -17
  233. package/SVF-doxygen/html/html/search/all_14.js +5 -5
  234. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  235. package/SVF-doxygen/html/html/search/all_16.js +2 -0
  236. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  237. package/SVF-doxygen/html/html/search/all_1b.js +1 -0
  238. package/SVF-doxygen/html/html/search/all_2.js +2 -2
  239. package/SVF-doxygen/html/html/search/all_3.js +7 -6
  240. package/SVF-doxygen/html/html/search/all_4.js +5 -5
  241. package/SVF-doxygen/html/html/search/all_5.js +7 -5
  242. package/SVF-doxygen/html/html/search/all_6.js +4 -4
  243. package/SVF-doxygen/html/html/search/all_7.js +11 -9
  244. package/SVF-doxygen/html/html/search/all_9.js +8 -5
  245. package/SVF-doxygen/html/html/search/all_a.js +2 -0
  246. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  247. package/SVF-doxygen/html/html/search/all_c.js +1 -2
  248. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  249. package/SVF-doxygen/html/html/search/all_e.js +4 -4
  250. package/SVF-doxygen/html/html/search/all_f.js +9 -6
  251. package/SVF-doxygen/html/html/search/classes_0.js +1 -0
  252. package/SVF-doxygen/html/html/search/classes_2.js +1 -0
  253. package/SVF-doxygen/html/html/search/classes_f.js +3 -0
  254. package/SVF-doxygen/html/html/search/defines_8.js +2 -0
  255. package/SVF-doxygen/html/html/search/files_2.js +1 -1
  256. package/SVF-doxygen/html/html/search/functions_0.js +1 -3
  257. package/SVF-doxygen/html/html/search/functions_1.js +2 -2
  258. package/SVF-doxygen/html/html/search/functions_11.js +4 -2
  259. package/SVF-doxygen/html/html/search/functions_17.js +1 -0
  260. package/SVF-doxygen/html/html/search/functions_2.js +3 -2
  261. package/SVF-doxygen/html/html/search/functions_3.js +1 -1
  262. package/SVF-doxygen/html/html/search/functions_4.js +5 -3
  263. package/SVF-doxygen/html/html/search/functions_5.js +1 -3
  264. package/SVF-doxygen/html/html/search/functions_6.js +9 -8
  265. package/SVF-doxygen/html/html/search/functions_8.js +4 -1
  266. package/SVF-doxygen/html/html/search/functions_b.js +0 -1
  267. package/SVF-doxygen/html/html/search/functions_e.js +8 -5
  268. package/SVF-doxygen/html/html/search/functions_f.js +4 -4
  269. package/SVF-doxygen/html/html/search/typedefs_11.js +3 -1
  270. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
  271. package/SVF-doxygen/html/html/search/typedefs_3.js +2 -2
  272. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
  273. package/SVF-doxygen/html/html/search/variables_0.js +1 -1
  274. package/SVF-doxygen/html/html/search/variables_1.js +3 -2
  275. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  276. package/SVF-doxygen/html/html/search/variables_13.js +2 -2
  277. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  278. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  279. package/SVF-doxygen/html/html/search/variables_16.js +2 -0
  280. package/SVF-doxygen/html/html/search/variables_3.js +2 -2
  281. package/SVF-doxygen/html/html/search/variables_4.js +2 -2
  282. package/SVF-doxygen/html/html/search/variables_5.js +2 -2
  283. package/SVF-doxygen/html/html/search/variables_6.js +3 -3
  284. package/SVF-doxygen/html/html/search/variables_7.js +2 -1
  285. package/SVF-doxygen/html/html/search/variables_b.js +1 -1
  286. package/SVF-doxygen/html/html/search/variables_c.js +1 -0
  287. package/SVF-doxygen/html/html/search/variables_e.js +3 -3
  288. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol-members.html +98 -0
  289. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +652 -0
  290. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1SymbolVectorHash-members.html +81 -0
  291. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1SymbolVectorHash.html +124 -0
  292. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +22 -15
  293. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +4 -2
  294. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +4 -2
  295. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.html +1 -1
  296. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.html +2 -2
  297. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.html +1 -1
  298. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  299. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  300. package/include/CFL/CFGNormalizer.h +14 -9
  301. package/include/CFL/CFLAlias.h +1 -40
  302. package/include/CFL/CFLGrammar.h +246 -31
  303. package/include/CFL/CFLGrammar.txt +13 -15
  304. package/include/CFL/CFLGraphBuilder.h +27 -29
  305. package/include/CFL/GrammarBuilder.h +34 -14
  306. package/include/Graphs/CFLGraph.h +12 -0
  307. package/include/Graphs/ConsGEdge.h +1 -0
  308. package/include/SVF-FE/CallGraphBuilder.h +2 -2
  309. package/include/Util/ExtAPI.h +59 -42
  310. package/lib/CFL/CFGNormalizer.cpp +138 -86
  311. package/lib/CFL/CFLAlias.cpp +73 -0
  312. package/lib/CFL/CFLGrammar.cpp +115 -16
  313. package/lib/CFL/CFLGraphBuilder.cpp +64 -1
  314. package/lib/CFL/GrammarBuilder.cpp +42 -60
  315. package/lib/Graphs/CFLGraph.cpp +41 -1
  316. package/lib/MemoryModel/LocationSet.cpp +1 -1
  317. package/lib/SVF-FE/SVFIRBuilder.cpp +2 -2
  318. package/lib/SVF-FE/SymbolTableBuilder.cpp +4 -0
  319. package/lib/Util/ExtAPI.cpp +34 -2
  320. package/lib/Util/ExtAPI.json +3268 -2585
  321. package/package.json +1 -1
  322. package/include/CFL/CFLGrammarDev.txt +0 -16
@@ -66,14 +66,14 @@ $(function() {
66
66
  <div class="title">ConsG.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="ConsG_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">//===- ConsG.cpp -- Constraint graph representation-----------------------------//</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-2017&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;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ConstraintGraph.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 14, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">ConstraintNode::SCCEdgeFlag</a> <a class="code" href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">ConstraintNode::sccEdgeFlag</a> = <a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">ConstraintNode::Direct</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">ConstraintGraph::buildCG</a>()</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// initialize nodes</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = pag-&gt;begin(), eit = pag-&gt;end(); it!=eit; ++it)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; addConstraintNode(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(it-&gt;first), it-&gt;first);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// initialize edges</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; addrs = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* edge = SVFUtil::cast&lt;AddrStmt&gt;(*iter);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; addAddrCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; copys = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* edge = SVFUtil::cast&lt;CopyStmt&gt;(*iter);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; phis = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3cd98eeb47c8475e7ee64480dcdee9">SVFStmt::Phi</a>);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; phis.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* edge = SVFUtil::cast&lt;PhiStmt&gt;(*iter);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> opVar : edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a0441f2646fed28830439c41a0704ed4b">getOpndVars</a>())</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; addCopyCGEdge(opVar-&gt;getId(),edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a71a530eb9fa9f7e273e471b4a75a039e">getResID</a>());</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; selects = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad9397ec243a61992dc2b5681bea587fa">SVFStmt::Select</a>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = selects.begin(), eiter =</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; selects.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SelectStmt.html">SelectStmt</a>* edge = SVFUtil::cast&lt;SelectStmt&gt;(*iter);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> opVar : edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a0441f2646fed28830439c41a0704ed4b">getOpndVars</a>())</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; addCopyCGEdge(opVar-&gt;getId(),edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a71a530eb9fa9f7e273e471b4a75a039e">getResID</a>());</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; calls = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; calls.end(); iter != eiter; ++iter)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* edge = SVFUtil::cast&lt;CallPE&gt;(*iter);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; rets = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; rets.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* edge = SVFUtil::cast&lt;RetPE&gt;(*iter);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</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;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdfks = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; tdfks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* edge = SVFUtil::cast&lt;TDForkPE&gt;(*iter);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</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;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdjns = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; tdjns.end(); iter != eiter; ++iter)</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="keyword">const</span> <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* edge = SVFUtil::cast&lt;TDJoinPE&gt;(*iter);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; ngeps = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a20d960c19118d1ed319e0dbea94405e8">SVFStmt::Gep</a>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; ngeps.end(); iter != eiter; ++iter)</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="classSVF_1_1GepStmt.html">GepStmt</a>* edge = SVFUtil::cast&lt;GepStmt&gt;(*iter);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; addVariantGepCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; addNormalGepCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#abec33091e0dac0cdd5b95b6d7b0db3d8">getLocationSet</a>());</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; loads = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* edge = SVFUtil::cast&lt;LoadStmt&gt;(*iter);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; addLoadCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; stores = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* edge = SVFUtil::cast&lt;StoreStmt&gt;(*iter);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; addStoreCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</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;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44"> 150</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">ConstraintGraph::destroy</a>()</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;{</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrCGEdge.html#a131779667553499b85423e1932664252"> 157</a></span>&#160;<a class="code" href="classSVF_1_1AddrCGEdge.html#a9c8da69a469e51d83c5009ba2685bcf6">AddrCGEdge::AddrCGEdge</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* s, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* d, <a class="code" href="namespaceSVF.html#ae71551d6a1fc300e0403297aa25ddf94">EdgeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; : <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>(s,d,<a class="code" href="CFLGrammar_8txt.html#a2ffa1ee00ec8ef61103041d6cff4a7f9">Addr</a>,id)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// Retarget addr edges may lead s to be a dummy node</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(s-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; <span class="stringliteral">&quot;a dummy node??&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a56cfcc39637cf5208f65297a63dde266"> 169</a></span>&#160;<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a56cfcc39637cf5208f65297a63dde266">ConstraintGraph::addAddrCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>))</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AddrCGEdge.html#a9c8da69a469e51d83c5009ba2685bcf6">AddrCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">bool</span> added = AddrCGEdgeSet.insert(edge).second;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#af129941c522dbc1b0fe94f84eea0d97a">addOutgoingAddrEdge</a>(edge);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#aeff08dd512d0a97fb14069b37386e9fe">addIncomingAddrEdge</a>(edge);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758"> 186</a></span>&#160;<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">ConstraintGraph::addCopyCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;{</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a>)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; || srcNode == dstNode)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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; <a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">bool</span> added = directEdgeSet.insert(edge).second;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a2395948518a1befb7a3762bbad6adf9f">addOutgoingCopyEdge</a>(edge);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ad54cc825bb7f5642671e75b90b2633a2">addIncomingCopyEdge</a>(edge);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> edge;</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;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5aac453464955185ca0d47e91db9df7b"> 207</a></span>&#160;<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a5aac453464955185ca0d47e91db9df7b">ConstraintGraph::addNormalGepCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a>))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>(srcNode, dstNode,ls, edgeIndex++);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordtype">bool</span> added = directEdgeSet.insert(edge).second;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#abc56843c51c00a9018473f415f73e9f6">addOutgoingGepEdge</a>(edge);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#aaf0b98573a980aea1151a837580a40a5">addIncomingGepEdge</a>(edge);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f"> 225</a></span>&#160;<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f">ConstraintGraph::addVariantGepCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">bool</span> added = directEdgeSet.insert(edge).second;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#abc56843c51c00a9018473f415f73e9f6">addOutgoingGepEdge</a>(edge);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#aaf0b98573a980aea1151a837580a40a5">addIncomingGepEdge</a>(edge);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> edge;</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;</div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1e5a23fbd08cf4186775baffbd6a7934"> 243</a></span>&#160;<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a1e5a23fbd08cf4186775baffbd6a7934">ConstraintGraph::addLoadCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;{</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>))</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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_1LoadCGEdge.html">LoadCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">bool</span> added = LoadCGEdgeSet.insert(edge).second;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#abcab7a3b98dc0cfeecaed279ca74ea53">addOutgoingLoadEdge</a>(edge);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a9d1bb95ad5549d7e6030fe07f8e070a2">addIncomingLoadEdge</a>(edge);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a633666953f8d6675961981c4eab1adb0"> 261</a></span>&#160;<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a633666953f8d6675961981c4eab1adb0">ConstraintGraph::addStoreCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>))</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordtype">bool</span> added = StoreCGEdgeSet.insert(edge).second;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a349b8c461adfa2a0bd1376ecb81d36d5">addOutgoingStoreEdge</a>(edge);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a202193059dd3122d969561080b82c504">addIncomingStoreEdge</a>(edge);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> edge;</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;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722"> 284</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722">ConstraintGraph::reTargetDstOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newDstNode)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newDstNodeID = newDstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* load = SVFUtil::dyn_cast&lt;LoadCGEdge&gt;(edge))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; removeLoadEdge(load);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; addLoadCGEdge(srcId,newDstNodeID);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* store = SVFUtil::dyn_cast&lt;StoreCGEdge&gt;(edge))</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; removeStoreEdge(store);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; addStoreCGEdge(srcId,newDstNodeID);</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">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; removeDirectEdge(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; addCopyCGEdge(srcId,newDstNodeID);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(edge))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gep-&gt;getLocationSet();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; removeDirectEdge(gep);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; addNormalGepCGEdge(srcId,newDstNodeID,ls);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;VariantGepCGEdge&gt;(edge))</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; removeDirectEdge(gep);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; addVariantGepCGEdge(srcId,newDstNodeID);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</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; removeAddrEdge(addr);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no other edge type!!&quot;</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aaae56afed424f7cd59fddb3fcb2f7214"> 328</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aaae56afed424f7cd59fddb3fcb2f7214">ConstraintGraph::reTargetSrcOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newSrcNode)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newSrcNodeID = newSrcNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* load = SVFUtil::dyn_cast&lt;LoadCGEdge&gt;(edge))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; removeLoadEdge(load);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; addLoadCGEdge(newSrcNodeID,dstId);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* store = SVFUtil::dyn_cast&lt;StoreCGEdge&gt;(edge))</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; removeStoreEdge(store);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; addStoreCGEdge(newSrcNodeID,dstId);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; removeDirectEdge(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; addCopyCGEdge(newSrcNodeID,dstId);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(edge))</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gep-&gt;getLocationSet();</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; removeDirectEdge(gep);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; addNormalGepCGEdge(newSrcNodeID,dstId,ls);</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> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;VariantGepCGEdge&gt;(edge))</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; removeDirectEdge(gep);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; addVariantGepCGEdge(newSrcNodeID,dstId);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; removeAddrEdge(addr);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no other edge type!!&quot;</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#acc23df2db1fa7b8e0270d8a04f08f2ee"> 369</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#acc23df2db1fa7b8e0270d8a04f08f2ee">ConstraintGraph::removeAddrEdge</a>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* edge)</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; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingAddrEdge(edge);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingAddrEdge(edge);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = AddrCGEdgeSet.erase(edge);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">delete</span> edge;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa4bca2422049413439cb0c3400f2ce28"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa4bca2422049413439cb0c3400f2ce28">ConstraintGraph::removeLoadEdge</a>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* edge)</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; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingLoadEdge(edge);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingLoadEdge(edge);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = LoadCGEdgeSet.erase(edge);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">delete</span> edge;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</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="l00393"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aad3d05c949c33a587b3ac6d627f5a0a2"> 393</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aad3d05c949c33a587b3ac6d627f5a0a2">ConstraintGraph::removeStoreEdge</a>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* edge)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingStoreEdge(edge);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingStoreEdge(edge);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = StoreCGEdgeSet.erase(edge);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">delete</span> edge;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</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;</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244"> 405</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244">ConstraintGraph::removeDirectEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingDirectEdge(edge);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingDirectEdge(edge);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = directEdgeSet.erase(edge);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">delete</span> edge;</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;</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd"> 420</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd">ConstraintGraph::moveInEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep )</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; std::vector&lt;ConstraintEdge*&gt; sccEdges;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; std::vector&lt;ConstraintEdge*&gt; nonSccEdges;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); it != eit;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; ++it)</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* subInEdge = *it;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(sccRepNode(subInEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()) != rep-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>())</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; nonSccEdges.push_back(subInEdge);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; sccEdges.push_back(subInEdge);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// if this edge is outside scc, then re-target edge dst to rep</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">while</span>(!nonSccEdges.empty())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = nonSccEdges.back();</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; nonSccEdges.pop_back();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; reTargetDstOfEdge(edge,rep);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordtype">bool</span> criticalGepInsideSCC = <span class="keyword">false</span>;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// if this edge is inside scc, then remove this edge and two end nodes</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">while</span>(!sccEdges.empty())</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = sccEdges.back();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; sccEdges.pop_back();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; removeDirectEdge(edge);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepCGEdge&gt;(edge))</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">// If the GEP is critical (i.e. may have a non-zero offset),</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">// then it brings impact on field-sensitivity.</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (!isZeroOffsettedGepCGEdge(edge))</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; criticalGepInsideSCC = <span class="keyword">true</span>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; removeDirectEdge(edge);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadCGEdge&gt;(edge) || SVFUtil::isa&lt;StoreCGEdge&gt;(edge))</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; reTargetDstOfEdge(edge,rep);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; removeAddrEdge(addr);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no such edge&quot;</span>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> criticalGepInsideSCC;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;}</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59"> 478</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59">ConstraintGraph::moveOutEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep )</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; std::vector&lt;ConstraintEdge*&gt; sccEdges;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; std::vector&lt;ConstraintEdge*&gt; nonSccEdges;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; ++it)</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* subOutEdge = *it;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span>(sccRepNode(subOutEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()) != rep-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>())</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; nonSccEdges.push_back(subOutEdge);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; sccEdges.push_back(subOutEdge);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// if this edge is outside scc, then re-target edge src to rep</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">while</span>(!nonSccEdges.empty())</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = nonSccEdges.back();</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; nonSccEdges.pop_back();</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; reTargetSrcOfEdge(edge,rep);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordtype">bool</span> criticalGepInsideSCC = <span class="keyword">false</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// if this edge is inside scc, then remove this edge and two end nodes</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">while</span>(!sccEdges.empty())</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = sccEdges.back();</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; sccEdges.pop_back();</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; removeDirectEdge(edge);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// If the GEP is critical (i.e. may have a non-zero offset),</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// then it brings impact on field-sensitivity.</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (!isZeroOffsettedGepCGEdge(edge))</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; criticalGepInsideSCC = <span class="keyword">true</span>;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; removeDirectEdge(edge);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadCGEdge&gt;(edge) || SVFUtil::isa&lt;StoreCGEdge&gt;(edge))</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; reTargetSrcOfEdge(edge,rep);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; removeAddrEdge(addr);</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">else</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no such edge&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">return</span> criticalGepInsideSCC;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;}</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462"> 537</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462">ConstraintGraph::dump</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>)</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; <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>(), name, <span class="keyword">this</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;}</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce"> 545</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce">ConstraintGraph::print</a>()</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;{</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;-----------------ConstraintGraph--------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; addrs = this-&gt;getAddrCGEdges();</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = addrs.begin(),</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; eiter = addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Addr --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; directs = this-&gt;getDirectCGEdges();</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = directs.begin(),</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; eiter = directs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyCGEdge&gt;(*iter))</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Copy --&gt; &quot;</span> &lt;&lt; <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getDstID()</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* ngep = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(*iter))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; ngep-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- NormalGep (&quot;</span> &lt;&lt; ngep-&gt;getConstantFieldIdx()</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) --&gt; &quot;</span> &lt;&lt; ngep-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* vgep = SVFUtil::dyn_cast&lt;VariantGepCGEdge&gt;(*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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; vgep-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- VarintGep --&gt; &quot;</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; &lt;&lt; vgep-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;wrong constraint edge kind!&quot;</span>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; loads = this-&gt;getLoadCGEdges();</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = loads.begin(),</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; eiter = loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Load --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; stores = this-&gt;getStoreCGEdges();</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = stores.begin(),</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; eiter = stores.end(); iter != eiter; ++iter)</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Store --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; &lt;&lt; <span class="stringliteral">&quot;--------------------------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;}</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c"> 605</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c">ConstraintGraph::view</a>()</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; llvm::ViewGraph(<span class="keyword">this</span>, <span class="stringliteral">&quot;Constraint Graph&quot;</span>);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;}</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;{</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html"> 616</a></span>&#160;<span class="keyword">struct </span>DOTGraphTraits&lt;<a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*&gt; : <span class="keyword">public</span> DOTGraphTraits&lt;SVFIR*&gt;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;{</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ac3889bd563cdc21a55df0524df2ae4da"> 619</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ac3889bd563cdc21a55df0524df2ae4da">NodeType</a>;</div><div class="line"><a name="l00620"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a007736227bec42182208176006b7d83d"> 620</a></span>&#160; <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a007736227bec42182208176006b7d83d">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; DOTGraphTraits&lt;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*&gt;(isSimple)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a9ed4562e3c1223c20e76e1372ba8b30d"> 626</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a9ed4562e3c1223c20e76e1372ba8b30d">getGraphName</a>(<a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*)</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ConstraintG&quot;</span>;</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="l00631"></a><span class="lineno"> 631</span>&#160;<span class="preprocessor">#if LLVM_VERSION_MAJOR &gt;= 12</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> isNodeHidden(NodeType *<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a> *)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a2a467ab9b0a9ef28f88099f8ed58bba6"> 635</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a2a467ab9b0a9ef28f88099f8ed58bba6">isNodeHidden</a>(NodeType *n)</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;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#adec2012e10130f664fe0ea3acf39f78b">Options::ShowHiddenNode</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> (n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().empty() &amp;&amp; n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().empty());</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;</div><div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#aa72b3ad953c6ea3309c83735512ff408"> 644</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#aa72b3ad953c6ea3309c83735512ff408">getNodeLabel</a>(NodeType *n, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</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; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordtype">bool</span> briefDisplay = <a class="code" href="classSVF_1_1Options.html#a82370c2b8c9cd62b5767ceeaeeaa7177">Options::BriefConsCGDotGraph</a>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordtype">bool</span> nameDisplay = <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">if</span> (briefDisplay)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (nameDisplay)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// print the whole value</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; }</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a0ce25ef874ffaa798ae7ad498274b2f7"> 677</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a0ce25ef874ffaa798ae7ad498274b2f7">getNodeAttributes</a>(NodeType *n, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepValVar&gt;(node))</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=hexagon&quot;</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyValVar&gt;(node))</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=diamond&quot;</span>;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=box&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ObjVar&gt;(node))</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; {</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepObjVar&gt;(node))</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=doubleoctagon&quot;</span>;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=box3d&quot;</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=tab&quot;</span>;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=component&quot;</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;RetPN&gt;(node))</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=Mrecord&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;VarArgPN&gt;(node))</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=octagon&quot;</span>;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">else</span></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"> 710</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 &amp;&amp; <span class="stringliteral">&quot;no such kind!!&quot;</span>);</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</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"> 715</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> EdgeIter&gt;</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ad7d0a5d387c31c186b8527c7c6bd9791"> 716</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ad7d0a5d387c31c186b8527c7c6bd9791">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*)</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=green&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a>)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=black&quot;</span>;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; || edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=purple&quot;</span>;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</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"> 735</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=blue&quot;</span>;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</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; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=red&quot;</span>;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 &amp;&amp; <span class="stringliteral">&quot;No such kind edge!!&quot;</span>);</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"> 745</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> EdgeIter&gt;</div><div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a76e78cd94e56ca46ac7e1db7162e594b"> 749</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a76e78cd94e56ca46ac7e1db7162e594b">getEdgeSourceLabel</a>(NodeType*, EdgeIter)</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;};</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00271">SVFStatements.h:271</a></div></div>
69
+ <a href="ConsG_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">//===- ConsG.cpp -- Constraint graph representation-----------------------------//</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-2017&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;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ConstraintGraph.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 14, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">ConstraintNode::SCCEdgeFlag</a> <a class="code" href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">ConstraintNode::sccEdgeFlag</a> = <a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">ConstraintNode::Direct</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">ConstraintGraph::buildCG</a>()</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// initialize nodes</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = pag-&gt;begin(), eit = pag-&gt;end(); it!=eit; ++it)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; addConstraintNode(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(it-&gt;first), it-&gt;first);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// initialize edges</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; addrs = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* edge = SVFUtil::cast&lt;AddrStmt&gt;(*iter);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; addAddrCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; copys = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* edge = SVFUtil::cast&lt;CopyStmt&gt;(*iter);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; phis = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3cd98eeb47c8475e7ee64480dcdee9">SVFStmt::Phi</a>);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; phis.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* edge = SVFUtil::cast&lt;PhiStmt&gt;(*iter);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> opVar : edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a0441f2646fed28830439c41a0704ed4b">getOpndVars</a>())</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; addCopyCGEdge(opVar-&gt;getId(),edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a71a530eb9fa9f7e273e471b4a75a039e">getResID</a>());</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; selects = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad9397ec243a61992dc2b5681bea587fa">SVFStmt::Select</a>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = selects.begin(), eiter =</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; selects.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SelectStmt.html">SelectStmt</a>* edge = SVFUtil::cast&lt;SelectStmt&gt;(*iter);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> opVar : edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a0441f2646fed28830439c41a0704ed4b">getOpndVars</a>())</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; addCopyCGEdge(opVar-&gt;getId(),edge-&gt;<a class="code" href="classSVF_1_1MultiOpndStmt.html#a71a530eb9fa9f7e273e471b4a75a039e">getResID</a>());</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; calls = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; calls.end(); iter != eiter; ++iter)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* edge = SVFUtil::cast&lt;CallPE&gt;(*iter);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; rets = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; rets.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* edge = SVFUtil::cast&lt;RetPE&gt;(*iter);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</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;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdfks = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; tdfks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* edge = SVFUtil::cast&lt;TDForkPE&gt;(*iter);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</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;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdjns = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; tdjns.end(); iter != eiter; ++iter)</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="keyword">const</span> <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* edge = SVFUtil::cast&lt;TDJoinPE&gt;(*iter);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; addCopyCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; ngeps = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a20d960c19118d1ed319e0dbea94405e8">SVFStmt::Gep</a>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; ngeps.end(); iter != eiter; ++iter)</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="classSVF_1_1GepStmt.html">GepStmt</a>* edge = SVFUtil::cast&lt;GepStmt&gt;(*iter);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span>(edge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; addVariantGepCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; addNormalGepCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#abec33091e0dac0cdd5b95b6d7b0db3d8">getLocationSet</a>());</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; loads = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* edge = SVFUtil::cast&lt;LoadStmt&gt;(*iter);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; addLoadCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; stores = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* edge = SVFUtil::cast&lt;StoreStmt&gt;(*iter);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; addStoreCGEdge(edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>(),edge-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>());</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</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;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44"> 150</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">ConstraintGraph::destroy</a>()</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;{</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrCGEdge.html#a131779667553499b85423e1932664252"> 157</a></span>&#160;<a class="code" href="classSVF_1_1AddrCGEdge.html#a9c8da69a469e51d83c5009ba2685bcf6">AddrCGEdge::AddrCGEdge</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* s, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* d, <a class="code" href="namespaceSVF.html#ae71551d6a1fc300e0403297aa25ddf94">EdgeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; : <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>(s,d,<a class="code" href="CFLGrammar_8txt.html#a017fa6c558fa1eff0a13180c8340aba8">Addr</a>,id)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// Retarget addr edges may lead s to be a dummy node</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(s-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; <span class="stringliteral">&quot;a dummy node??&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a56cfcc39637cf5208f65297a63dde266"> 169</a></span>&#160;<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a56cfcc39637cf5208f65297a63dde266">ConstraintGraph::addAddrCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>))</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AddrCGEdge.html#a9c8da69a469e51d83c5009ba2685bcf6">AddrCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">bool</span> added = AddrCGEdgeSet.insert(edge).second;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#af129941c522dbc1b0fe94f84eea0d97a">addOutgoingAddrEdge</a>(edge);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#aeff08dd512d0a97fb14069b37386e9fe">addIncomingAddrEdge</a>(edge);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758"> 186</a></span>&#160;<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">ConstraintGraph::addCopyCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;{</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a>)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; || srcNode == dstNode)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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; <a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">bool</span> added = directEdgeSet.insert(edge).second;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a2395948518a1befb7a3762bbad6adf9f">addOutgoingCopyEdge</a>(edge);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ad54cc825bb7f5642671e75b90b2633a2">addIncomingCopyEdge</a>(edge);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> edge;</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;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5aac453464955185ca0d47e91db9df7b"> 207</a></span>&#160;<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a5aac453464955185ca0d47e91db9df7b">ConstraintGraph::addNormalGepCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a>))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>(srcNode, dstNode,ls, edgeIndex++);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordtype">bool</span> added = directEdgeSet.insert(edge).second;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#abc56843c51c00a9018473f415f73e9f6">addOutgoingGepEdge</a>(edge);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#aaf0b98573a980aea1151a837580a40a5">addIncomingGepEdge</a>(edge);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f"> 225</a></span>&#160;<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f">ConstraintGraph::addVariantGepCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">bool</span> added = directEdgeSet.insert(edge).second;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#abc56843c51c00a9018473f415f73e9f6">addOutgoingGepEdge</a>(edge);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#aaf0b98573a980aea1151a837580a40a5">addIncomingGepEdge</a>(edge);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> edge;</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;</div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1e5a23fbd08cf4186775baffbd6a7934"> 243</a></span>&#160;<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a1e5a23fbd08cf4186775baffbd6a7934">ConstraintGraph::addLoadCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;{</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>))</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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_1LoadCGEdge.html">LoadCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">bool</span> added = LoadCGEdgeSet.insert(edge).second;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#abcab7a3b98dc0cfeecaed279ca74ea53">addOutgoingLoadEdge</a>(edge);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a9d1bb95ad5549d7e6030fe07f8e070a2">addIncomingLoadEdge</a>(edge);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a633666953f8d6675961981c4eab1adb0"> 261</a></span>&#160;<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a633666953f8d6675961981c4eab1adb0">ConstraintGraph::addStoreCGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#a0e8736f88ee75da025d874f92328ca71">src</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">dst</a>)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* srcNode = getConstraintNode(src);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dstNode = getConstraintNode(dst);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a>(srcNode,dstNode,<a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>))</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* edge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>(srcNode, dstNode, edgeIndex++);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordtype">bool</span> added = StoreCGEdgeSet.insert(edge).second;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added &amp;&amp; <span class="stringliteral">&quot;not added??&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; srcNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a349b8c461adfa2a0bd1376ecb81d36d5">addOutgoingStoreEdge</a>(edge);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; dstNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a202193059dd3122d969561080b82c504">addIncomingStoreEdge</a>(edge);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> edge;</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;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722"> 284</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722">ConstraintGraph::reTargetDstOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newDstNode)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newDstNodeID = newDstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* load = SVFUtil::dyn_cast&lt;LoadCGEdge&gt;(edge))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; removeLoadEdge(load);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; addLoadCGEdge(srcId,newDstNodeID);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* store = SVFUtil::dyn_cast&lt;StoreCGEdge&gt;(edge))</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; removeStoreEdge(store);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; addStoreCGEdge(srcId,newDstNodeID);</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">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; removeDirectEdge(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; addCopyCGEdge(srcId,newDstNodeID);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(edge))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gep-&gt;getLocationSet();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; removeDirectEdge(gep);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; addNormalGepCGEdge(srcId,newDstNodeID,ls);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;VariantGepCGEdge&gt;(edge))</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; removeDirectEdge(gep);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; addVariantGepCGEdge(srcId,newDstNodeID);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</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; removeAddrEdge(addr);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no other edge type!!&quot;</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aaae56afed424f7cd59fddb3fcb2f7214"> 328</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aaae56afed424f7cd59fddb3fcb2f7214">ConstraintGraph::reTargetSrcOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newSrcNode)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newSrcNodeID = newSrcNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* load = SVFUtil::dyn_cast&lt;LoadCGEdge&gt;(edge))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; removeLoadEdge(load);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; addLoadCGEdge(newSrcNodeID,dstId);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* store = SVFUtil::dyn_cast&lt;StoreCGEdge&gt;(edge))</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; removeStoreEdge(store);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; addStoreCGEdge(newSrcNodeID,dstId);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; removeDirectEdge(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; addCopyCGEdge(newSrcNodeID,dstId);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(edge))</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gep-&gt;getLocationSet();</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; removeDirectEdge(gep);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; addNormalGepCGEdge(newSrcNodeID,dstId,ls);</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> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* gep = SVFUtil::dyn_cast&lt;VariantGepCGEdge&gt;(edge))</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; removeDirectEdge(gep);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; addVariantGepCGEdge(newSrcNodeID,dstId);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; removeAddrEdge(addr);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no other edge type!!&quot;</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#acc23df2db1fa7b8e0270d8a04f08f2ee"> 369</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#acc23df2db1fa7b8e0270d8a04f08f2ee">ConstraintGraph::removeAddrEdge</a>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* edge)</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; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingAddrEdge(edge);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingAddrEdge(edge);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = AddrCGEdgeSet.erase(edge);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">delete</span> edge;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa4bca2422049413439cb0c3400f2ce28"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa4bca2422049413439cb0c3400f2ce28">ConstraintGraph::removeLoadEdge</a>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* edge)</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; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingLoadEdge(edge);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingLoadEdge(edge);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = LoadCGEdgeSet.erase(edge);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">delete</span> edge;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</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="l00393"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aad3d05c949c33a587b3ac6d627f5a0a2"> 393</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aad3d05c949c33a587b3ac6d627f5a0a2">ConstraintGraph::removeStoreEdge</a>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* edge)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingStoreEdge(edge);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingStoreEdge(edge);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = StoreCGEdgeSet.erase(edge);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">delete</span> edge;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</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;</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244"> 405</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244">ConstraintGraph::removeDirectEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>())-&gt;removeOutgoingDirectEdge(edge);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; getConstraintNode(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>())-&gt;removeIncomingDirectEdge(edge);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = directEdgeSet.erase(edge);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(num &amp;&amp; <span class="stringliteral">&quot;edge not in the set, can not remove!!!&quot;</span>);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">delete</span> edge;</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;</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd"> 420</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd">ConstraintGraph::moveInEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep )</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; std::vector&lt;ConstraintEdge*&gt; sccEdges;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; std::vector&lt;ConstraintEdge*&gt; nonSccEdges;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); it != eit;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; ++it)</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* subInEdge = *it;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(sccRepNode(subInEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()) != rep-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>())</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; nonSccEdges.push_back(subInEdge);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; sccEdges.push_back(subInEdge);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// if this edge is outside scc, then re-target edge dst to rep</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">while</span>(!nonSccEdges.empty())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = nonSccEdges.back();</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; nonSccEdges.pop_back();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; reTargetDstOfEdge(edge,rep);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordtype">bool</span> criticalGepInsideSCC = <span class="keyword">false</span>;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// if this edge is inside scc, then remove this edge and two end nodes</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">while</span>(!sccEdges.empty())</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = sccEdges.back();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; sccEdges.pop_back();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; removeDirectEdge(edge);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepCGEdge&gt;(edge))</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">// If the GEP is critical (i.e. may have a non-zero offset),</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">// then it brings impact on field-sensitivity.</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (!isZeroOffsettedGepCGEdge(edge))</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; criticalGepInsideSCC = <span class="keyword">true</span>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; removeDirectEdge(edge);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadCGEdge&gt;(edge) || SVFUtil::isa&lt;StoreCGEdge&gt;(edge))</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; reTargetDstOfEdge(edge,rep);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; removeAddrEdge(addr);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no such edge&quot;</span>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> criticalGepInsideSCC;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;}</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59"> 478</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59">ConstraintGraph::moveOutEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep )</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; std::vector&lt;ConstraintEdge*&gt; sccEdges;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; std::vector&lt;ConstraintEdge*&gt; nonSccEdges;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; ++it)</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* subOutEdge = *it;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span>(sccRepNode(subOutEdge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()) != rep-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>())</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; nonSccEdges.push_back(subOutEdge);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; sccEdges.push_back(subOutEdge);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// if this edge is outside scc, then re-target edge src to rep</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">while</span>(!nonSccEdges.empty())</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; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = nonSccEdges.back();</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; nonSccEdges.pop_back();</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; reTargetSrcOfEdge(edge,rep);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordtype">bool</span> criticalGepInsideSCC = <span class="keyword">false</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// if this edge is inside scc, then remove this edge and two end nodes</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">while</span>(!sccEdges.empty())</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = sccEdges.back();</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; sccEdges.pop_back();</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;CopyCGEdge&gt;(edge))</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; removeDirectEdge(edge);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// If the GEP is critical (i.e. may have a non-zero offset),</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// then it brings impact on field-sensitivity.</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (!isZeroOffsettedGepCGEdge(edge))</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; criticalGepInsideSCC = <span class="keyword">true</span>;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; removeDirectEdge(edge);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadCGEdge&gt;(edge) || SVFUtil::isa&lt;StoreCGEdge&gt;(edge))</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; reTargetSrcOfEdge(edge,rep);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr = SVFUtil::dyn_cast&lt;AddrCGEdge&gt;(edge))</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; removeAddrEdge(addr);</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">else</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no such edge&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">return</span> criticalGepInsideSCC;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;}</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462"> 537</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462">ConstraintGraph::dump</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>)</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; <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>(), name, <span class="keyword">this</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;}</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce"> 545</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce">ConstraintGraph::print</a>()</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;{</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;-----------------ConstraintGraph--------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; addrs = this-&gt;getAddrCGEdges();</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = addrs.begin(),</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; eiter = addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Addr --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; directs = this-&gt;getDirectCGEdges();</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = directs.begin(),</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; eiter = directs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyCGEdge&gt;(*iter))</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Copy --&gt; &quot;</span> &lt;&lt; <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>-&gt;getDstID()</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* ngep = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(*iter))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; ngep-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- NormalGep (&quot;</span> &lt;&lt; ngep-&gt;getConstantFieldIdx()</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) --&gt; &quot;</span> &lt;&lt; ngep-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* vgep = SVFUtil::dyn_cast&lt;VariantGepCGEdge&gt;(*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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; vgep-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- VarintGep --&gt; &quot;</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; &lt;&lt; vgep-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;wrong constraint edge kind!&quot;</span>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; loads = this-&gt;getLoadCGEdges();</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = loads.begin(),</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; eiter = loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Load --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>&amp; stores = this-&gt;getStoreCGEdges();</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator iter = stores.begin(),</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; eiter = stores.end(); iter != eiter; ++iter)</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Store --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; &lt;&lt; <span class="stringliteral">&quot;--------------------------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;}</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c"> 605</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c">ConstraintGraph::view</a>()</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; llvm::ViewGraph(<span class="keyword">this</span>, <span class="stringliteral">&quot;Constraint Graph&quot;</span>);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;}</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;{</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html"> 616</a></span>&#160;<span class="keyword">struct </span>DOTGraphTraits&lt;<a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*&gt; : <span class="keyword">public</span> DOTGraphTraits&lt;SVFIR*&gt;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;{</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ac3889bd563cdc21a55df0524df2ae4da"> 619</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ac3889bd563cdc21a55df0524df2ae4da">NodeType</a>;</div><div class="line"><a name="l00620"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a007736227bec42182208176006b7d83d"> 620</a></span>&#160; <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a007736227bec42182208176006b7d83d">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; DOTGraphTraits&lt;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*&gt;(isSimple)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a9ed4562e3c1223c20e76e1372ba8b30d"> 626</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a9ed4562e3c1223c20e76e1372ba8b30d">getGraphName</a>(<a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*)</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ConstraintG&quot;</span>;</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="l00631"></a><span class="lineno"> 631</span>&#160;<span class="preprocessor">#if LLVM_VERSION_MAJOR &gt;= 12</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> isNodeHidden(NodeType *<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a> *)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a2a467ab9b0a9ef28f88099f8ed58bba6"> 635</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a2a467ab9b0a9ef28f88099f8ed58bba6">isNodeHidden</a>(NodeType *n)</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;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#adec2012e10130f664fe0ea3acf39f78b">Options::ShowHiddenNode</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> (n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().empty() &amp;&amp; n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().empty());</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;</div><div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#aa72b3ad953c6ea3309c83735512ff408"> 644</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#aa72b3ad953c6ea3309c83735512ff408">getNodeLabel</a>(NodeType *n, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</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; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordtype">bool</span> briefDisplay = <a class="code" href="classSVF_1_1Options.html#a82370c2b8c9cd62b5767ceeaeeaa7177">Options::BriefConsCGDotGraph</a>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordtype">bool</span> nameDisplay = <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">if</span> (briefDisplay)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (nameDisplay)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// print the whole value</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>());</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; }</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a0ce25ef874ffaa798ae7ad498274b2f7"> 677</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a0ce25ef874ffaa798ae7ad498274b2f7">getNodeAttributes</a>(NodeType *n, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepValVar&gt;(node))</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=hexagon&quot;</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyValVar&gt;(node))</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=diamond&quot;</span>;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=box&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ObjVar&gt;(node))</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; {</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepObjVar&gt;(node))</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=doubleoctagon&quot;</span>;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=box3d&quot;</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=tab&quot;</span>;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=component&quot;</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;RetPN&gt;(node))</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=Mrecord&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;VarArgPN&gt;(node))</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=octagon&quot;</span>;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">else</span></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"> 710</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 &amp;&amp; <span class="stringliteral">&quot;no such kind!!&quot;</span>);</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</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"> 715</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> EdgeIter&gt;</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ad7d0a5d387c31c186b8527c7c6bd9791"> 716</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#ad7d0a5d387c31c186b8527c7c6bd9791">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>*)</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=green&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a>)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=black&quot;</span>;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; || edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=purple&quot;</span>;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</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"> 735</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=blue&quot;</span>;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</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; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=red&quot;</span>;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 &amp;&amp; <span class="stringliteral">&quot;No such kind edge!!&quot;</span>);</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"> 745</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> EdgeIter&gt;</div><div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a76e78cd94e56ca46ac7e1db7162e594b"> 749</a></span>&#160; <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a76e78cd94e56ca46ac7e1db7162e594b">getEdgeSourceLabel</a>(NodeType*, EdgeIter)</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;};</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00271">SVFStatements.h:271</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1GenericEdge_html_abe8525c542def8162b094c169a01993b"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">SVF::GenericEdge::getEdgeKind</a></div><div class="ttdeci">GEdgeKind getEdgeKind() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00081">GenericGraph.h:81</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a27d8078577d479c84f2a87b44f015d1c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c">SVF::ConstraintGraph::view</a></div><div class="ttdeci">void view()</div><div class="ttdoc">View graph from the debugger. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00605">ConsG.cpp:605</a></div></div>
72
72
  <div class="ttc" id="CHG_8cpp_html_a4c6cbac96543cd55e4df050a33512ac5"><div class="ttname"><a href="CHG_8cpp.html#a4c6cbac96543cd55e4df050a33512ac5">hasEdge</a></div><div class="ttdeci">static bool hasEdge(const CHNode *src, const CHNode *dst, CHEdge::CHEDGETYPE et)</div><div class="ttdef"><b>Definition:</b> <a href="CHG_8cpp_source.html#l00038">CHG.cpp:38</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00540">SVFStatements.h:540</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1MultiOpndStmt_html_a0441f2646fed28830439c41a0704ed4b"><div class="ttname"><a href="classSVF_1_1MultiOpndStmt.html#a0441f2646fed28830439c41a0704ed4b">SVF::MultiOpndStmt::getOpndVars</a></div><div class="ttdeci">const OPVars &amp; getOpndVars() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00657">SVFStatements.h:657</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVF::SVFStmt::Call</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
76
- <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00107">CFLGraph.h:107</a></div></div>
76
+ <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00119">CFLGraph.h:119</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1ConstraintEdge_html_a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">SVF::ConstraintEdge::VariantGep</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00056">ConsGEdge.h:56</a></div></div>
78
78
  <div class="ttc" id="ConsG_8h_html"><div class="ttname"><a href="ConsG_8h.html">ConsG.h</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1ConstraintEdge_html_a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">SVF::ConstraintEdge::Load</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00056">ConsGEdge.h:56</a></div></div>
@@ -110,7 +110,7 @@ $(function() {
110
110
  <div class="ttc" id="classSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00106">SVFIR.h:106</a></div></div>
111
111
  <div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4_html_a9ed4562e3c1223c20e76e1372ba8b30d"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a9ed4562e3c1223c20e76e1372ba8b30d">llvm::DOTGraphTraits&lt; ConstraintGraph * &gt;::getGraphName</a></div><div class="ttdeci">static std::string getGraphName(ConstraintGraph *)</div><div class="ttdoc">Return name of the graph. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00626">ConsG.cpp:626</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">SVF::ConstraintNode::Direct</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00050">ConsGNode.h:50</a></div></div>
113
- <div class="ttc" id="classSVF_1_1VariantGepCGEdge_html"><div class="ttname"><a href="classSVF_1_1VariantGepCGEdge.html">SVF::VariantGepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00316">ConsGEdge.h:316</a></div></div>
113
+ <div class="ttc" id="classSVF_1_1VariantGepCGEdge_html"><div class="ttname"><a href="classSVF_1_1VariantGepCGEdge.html">SVF::VariantGepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00317">ConsGEdge.h:317</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00214">GenericGraph.h:214</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1LoadCGEdge_html"><div class="ttname"><a href="classSVF_1_1LoadCGEdge.html">SVF::LoadCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00191">ConsGEdge.h:191</a></div></div>
116
116
  <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#l00084">SVFBasicTypes.h:84</a></div></div>
@@ -157,7 +157,6 @@ $(function() {
157
157
  <div class="ttc" id="classSVF_1_1ConstraintEdge_html_ad155e1ed2473cc4f5f57128d282ac541"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">SVF::ConstraintEdge::ConstraintEdgeSetTy</a></div><div class="ttdeci">GenericNode&lt; ConstraintNode, ConstraintEdge &gt;::GEdgeSetTy ConstraintEdgeSetTy</div><div class="ttdoc">Constraint edge type. </div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00085">ConsGEdge.h:85</a></div></div>
158
158
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a6e59b815d784bc1a9437290ff0e1e28c"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">SVF::ConstraintNode::SCCEdgeFlag</a></div><div class="ttdeci">SCCEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00048">ConsGNode.h:48</a></div></div>
159
159
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_abc56843c51c00a9018473f415f73e9f6"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#abc56843c51c00a9018473f415f73e9f6">SVF::ConstraintNode::addOutgoingGepEdge</a></div><div class="ttdeci">void addOutgoingGepEdge(GepCGEdge *outEdge)</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00310">ConsGNode.h:310</a></div></div>
160
- <div class="ttc" id="CFLGrammar_8txt_html_a2ffa1ee00ec8ef61103041d6cff4a7f9"><div class="ttname"><a href="CFLGrammar_8txt.html#a2ffa1ee00ec8ef61103041d6cff4a7f9">Addr</a></div><div class="ttdeci">V Addrbar Addr</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00016">CFLGrammar.txt:16</a></div></div>
161
160
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
162
161
  <div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4_html_a2a467ab9b0a9ef28f88099f8ed58bba6"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html#a2a467ab9b0a9ef28f88099f8ed58bba6">llvm::DOTGraphTraits&lt; ConstraintGraph * &gt;::isNodeHidden</a></div><div class="ttdeci">static bool isNodeHidden(NodeType *n)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00635">ConsG.cpp:635</a></div></div>
163
162
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a9fc73676ea133651604e2528fe1d8244"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244">SVF::ConstraintGraph::removeDirectEdge</a></div><div class="ttdeci">void removeDirectEdge(ConstraintEdge *edge)</div><div class="ttdoc">Remove direct edge from their src and dst edge sets. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00405">ConsG.cpp:405</a></div></div>
@@ -190,6 +189,7 @@ $(function() {
190
189
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
191
190
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
192
191
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a6902cabb252b1eaadb3c8220b4581a2f"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f">SVF::ConstraintGraph::addVariantGepCGEdge</a></div><div class="ttdeci">VariantGepCGEdge * addVariantGepCGEdge(NodeID src, NodeID dst)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00225">ConsG.cpp:225</a></div></div>
192
+ <div class="ttc" id="CFLGrammar_8txt_html_a017fa6c558fa1eff0a13180c8340aba8"><div class="ttname"><a href="CFLGrammar_8txt.html#a017fa6c558fa1eff0a13180c8340aba8">Addr</a></div><div class="ttdeci">V Addrbar Addr</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00014">CFLGrammar.txt:14</a></div></div>
193
193
  <div class="ttc" id="classSVF_1_1CopyStmt_html"><div class="ttname"><a href="classSVF_1_1CopyStmt.html">SVF::CopyStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00307">SVFStatements.h:307</a></div></div>
194
194
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a0fd9fca5ed82cf83dbd825d23c63783a"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">SVF::ConstraintNode::sccEdgeFlag</a></div><div class="ttdeci">static SCCEdgeFlag sccEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00076">ConsGNode.h:76</a></div></div>
195
195
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_af9fc8308845628fe8900528573e30462"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462">SVF::ConstraintGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump graph into dot file. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00537">ConsG.cpp:537</a></div></div>