svf-tools 1.0.813 → 1.0.814

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 (268) hide show
  1. package/SVF-doxygen/html/AccessPath_8cpp_source.html +4 -4
  2. package/SVF-doxygen/html/AccessPath_8h_source.html +3 -3
  3. package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/ConsGEdge_8h_source.html +2 -2
  5. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +184 -183
  6. package/SVF-doxygen/html/ContextDDA_8h_source.html +5 -5
  7. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +191 -190
  10. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +4 -4
  11. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +695 -688
  12. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +15 -15
  13. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +3 -3
  14. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +120 -118
  15. package/SVF-doxygen/html/SVFIR_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/SVFStatements_8h_source.html +4 -4
  17. package/SVF-doxygen/html/SVFVariables_8h_source.html +2 -2
  18. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +1 -1
  19. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +11 -11
  20. package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
  21. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +176 -175
  22. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
  23. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +2 -2
  24. package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
  25. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +8 -8
  26. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +2 -2
  27. package/SVF-doxygen/html/classSVF_1_1NormalGepCGEdge.html +2 -2
  28. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +2 -2
  29. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +186 -185
  30. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +667 -660
  31. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +123 -121
  32. package/SVF-doxygen/html/functions_b.html +3 -3
  33. package/SVF-doxygen/html/functions_func_g.html +7 -5
  34. package/SVF-doxygen/html/functions_func_i.html +1 -1
  35. package/SVF-doxygen/html/functions_g.html +6 -4
  36. package/SVF-doxygen/html/functions_i.html +2 -2
  37. package/SVF-doxygen/html/functions_o.html +4 -4
  38. package/SVF-doxygen/html/functions_p.html +9 -9
  39. package/SVF-doxygen/html/functions_r.html +2 -4
  40. package/SVF-doxygen/html/functions_s.html +5 -5
  41. package/SVF-doxygen/html/functions_t.html +6 -6
  42. package/SVF-doxygen/html/functions_v.html +4 -6
  43. package/SVF-doxygen/html/functions_w.html +1 -1
  44. package/SVF-doxygen/html/search/all_10.js +324 -324
  45. package/SVF-doxygen/html/search/all_11.js +222 -222
  46. package/SVF-doxygen/html/search/all_12.js +544 -544
  47. package/SVF-doxygen/html/search/all_13.js +191 -191
  48. package/SVF-doxygen/html/search/all_14.js +67 -67
  49. package/SVF-doxygen/html/search/all_15.js +167 -167
  50. package/SVF-doxygen/html/search/all_16.js +63 -63
  51. package/SVF-doxygen/html/search/all_17.js +1 -1
  52. package/SVF-doxygen/html/search/all_18.js +1 -1
  53. package/SVF-doxygen/html/search/all_19.js +11 -11
  54. package/SVF-doxygen/html/search/all_1a.js +172 -172
  55. package/SVF-doxygen/html/search/all_2.js +1 -1
  56. package/SVF-doxygen/html/search/all_7.js +715 -714
  57. package/SVF-doxygen/html/search/all_8.js +197 -197
  58. package/SVF-doxygen/html/search/all_9.js +607 -607
  59. package/SVF-doxygen/html/search/all_a.js +46 -46
  60. package/SVF-doxygen/html/search/all_b.js +26 -26
  61. package/SVF-doxygen/html/search/all_c.js +116 -116
  62. package/SVF-doxygen/html/search/all_d.js +196 -196
  63. package/SVF-doxygen/html/search/all_e.js +207 -207
  64. package/SVF-doxygen/html/search/all_f.js +115 -115
  65. package/SVF-doxygen/html/search/classes_0.js +26 -26
  66. package/SVF-doxygen/html/search/classes_1.js +9 -9
  67. package/SVF-doxygen/html/search/classes_10.js +73 -73
  68. package/SVF-doxygen/html/search/classes_11.js +15 -15
  69. package/SVF-doxygen/html/search/classes_12.js +2 -2
  70. package/SVF-doxygen/html/search/classes_13.js +10 -10
  71. package/SVF-doxygen/html/search/classes_14.js +14 -14
  72. package/SVF-doxygen/html/search/classes_15.js +1 -1
  73. package/SVF-doxygen/html/search/classes_2.js +80 -80
  74. package/SVF-doxygen/html/search/classes_3.js +37 -37
  75. package/SVF-doxygen/html/search/classes_4.js +9 -9
  76. package/SVF-doxygen/html/search/classes_5.js +28 -28
  77. package/SVF-doxygen/html/search/classes_6.js +104 -104
  78. package/SVF-doxygen/html/search/classes_7.js +33 -33
  79. package/SVF-doxygen/html/search/classes_8.js +56 -56
  80. package/SVF-doxygen/html/search/classes_9.js +1 -1
  81. package/SVF-doxygen/html/search/classes_a.js +12 -12
  82. package/SVF-doxygen/html/search/classes_b.js +29 -29
  83. package/SVF-doxygen/html/search/classes_c.js +6 -6
  84. package/SVF-doxygen/html/search/classes_d.js +18 -18
  85. package/SVF-doxygen/html/search/classes_e.js +36 -36
  86. package/SVF-doxygen/html/search/classes_f.js +25 -25
  87. package/SVF-doxygen/html/search/defines_0.js +3 -3
  88. package/SVF-doxygen/html/search/defines_1.js +2 -2
  89. package/SVF-doxygen/html/search/defines_2.js +30 -30
  90. package/SVF-doxygen/html/search/defines_3.js +21 -21
  91. package/SVF-doxygen/html/search/defines_4.js +2 -2
  92. package/SVF-doxygen/html/search/defines_5.js +4 -4
  93. package/SVF-doxygen/html/search/defines_6.js +2 -2
  94. package/SVF-doxygen/html/search/defines_7.js +5 -5
  95. package/SVF-doxygen/html/search/defines_8.js +11 -11
  96. package/SVF-doxygen/html/search/defines_9.js +9 -9
  97. package/SVF-doxygen/html/search/defines_a.js +2 -2
  98. package/SVF-doxygen/html/search/defines_b.js +1 -1
  99. package/SVF-doxygen/html/search/defines_c.js +3 -3
  100. package/SVF-doxygen/html/search/defines_d.js +2 -2
  101. package/SVF-doxygen/html/search/defines_e.js +7 -7
  102. package/SVF-doxygen/html/search/defines_f.js +3 -3
  103. package/SVF-doxygen/html/search/enums_0.js +3 -3
  104. package/SVF-doxygen/html/search/enums_1.js +2 -2
  105. package/SVF-doxygen/html/search/enums_10.js +1 -1
  106. package/SVF-doxygen/html/search/enums_11.js +1 -1
  107. package/SVF-doxygen/html/search/enums_2.js +8 -8
  108. package/SVF-doxygen/html/search/enums_3.js +1 -1
  109. package/SVF-doxygen/html/search/enums_4.js +3 -3
  110. package/SVF-doxygen/html/search/enums_5.js +1 -1
  111. package/SVF-doxygen/html/search/enums_6.js +2 -2
  112. package/SVF-doxygen/html/search/enums_7.js +2 -2
  113. package/SVF-doxygen/html/search/enums_8.js +4 -4
  114. package/SVF-doxygen/html/search/enums_9.js +1 -1
  115. package/SVF-doxygen/html/search/enums_a.js +1 -1
  116. package/SVF-doxygen/html/search/enums_b.js +7 -7
  117. package/SVF-doxygen/html/search/enums_c.js +1 -1
  118. package/SVF-doxygen/html/search/enums_d.js +4 -4
  119. package/SVF-doxygen/html/search/enums_e.js +2 -2
  120. package/SVF-doxygen/html/search/enums_f.js +4 -4
  121. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  122. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  123. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  124. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  125. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  126. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  127. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  128. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  129. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  130. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  131. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  132. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  133. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  134. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  135. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  136. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  137. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  138. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  139. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  140. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  141. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  142. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  143. package/SVF-doxygen/html/search/files_0.js +13 -13
  144. package/SVF-doxygen/html/search/files_1.js +7 -7
  145. package/SVF-doxygen/html/search/files_10.js +8 -8
  146. package/SVF-doxygen/html/search/files_11.js +8 -8
  147. package/SVF-doxygen/html/search/files_12.js +2 -2
  148. package/SVF-doxygen/html/search/files_2.js +55 -55
  149. package/SVF-doxygen/html/search/files_3.js +14 -14
  150. package/SVF-doxygen/html/search/files_4.js +5 -5
  151. package/SVF-doxygen/html/search/files_5.js +13 -13
  152. package/SVF-doxygen/html/search/files_6.js +9 -9
  153. package/SVF-doxygen/html/search/files_7.js +14 -14
  154. package/SVF-doxygen/html/search/files_8.js +13 -13
  155. package/SVF-doxygen/html/search/files_9.js +18 -18
  156. package/SVF-doxygen/html/search/files_a.js +3 -3
  157. package/SVF-doxygen/html/search/files_b.js +2 -2
  158. package/SVF-doxygen/html/search/files_c.js +20 -20
  159. package/SVF-doxygen/html/search/files_d.js +4 -4
  160. package/SVF-doxygen/html/search/files_e.js +62 -62
  161. package/SVF-doxygen/html/search/files_f.js +8 -8
  162. package/SVF-doxygen/html/search/functions_0.js +12 -12
  163. package/SVF-doxygen/html/search/functions_1.js +360 -360
  164. package/SVF-doxygen/html/search/functions_10.js +140 -140
  165. package/SVF-doxygen/html/search/functions_11.js +138 -138
  166. package/SVF-doxygen/html/search/functions_12.js +279 -279
  167. package/SVF-doxygen/html/search/functions_13.js +59 -59
  168. package/SVF-doxygen/html/search/functions_14.js +39 -39
  169. package/SVF-doxygen/html/search/functions_15.js +71 -71
  170. package/SVF-doxygen/html/search/functions_16.js +32 -32
  171. package/SVF-doxygen/html/search/functions_17.js +3 -3
  172. package/SVF-doxygen/html/search/functions_18.js +172 -172
  173. package/SVF-doxygen/html/search/functions_2.js +87 -87
  174. package/SVF-doxygen/html/search/functions_3.js +257 -257
  175. package/SVF-doxygen/html/search/functions_4.js +75 -75
  176. package/SVF-doxygen/html/search/functions_5.js +53 -53
  177. package/SVF-doxygen/html/search/functions_6.js +59 -59
  178. package/SVF-doxygen/html/search/functions_7.js +853 -852
  179. package/SVF-doxygen/html/search/functions_8.js +149 -149
  180. package/SVF-doxygen/html/search/functions_9.js +423 -423
  181. package/SVF-doxygen/html/search/functions_a.js +30 -30
  182. package/SVF-doxygen/html/search/functions_b.js +2 -2
  183. package/SVF-doxygen/html/search/functions_c.js +26 -26
  184. package/SVF-doxygen/html/search/functions_d.js +77 -77
  185. package/SVF-doxygen/html/search/functions_e.js +35 -35
  186. package/SVF-doxygen/html/search/functions_f.js +56 -56
  187. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  188. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  189. package/SVF-doxygen/html/search/related_0.js +2 -2
  190. package/SVF-doxygen/html/search/related_1.js +2 -2
  191. package/SVF-doxygen/html/search/related_2.js +2 -2
  192. package/SVF-doxygen/html/search/related_3.js +2 -2
  193. package/SVF-doxygen/html/search/related_4.js +2 -2
  194. package/SVF-doxygen/html/search/related_5.js +1 -1
  195. package/SVF-doxygen/html/search/related_6.js +2 -2
  196. package/SVF-doxygen/html/search/related_7.js +4 -4
  197. package/SVF-doxygen/html/search/related_8.js +2 -2
  198. package/SVF-doxygen/html/search/related_9.js +4 -4
  199. package/SVF-doxygen/html/search/related_a.js +19 -19
  200. package/SVF-doxygen/html/search/related_b.js +4 -4
  201. package/SVF-doxygen/html/search/related_c.js +1 -1
  202. package/SVF-doxygen/html/search/related_d.js +12 -12
  203. package/SVF-doxygen/html/search/related_e.js +2 -2
  204. package/SVF-doxygen/html/search/related_f.js +2 -2
  205. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  206. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  207. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  208. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  209. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  210. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  211. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  212. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  213. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  214. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  215. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  216. package/SVF-doxygen/html/search/typedefs_6.js +55 -55
  217. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  218. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  219. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  220. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  221. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  222. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  223. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  224. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  225. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  226. package/SVF-doxygen/html/search/variables_0.js +151 -151
  227. package/SVF-doxygen/html/search/variables_1.js +75 -75
  228. package/SVF-doxygen/html/search/variables_10.js +97 -97
  229. package/SVF-doxygen/html/search/variables_11.js +44 -44
  230. package/SVF-doxygen/html/search/variables_12.js +92 -92
  231. package/SVF-doxygen/html/search/variables_13.js +75 -75
  232. package/SVF-doxygen/html/search/variables_14.js +14 -14
  233. package/SVF-doxygen/html/search/variables_15.js +48 -48
  234. package/SVF-doxygen/html/search/variables_16.js +9 -9
  235. package/SVF-doxygen/html/search/variables_17.js +1 -1
  236. package/SVF-doxygen/html/search/variables_18.js +2 -2
  237. package/SVF-doxygen/html/search/variables_2.js +38 -38
  238. package/SVF-doxygen/html/search/variables_3.js +142 -142
  239. package/SVF-doxygen/html/search/variables_4.js +55 -55
  240. package/SVF-doxygen/html/search/variables_5.js +37 -37
  241. package/SVF-doxygen/html/search/variables_6.js +66 -66
  242. package/SVF-doxygen/html/search/variables_7.js +33 -33
  243. package/SVF-doxygen/html/search/variables_8.js +7 -7
  244. package/SVF-doxygen/html/search/variables_9.js +78 -78
  245. package/SVF-doxygen/html/search/variables_a.js +4 -4
  246. package/SVF-doxygen/html/search/variables_b.js +10 -10
  247. package/SVF-doxygen/html/search/variables_c.js +45 -45
  248. package/SVF-doxygen/html/search/variables_d.js +56 -56
  249. package/SVF-doxygen/html/search/variables_e.js +123 -123
  250. package/SVF-doxygen/html/search/variables_f.js +29 -29
  251. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +2 -2
  252. package/SVF-doxygen/html/svf-ex_8cpp.html +11 -11
  253. package/SVF-doxygen/html/svf-ex_8cpp_source.html +11 -11
  254. package/package.json +1 -1
  255. package/svf/include/Graphs/ConsGEdge.h +1 -1
  256. package/svf/include/MemoryModel/AccessPath.h +2 -2
  257. package/svf/include/SVFIR/SVFStatements.h +2 -2
  258. package/svf/include/SVFIR/SVFVariables.h +1 -1
  259. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -1
  260. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -0
  261. package/svf/lib/DDA/ContextDDA.cpp +2 -1
  262. package/svf/lib/DDA/FlowDDA.cpp +1 -1
  263. package/svf/lib/MemoryModel/AccessPath.cpp +4 -4
  264. package/svf/lib/SVFIR/SVFIR.cpp +1 -1
  265. package/svf/lib/WPA/Andersen.cpp +1 -1
  266. package/svf/lib/WPA/FlowSensitive.cpp +1 -1
  267. package/svf-llvm/lib/SVFIRBuilder.cpp +2 -2
  268. package/svf-llvm/lib/SVFIRExtAPI.cpp +7 -5
@@ -174,9 +174,9 @@ $(function() {
174
174
  <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
175
175
  <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
176
176
  <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype),</div>
177
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
177
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantStructFldIdx());</div>
178
178
  <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* sElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(stype),</div>
179
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
179
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantStructFldIdx());</div>
180
180
  <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(D,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],dElementType);</div>
181
181
  <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sField = getGepValVar(S,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],sElementType);</div>
182
182
  <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
@@ -242,122 +242,124 @@ $(function() {
242
242
  <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; sz; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
243
243
  <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
244
244
  <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
245
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
246
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(cs-&gt;getArgOperand(0), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>], dElementType);</div>
247
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; addStoreEdge(getValueNode(cs-&gt;getArgOperand(1)),dField);</div>
248
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
249
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(cs-&gt;getType()))</div>
250
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; addCopyEdge(getValueNode(cs-&gt;getArgOperand(0)), getValueNode(cs));</div>
251
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
252
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().compare(<span class="stringliteral">&quot;dlsym&quot;</span>) == 0)</div>
253
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div>
254
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">/*</span></div>
255
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"> Side-effects of void* dlsym( void* handle, const char* funName),</span></div>
256
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> Locate the function with the name &quot;funName,&quot; then add a &quot;copy&quot; edge between the callsite and that function.</span></div>
257
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"> dlsym() example:</span></div>
258
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> int main() {</span></div>
259
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> // Open the shared library</span></div>
260
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> void* handle = dlopen(&quot;./my_shared_library.so&quot;, RTLD_LAZY);</span></div>
261
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> // Find the function address</span></div>
262
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> void (*myFunctionPtr)() = (void (*)())dlsym(handle, &quot;myFunction&quot;);</span></div>
263
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> // Call the function</span></div>
264
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> myFunctionPtr();</span></div>
265
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> }</span></div>
266
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"> */</span></div>
267
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = cs-&gt;getArgOperand(1);</div>
268
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(src))</div>
269
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; src = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">stripConstantCasts</a>(gep-&gt;getPointerOperand());</div>
270
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
271
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">auto</span> getHookFn = [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src)-&gt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*</div>
272
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
273
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GlobalVariable&gt;(src))</div>
274
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
275
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
276
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">auto</span> *glob = SVFUtil::cast&lt;GlobalVariable&gt;(src);</div>
277
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (!glob-&gt;hasInitializer() || !SVFUtil::isa&lt;ConstantDataArray&gt;(glob-&gt;getInitializer()))</div>
278
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
279
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; </div>
280
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">auto</span> *constarray = SVFUtil::cast&lt;ConstantDataArray&gt;(glob-&gt;getInitializer());</div>
281
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">LLVMUtil::getProgFunction</a>(constarray-&gt;getAsCString().str());</div>
282
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; };</div>
283
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
284
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = getHookFn(src))</div>
285
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div>
286
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = getValueNode(fn);</div>
287
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; addCopyEdge(srcNode, getValueNode(cs));</div>
288
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div>
289
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div>
290
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">&quot;_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_&quot;</span>) != std::string::npos)</div>
291
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div>
292
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// The purpose of this function is to insert a new node into the red-black tree and then rebalance the tree to ensure that the red-black tree properties are maintained.</span></div>
293
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; assert(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_insert_and_rebalance should have 4 arguments.\n&quot;</span>);</div>
294
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
295
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div>
296
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Now we calculate the offset from base to vArg3</span></div>
297
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(3));</div>
298
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = getAccessPathFromBaseNode(vnArg3).getConstantFieldIdx();</div>
299
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
300
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// We get all flattened fields of base</span></div>
301
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; vector&lt;AccessPath&gt; fields = pag-&gt;getTypeLocSetsMap(vnArg3).second;</div>
302
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
303
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// We summarize the side effects: arg3-&gt;parent = arg1, arg3-&gt;left = arg1, arg3-&gt;right = arg1</span></div>
304
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div>
305
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> i = <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 1; i &lt;= <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 3; ++i)</div>
306
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div>
307
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)i &gt;= fields.size())</div>
308
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">break</span>;</div>
309
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(pag-&gt;getTypeLocSetsMap(vnArg3).first,</div>
310
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; fields[i].getConstantFieldIdx());</div>
311
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = getGepValVar(cs-&gt;getArgOperand(3), fields[i], elementType);</div>
312
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1));</div>
313
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div>
314
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; addStoreEdge(vnS,vnD);</div>
315
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div>
316
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div>
317
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
318
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(svfInst))</div>
319
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div>
320
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* forkedFun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">getForkedFun</a>(svfInst)))</div>
321
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
322
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; forkedFun = forkedFun-&gt;getDefFunForMultipleModule();</div>
323
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">getActualParmAtForkSite</a>(svfInst);</div>
324
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; assert((forkedFun-&gt;arg_size() &lt;= 2) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of start routine should be one&quot;</span>);</div>
325
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (forkedFun-&gt;arg_size() &lt;= 2 &amp;&amp; forkedFun-&gt;arg_size() &gt;= 1)</div>
326
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div>
327
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = forkedFun-&gt;getArg(0);</div>
328
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
329
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
330
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
331
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(forkedFun);</div>
332
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
333
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
334
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
335
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
336
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span></div>
337
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
338
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
339
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
340
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
341
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(svfInst))</div>
342
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
343
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* taskFunc = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">getTaskFuncAtHareParForSite</a>(svfInst)))</div>
344
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
345
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; assert((taskFunc-&gt;arg_size() == 3) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of hare_parallel_for&#39;s task routine should be 3&quot;</span>);</div>
346
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">getTaskDataAtHareParForSite</a>(svfInst);</div>
347
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = taskFunc-&gt;getArg(0);</div>
348
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
349
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
350
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
351
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(taskFunc);</div>
352
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
353
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div>
354
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
355
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span></div>
356
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
357
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
358
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div>
359
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
360
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div>
245
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype),</div>
246
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantStructFldIdx());</div>
247
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(cs-&gt;getArgOperand(0), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>], dElementType);</div>
248
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; addStoreEdge(getValueNode(cs-&gt;getArgOperand(1)),dField);</div>
249
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
250
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(cs-&gt;getType()))</div>
251
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; addCopyEdge(getValueNode(cs-&gt;getArgOperand(0)), getValueNode(cs));</div>
252
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
253
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().compare(<span class="stringliteral">&quot;dlsym&quot;</span>) == 0)</div>
254
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
255
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">/*</span></div>
256
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> Side-effects of void* dlsym( void* handle, const char* funName),</span></div>
257
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"> Locate the function with the name &quot;funName,&quot; then add a &quot;copy&quot; edge between the callsite and that function.</span></div>
258
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> dlsym() example:</span></div>
259
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> int main() {</span></div>
260
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> // Open the shared library</span></div>
261
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> void* handle = dlopen(&quot;./my_shared_library.so&quot;, RTLD_LAZY);</span></div>
262
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> // Find the function address</span></div>
263
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> void (*myFunctionPtr)() = (void (*)())dlsym(handle, &quot;myFunction&quot;);</span></div>
264
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> // Call the function</span></div>
265
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> myFunctionPtr();</span></div>
266
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"> }</span></div>
267
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment"> */</span></div>
268
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = cs-&gt;getArgOperand(1);</div>
269
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(src))</div>
270
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; src = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">stripConstantCasts</a>(gep-&gt;getPointerOperand());</div>
271
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
272
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">auto</span> getHookFn = [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src)-&gt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*</div>
273
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
274
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GlobalVariable&gt;(src))</div>
275
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
276
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
277
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">auto</span> *glob = SVFUtil::cast&lt;GlobalVariable&gt;(src);</div>
278
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (!glob-&gt;hasInitializer() || !SVFUtil::isa&lt;ConstantDataArray&gt;(glob-&gt;getInitializer()))</div>
279
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
280
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
281
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">auto</span> *constarray = SVFUtil::cast&lt;ConstantDataArray&gt;(glob-&gt;getInitializer());</div>
282
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">LLVMUtil::getProgFunction</a>(constarray-&gt;getAsCString().str());</div>
283
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; };</div>
284
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
285
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = getHookFn(src))</div>
286
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
287
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = getValueNode(fn);</div>
288
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; addCopyEdge(srcNode, getValueNode(cs));</div>
289
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div>
290
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div>
291
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">&quot;_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_&quot;</span>) != std::string::npos)</div>
292
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
293
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// The purpose of this function is to insert a new node into the red-black tree and then rebalance the tree to ensure that the red-black tree properties are maintained.</span></div>
294
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; assert(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_insert_and_rebalance should have 4 arguments.\n&quot;</span>);</div>
295
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; </div>
296
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div>
297
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Now we calculate the offset from base to vArg3</span></div>
298
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(3));</div>
299
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> =</div>
300
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; getAccessPathFromBaseNode(vnArg3).getConstantStructFldIdx();</div>
301
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
302
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// We get all flattened fields of base</span></div>
303
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; vector&lt;AccessPath&gt; fields = pag-&gt;getTypeLocSetsMap(vnArg3).second;</div>
304
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
305
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// We summarize the side effects: arg3-&gt;parent = arg1, arg3-&gt;left = arg1, arg3-&gt;right = arg1</span></div>
306
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div>
307
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> i = <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 1; i &lt;= <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 3; ++i)</div>
308
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
309
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)i &gt;= fields.size())</div>
310
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">break</span>;</div>
311
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(pag-&gt;getTypeLocSetsMap(vnArg3).first,</div>
312
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; fields[i].getConstantStructFldIdx());</div>
313
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = getGepValVar(cs-&gt;getArgOperand(3), fields[i], elementType);</div>
314
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1));</div>
315
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div>
316
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; addStoreEdge(vnS,vnD);</div>
317
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div>
318
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
319
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
320
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(svfInst))</div>
321
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
322
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* forkedFun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">getForkedFun</a>(svfInst)))</div>
323
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
324
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; forkedFun = forkedFun-&gt;getDefFunForMultipleModule();</div>
325
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">getActualParmAtForkSite</a>(svfInst);</div>
326
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; assert((forkedFun-&gt;arg_size() &lt;= 2) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of start routine should be one&quot;</span>);</div>
327
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (forkedFun-&gt;arg_size() &lt;= 2 &amp;&amp; forkedFun-&gt;arg_size() &gt;= 1)</div>
328
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
329
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = forkedFun-&gt;getArg(0);</div>
330
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
331
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div>
332
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
333
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(forkedFun);</div>
334
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
335
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
336
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
337
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
338
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">else</span></div>
339
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div>
340
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
341
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
342
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
343
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(svfInst))</div>
344
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
345
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* taskFunc = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">getTaskFuncAtHareParForSite</a>(svfInst)))</div>
346
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div>
347
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; assert((taskFunc-&gt;arg_size() == 3) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of hare_parallel_for&#39;s task routine should be 3&quot;</span>);</div>
348
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">getTaskDataAtHareParForSite</a>(svfInst);</div>
349
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = taskFunc-&gt;getArg(0);</div>
350
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
351
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
352
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
353
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(taskFunc);</div>
354
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
355
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
356
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
357
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span></div>
358
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
359
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
360
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
361
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
362
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;}</div>
361
363
  </div><!-- fragment --></div><!-- contents -->
362
364
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
363
365
  <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a3cbb4b4089c8b27d01da15f2d2f22e14"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">SVF::SVFCallInst::getArgOperand</a></div><div class="ttdeci">const SVFValue * getArgOperand(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00746">SVFValue.h:746</a></div></div>
@@ -601,7 +601,7 @@ $(function() {
601
601
  <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- VariantGep --&gt; &quot;</span></div>
602
602
  <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
603
603
  <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">else</span></div>
604
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>() &lt;&lt; <span class="stringliteral">&quot; -- Gep (&quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1GepStmt.html#afe5ae814b71b59fc03bd672d62a5fab7">getConstantFieldIdx</a>()</div>
604
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">getRHSVarID</a>() &lt;&lt; <span class="stringliteral">&quot; -- Gep (&quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a71fcc6d100ce2a9785a02b8924261956">getConstantStructFldIdx</a>()</div>
605
605
  <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) --&gt; &quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a98f731be7be9bc8e7fd09f5c2204c840">getLHSVarID</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
606
606
  <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div>
607
607
  <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
@@ -710,6 +710,7 @@ $(function() {
710
710
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a5298f34143ec3a2e6bb74ebad668cbbc"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">SVF::SVFIR::getBaseValVar</a></div><div class="ttdeci">NodeID getBaseValVar(NodeID nodeId)</div><div class="ttdoc">Base and Offset methods for Value and Object node.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00519">SVFIR.cpp:519</a></div></div>
711
711
  <div class="ttc" id="aclassSVF_1_1Options_html_a12e88ce4ba3d39017203ec4cd3ccccea"><div class="ttname"><a href="classSVF_1_1Options.html#a12e88ce4ba3d39017203ec4cd3ccccea">SVF::Options::FirstFieldEqBase</a></div><div class="ttdeci">static const Option&lt; bool &gt; FirstFieldEqBase</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00114">Options.h:114</a></div></div>
712
712
  <div class="ttc" id="aclassSVF_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#l00313">SVFStatements.h:313</a></div></div>
713
+ <div class="ttc" id="aclassSVF_1_1GepStmt_html_a71fcc6d100ce2a9785a02b8924261956"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a71fcc6d100ce2a9785a02b8924261956">SVF::GepStmt::getConstantStructFldIdx</a></div><div class="ttdeci">APOffset getConstantStructFldIdx() const</div><div class="ttdoc">Field index of the gep statement if it access the field of a struct.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00520">SVFStatements.h:520</a></div></div>
713
714
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a33df5f5d9b7de3846cf973135b04f513"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">SVF::SVFIR::addBlackHoleAddrStmt</a></div><div class="ttdeci">SVFStmt * addBlackHoleAddrStmt(NodeID node)</div><div class="ttdoc">Set a pointer points-to black hole (e.g. int2ptr)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00277">SVFIR.cpp:277</a></div></div>
714
715
  <div class="ttc" id="aclassSVF_1_1GepStmt_html_a0ddf180a0f7ba64fc8655687910e3788"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">SVF::GepStmt::isVariantFieldGep</a></div><div class="ttdeci">bool isVariantFieldGep() const</div><div class="ttdoc">Gep statement with a variant field index (pointer arithmetic) for struct field access.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00526">SVFStatements.h:526</a></div></div>
715
716
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a42d1e2f0213fb6e54c56cc0695b57cb0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVF::SVFIR::getFieldsAfterCollapse</a></div><div class="ttdeci">NodeBS getFieldsAfterCollapse(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00499">SVFIR.cpp:499</a></div></div>
@@ -772,7 +773,6 @@ $(function() {
772
773
  <div class="ttc" id="aclassSVF_1_1PhiStmt_html_ac3541a25f83ce8465d7b35010ba50b37"><div class="ttname"><a href="classSVF_1_1PhiStmt.html#ac3541a25f83ce8465d7b35010ba50b37">SVF::PhiStmt::addOpVar</a></div><div class="ttdeci">void addOpVar(SVFVar *op, const ICFGNode *inode)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00792">SVFStatements.h:792</a></div></div>
773
774
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_accbff738e77fd2256d4a6629c48d63f4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#accbff738e77fd2256d4a6629c48d63f4">SVF::SVFIR::addSelectStmt</a></div><div class="ttdeci">SelectStmt * addSelectStmt(NodeID res, NodeID op1, NodeID op2, NodeID cond)</div><div class="ttdoc">Add SelectStmt.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00106">SVFIR.cpp:106</a></div></div>
774
775
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a555e6d530c37b23e1e43925aa188385f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a555e6d530c37b23e1e43925aa188385f">SVF::SVFIR::addGepValNode</a></div><div class="ttdeci">NodeID addGepValNode(const SVFValue *curInst, const SVFValue *val, const AccessPath &amp;ap, NodeID i, const SVFType *type)</div><div class="ttdoc">Add a temp field value node, this method can only invoked by getGepValVar.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00386">SVFIR.cpp:386</a></div></div>
775
- <div class="ttc" id="aclassSVF_1_1GepStmt_html_afe5ae814b71b59fc03bd672d62a5fab7"><div class="ttname"><a href="classSVF_1_1GepStmt.html#afe5ae814b71b59fc03bd672d62a5fab7">SVF::GepStmt::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">Field index of the gep statement if it access the field of a struct.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00520">SVFStatements.h:520</a></div></div>
776
776
  <div class="ttc" id="aclassSVF_1_1FIObjVar_html"><div class="ttname"><a href="classSVF_1_1FIObjVar.html">SVF::FIObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00529">SVFVariables.h:529</a></div></div>
777
777
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVF::SVFStmt::Copy</a></div><div class="ttdeci">@ Copy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00064">SVFStatements.h:64</a></div></div>
778
778
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a236b4fefd16e9c793c5bd6d576290841"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">SVF::SVFIR::print</a></div><div class="ttdeci">void print()</div><div class="ttdoc">Print SVFIR.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00575">SVFIR.cpp:575</a></div></div>
@@ -520,10 +520,10 @@ $(function() {
520
520
  <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="keyword"> </span>{</div>
521
521
  <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>().<a class="code" href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651">computeConstantOffset</a>();</div>
522
522
  <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div>
523
- <div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="classSVF_1_1GepStmt.html#afe5ae814b71b59fc03bd672d62a5fab7"> 520</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1GepStmt.html#afe5ae814b71b59fc03bd672d62a5fab7">getConstantFieldIdx</a>()<span class="keyword"> const</span></div>
523
+ <div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="classSVF_1_1GepStmt.html#a71fcc6d100ce2a9785a02b8924261956"> 520</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1GepStmt.html#a71fcc6d100ce2a9785a02b8924261956">getConstantStructFldIdx</a>()<span class="keyword"> const</span></div>
524
524
  <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="keyword"> </span>{</div>
525
525
  <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; assert(<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>()==<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Can&#39;t retrieve the AccessPath if using a variable field index (pointer arithmetic) for struct field access &quot;</span>);</div>
526
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>().<a class="code" href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">getConstantFieldIdx</a>();</div>
526
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>().<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>();</div>
527
527
  <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div>
528
528
  <div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788"> 526</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>()<span class="keyword"> const</span></div>
529
529
  <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="keyword"> </span>{</div>
@@ -1186,6 +1186,7 @@ $(function() {
1186
1186
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a7ba458577745f9b88bceceee91649567"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a7ba458577745f9b88bceceee91649567">SVF::SVFStmt::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdoc">Get/set methods for llvm instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00137">SVFStatements.h:137</a></div></div>
1187
1187
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_aac79c7e8d390f297002782afb0ba3ff0"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#aac79c7e8d390f297002782afb0ba3ff0">SVF::SVFStmt::~SVFStmt</a></div><div class="ttdeci">~SVFStmt()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00099">SVFStatements.h:99</a></div></div>
1188
1188
  <div class="ttc" id="aclassSVF_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#l00313">SVFStatements.h:313</a></div></div>
1189
+ <div class="ttc" id="aclassSVF_1_1GepStmt_html_a71fcc6d100ce2a9785a02b8924261956"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a71fcc6d100ce2a9785a02b8924261956">SVF::GepStmt::getConstantStructFldIdx</a></div><div class="ttdeci">APOffset getConstantStructFldIdx() const</div><div class="ttdoc">Field index of the gep statement if it access the field of a struct.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00520">SVFStatements.h:520</a></div></div>
1189
1190
  <div class="ttc" id="aclassSVF_1_1UnaryOPStmt_html_add29b76e0ef73da2606bac97f74a7896"><div class="ttname"><a href="classSVF_1_1UnaryOPStmt.html#add29b76e0ef73da2606bac97f74a7896">SVF::UnaryOPStmt::classof</a></div><div class="ttdeci">static bool classof(const GenericPAGEdgeTy *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01061">SVFStatements.h:1061</a></div></div>
1190
1191
  <div class="ttc" id="aclassSVF_1_1CallPE_html_a1e09f62a8e3ce2d3bc3fadb29e32a50e"><div class="ttname"><a href="classSVF_1_1CallPE.html#a1e09f62a8e3ce2d3bc3fadb29e32a50e">SVF::CallPE::CallPE</a></div><div class="ttdeci">CallPE(const CallPE &amp;)</div><div class="ttdoc">place holder</div></div>
1191
1192
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a2bdfa37167b5496629e5cae62705d5f2"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a2bdfa37167b5496629e5cae62705d5f2">SVF::SVFStmt::PAGEdgeSetTy</a></div><div class="ttdeci">SVFStmtSetTy PAGEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00220">SVFStatements.h:220</a></div></div>
@@ -1264,6 +1265,7 @@ $(function() {
1264
1265
  <div class="ttc" id="aclassSVF_1_1GenericEdge_html_aab8892b73370c32b48621cd1d0cce614"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aab8892b73370c32b48621cd1d0cce614">SVF::GenericEdge::GEdgeFlag</a></div><div class="ttdeci">u64_t GEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00061">GenericGraph.h:61</a></div></div>
1265
1266
  <div class="ttc" id="aclassSVF_1_1CmpStmt_html_ad8e01744bfd98d584661025ce59338acae866bc681596d85b9aba876256ad0e69"><div class="ttname"><a href="classSVF_1_1CmpStmt.html#ad8e01744bfd98d584661025ce59338acae866bc681596d85b9aba876256ad0e69">SVF::CmpStmt::LAST_FCMP_PREDICATE</a></div><div class="ttdeci">@ LAST_FCMP_PREDICATE</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00906">SVFStatements.h:906</a></div></div>
1266
1267
  <div class="ttc" id="aclassSVF_1_1MultiOpndStmt_html_acb793282c0abdef799b02658eebe1b79"><div class="ttname"><a href="classSVF_1_1MultiOpndStmt.html#acb793282c0abdef799b02658eebe1b79">SVF::MultiOpndStmt::getSrcID</a></div><div class="ttdeci">NodeID getSrcID()</div><div class="ttdoc">not allowed, use getOpVarID(idx) instead</div></div>
1268
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a5427d08c9eb9d86e66c2bff6aeba6bac"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">SVF::AccessPath::getConstantStructFldIdx</a></div><div class="ttdeci">APOffset getConstantStructFldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00098">AccessPath.h:98</a></div></div>
1267
1269
  <div class="ttc" id="aclassSVF_1_1BinaryOPStmt_html_a2f647224242dd87099104e0fdc994de6ac988853383e1588cf568687848e73576"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html#a2f647224242dd87099104e0fdc994de6ac988853383e1588cf568687848e73576">SVF::BinaryOPStmt::AShr</a></div><div class="ttdeci">@ AShr</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00987">SVFStatements.h:987</a></div></div>
1268
1270
  <div class="ttc" id="aclassSVF_1_1CopyStmt_html_a96205e0ffb3001de306e856090dbf277"><div class="ttname"><a href="classSVF_1_1CopyStmt.html#a96205e0ffb3001de306e856090dbf277">SVF::CopyStmt::operator=</a></div><div class="ttdeci">void operator=(const CopyStmt &amp;)</div><div class="ttdoc">place holder</div></div>
1269
1271
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_ad0b4dbe87e009518f22360c48b0d0c22"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#ad0b4dbe87e009518f22360c48b0d0c22">SVF::SVFStmt::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8cpp_source.html#l00066">SVFStatements.cpp:66</a></div></div>
@@ -1286,7 +1288,6 @@ $(function() {
1286
1288
  <div class="ttc" id="aclassSVF_1_1MultiOpndStmt_html_a5de8ff8363cb3f0b1427b69aa1058470"><div class="ttname"><a href="classSVF_1_1MultiOpndStmt.html#a5de8ff8363cb3f0b1427b69aa1058470">SVF::MultiOpndStmt::classof</a></div><div class="ttdeci">static bool classof(const SVFStmt *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00697">SVFStatements.h:697</a></div></div>
1287
1289
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a24c64109d27ef7549d1c7a07c391e007"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a24c64109d27ef7549d1c7a07c391e007">SVF::SVFStmt::var2LabelMap</a></div><div class="ttdeci">static Var2LabelMap var2LabelMap</div><div class="ttdoc">Second operand of MultiOpndStmt to label map.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00226">SVFStatements.h:226</a></div></div>
1288
1290
  <div class="ttc" id="aclassSVF_1_1AssignStmt_html_a4cec89489e82c60c287cae3327f3f01d"><div class="ttname"><a href="classSVF_1_1AssignStmt.html#a4cec89489e82c60c287cae3327f3f01d">SVF::AssignStmt::getRHSVarID</a></div><div class="ttdeci">NodeID getRHSVarID() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00298">SVFStatements.h:298</a></div></div>
1289
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a68e49bb797a84ea035ea338549f2e054"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">SVF::AccessPath::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00098">AccessPath.h:98</a></div></div>
1290
1291
  <div class="ttc" id="aclassSVF_1_1RetPE_html_a274adbd91750d8d6de8ba997285c1c49"><div class="ttname"><a href="classSVF_1_1RetPE.html#a274adbd91750d8d6de8ba997285c1c49">SVF::RetPE::getFunExitICFGNode</a></div><div class="ttdeci">const FunExitICFGNode * getFunExitICFGNode() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00654">SVFStatements.h:654</a></div></div>
1291
1292
  <div class="ttc" id="aclassSVF_1_1SelectStmt_html_a89f27a20f9c2acc66c4c6152e79ee30e"><div class="ttname"><a href="classSVF_1_1SelectStmt.html#a89f27a20f9c2acc66c4c6152e79ee30e">SVF::SelectStmt::classof</a></div><div class="ttdeci">static bool classof(const SelectStmt *)</div><div class="ttdoc">Methods for support type inquiry through isa, cast, and dyn_cast:</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00832">SVFStatements.h:832</a></div></div>
1292
1293
  <div class="ttc" id="aclassSVF_1_1RetPE_html_a0af89e939e91a980a083f931b209aea0"><div class="ttname"><a href="classSVF_1_1RetPE.html#a0af89e939e91a980a083f931b209aea0">SVF::RetPE::RetPE</a></div><div class="ttdeci">RetPE(const RetPE &amp;)</div><div class="ttdoc">place holder</div></div>
@@ -1342,7 +1343,6 @@ $(function() {
1342
1343
  <div class="ttc" id="aclassSVF_1_1PhiStmt_html_ac214292370d79324f6da8624fe2c7139"><div class="ttname"><a href="classSVF_1_1PhiStmt.html#ac214292370d79324f6da8624fe2c7139">SVF::PhiStmt::classof</a></div><div class="ttdeci">static bool classof(const SVFStmt *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00771">SVFStatements.h:771</a></div></div>
1343
1344
  <div class="ttc" id="aclassSVF_1_1AssignStmt_html_a8b2837153dcf9f7e2adc3b30b2dd0245"><div class="ttname"><a href="classSVF_1_1AssignStmt.html#a8b2837153dcf9f7e2adc3b30b2dd0245">SVF::AssignStmt::classof</a></div><div class="ttdeci">static bool classof(const GenericPAGEdgeTy *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00276">SVFStatements.h:276</a></div></div>
1344
1345
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a229c78147511f2a581c761552179b6fa"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a229c78147511f2a581c761552179b6fa">SVF::SVFStmt::PAGEdgeToSetMapTy</a></div><div class="ttdeci">Map&lt; EdgeID, SVFStmtSetTy &gt; PAGEdgeToSetMapTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00218">SVFStatements.h:218</a></div></div>
1345
- <div class="ttc" id="aclassSVF_1_1GepStmt_html_afe5ae814b71b59fc03bd672d62a5fab7"><div class="ttname"><a href="classSVF_1_1GepStmt.html#afe5ae814b71b59fc03bd672d62a5fab7">SVF::GepStmt::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">Field index of the gep statement if it access the field of a struct.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00520">SVFStatements.h:520</a></div></div>
1346
1346
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_ae746362c42da05a641ae062658e40651"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651">SVF::AccessPath::computeConstantOffset</a></div><div class="ttdeci">APOffset computeConstantOffset() const</div><div class="ttdoc">For example,.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00207">AccessPath.cpp:207</a></div></div>
1347
1347
  <div class="ttc" id="aclassSVF_1_1CmpStmt_html_ad8e01744bfd98d584661025ce59338aca56a20e408f9639234e4a11036764a38f"><div class="ttname"><a href="classSVF_1_1CmpStmt.html#ad8e01744bfd98d584661025ce59338aca56a20e408f9639234e4a11036764a38f">SVF::CmpStmt::ICMP_ULE</a></div><div class="ttdeci">@ ICMP_ULE</div><div class="ttdoc">unsigned less or equal</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00913">SVFStatements.h:913</a></div></div>
1348
1348
  <div class="ttc" id="aclassSVF_1_1PhiStmt_html_ac2374acf4477a4bc5d188797ea9baaf3"><div class="ttname"><a href="classSVF_1_1PhiStmt.html#ac2374acf4477a4bc5d188797ea9baaf3">SVF::PhiStmt::PhiStmt</a></div><div class="ttdeci">PhiStmt(SVFVar *s, const OPVars &amp;opnds, const OpICFGNodeVec &amp;icfgNodes)</div><div class="ttdoc">constructor</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00786">SVFStatements.h:786</a></div></div>
@@ -439,7 +439,7 @@ $(function() {
439
439
  <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
440
440
  <div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="classSVF_1_1GepValVar.html#ada19ed60cb6623867b00b0f59cf0453a"> 421</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1GepValVar.html#ada19ed60cb6623867b00b0f59cf0453a">getConstantFieldIdx</a>()<span class="keyword"> const</span></div>
441
441
  <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="keyword"> </span>{</div>
442
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GepValVar.html#a07b41362e4699c930af7bbe178e0b252">ap</a>.<a class="code" href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">getConstantFieldIdx</a>();</div>
442
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GepValVar.html#a07b41362e4699c930af7bbe178e0b252">ap</a>.<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>();</div>
443
443
  <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div>
444
444
  <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; </div>
445
445
  <div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classSVF_1_1GepValVar.html#ae89482e674768298f49e51df4ebe63e3"> 427</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1GepValVar.html#ae89482e674768298f49e51df4ebe63e3">getValueName</a>()<span class="keyword"> const</span></div>
@@ -787,6 +787,7 @@ $(function() {
787
787
  <div class="ttc" id="aclassSVF_1_1RetPN_html_ac551c1aaf9ec3cb77814aa4664d61a23"><div class="ttname"><a href="classSVF_1_1RetPN.html#ac551c1aaf9ec3cb77814aa4664d61a23">SVF::RetPN::RetPN</a></div><div class="ttdeci">RetPN(const SVFFunction *val, NodeID i)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00610">SVFVariables.h:610</a></div></div>
788
788
  <div class="ttc" id="aclassSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00412">SymbolTableInfo.h:412</a></div></div>
789
789
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a3b61042079a6c9dc395f38925c6a1271"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">SVF::SVFVar::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00117">SVFVariables.h:117</a></div></div>
790
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a5427d08c9eb9d86e66c2bff6aeba6bac"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">SVF::AccessPath::getConstantStructFldIdx</a></div><div class="ttdeci">APOffset getConstantStructFldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00098">AccessPath.h:98</a></div></div>
790
791
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00180">GenericGraph.h:180</a></div></div>
791
792
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a79b35a312248e96a89a28cbf1b99b6fe"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a79b35a312248e96a89a28cbf1b99b6fe">SVF::SVFVar::getFunction</a></div><div class="ttdeci">virtual const SVFFunction * getFunction() const</div><div class="ttdoc">Return the function that this SVFVar resides in. Return nullptr if it is a global or constantexpr nod...</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00133">SVFVariables.h:133</a></div></div>
792
793
  <div class="ttc" id="aclassSVF_1_1VarArgPN_html_a3a7f82ff9fe4426ae8d967460995e2cd"><div class="ttname"><a href="classSVF_1_1VarArgPN.html#a3a7f82ff9fe4426ae8d967460995e2cd">SVF::VarArgPN::classof</a></div><div class="ttdeci">static bool classof(const ValVar *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00643">SVFVariables.h:643</a></div></div>
@@ -795,7 +796,6 @@ $(function() {
795
796
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a283f7c0c2eaae07c6865f73a0daafeffa288e3f5d01c94d5c5d685d43f08a6c4a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a283f7c0c2eaae07c6865f73a0daafeffa288e3f5d01c94d5c5d685d43f08a6c4a">SVF::SVFVar::GepValNode</a></div><div class="ttdeci">@ GepValNode</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00069">SVFVariables.h:69</a></div></div>
796
797
  <div class="ttc" id="aclassSVF_1_1DummyValVar_html_a188ddcb95f842245fb97362ff8a06efd"><div class="ttname"><a href="classSVF_1_1DummyValVar.html#a188ddcb95f842245fb97362ff8a06efd">SVF::DummyValVar::getValueName</a></div><div class="ttdeci">const std::string getValueName() const</div><div class="ttdoc">Return name of this node.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00697">SVFVariables.h:697</a></div></div>
797
798
  <div class="ttc" id="aclassSVF_1_1DummyValVar_html_a39fb5acde002694e91599a67ff3ae99a"><div class="ttname"><a href="classSVF_1_1DummyValVar.html#a39fb5acde002694e91599a67ff3ae99a">SVF::DummyValVar::DummyValVar</a></div><div class="ttdeci">DummyValVar(NodeID i)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00694">SVFVariables.h:694</a></div></div>
798
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a68e49bb797a84ea035ea338549f2e054"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">SVF::AccessPath::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00098">AccessPath.h:98</a></div></div>
799
799
  <div class="ttc" id="aclassSVF_1_1ValVar_html"><div class="ttname"><a href="classSVF_1_1ValVar.html">SVF::ValVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00262">SVFVariables.h:262</a></div></div>
800
800
  <div class="ttc" id="aclassSVF_1_1FIObjVar_html_a1f6ba91fe429f55598cef983a2b3a538"><div class="ttname"><a href="classSVF_1_1FIObjVar.html#a1f6ba91fe429f55598cef983a2b3a538">SVF::FIObjVar::classof</a></div><div class="ttdeci">static bool classof(const SVFVar *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00549">SVFVariables.h:549</a></div></div>
801
801
  <div class="ttc" id="aclassSVF_1_1ValVar_html_aeaccfd3bf5f968ad12d7e1a2426e5faa"><div class="ttname"><a href="classSVF_1_1ValVar.html#aeaccfd3bf5f968ad12d7e1a2426e5faa">SVF::ValVar::getValueName</a></div><div class="ttdeci">const std::string getValueName() const</div><div class="ttdoc">Return name of a LLVM value.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00302">SVFVariables.h:302</a></div></div>