svf-tools 1.0.796 → 1.0.798

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.
@@ -197,115 +197,119 @@ $(function() {
197
197
  <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div>
198
198
  <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
199
199
  <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
200
- <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#addc5529c5b161d0c61eba4944428455e"> 141</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#addc5529c5b161d0c61eba4944428455e">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst)</div>
200
+ <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96"> 141</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode)</div>
201
201
  <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div>
202
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode = icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfInst);</div>
203
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const ICFGNode*&gt;</a> worklist;</div>
204
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const ICFGNode*&gt;</a> visited;</div>
205
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(iNode);</div>
206
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
207
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
208
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
209
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
210
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div>
211
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div>
212
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div>
213
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div>
214
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div>
215
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="svf-ex_8cpp.html#a8fa9e6583c354b1883a32b8abf98779f">traverseOnSVFStmt</a>(succNode);</div>
216
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div>
217
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div>
218
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; visited.insert(succNode);</div>
219
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(succNode);</div>
220
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
221
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
222
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
223
- <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
224
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
225
- <div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b"> 170</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val)</div>
226
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div>
227
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div>
228
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
229
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(val));</div>
230
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-&gt;<a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div>
231
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const VFGNode*&gt;</a> worklist;</div>
232
- <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;</a> visited;</div>
233
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(vNode);</div>
234
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
235
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
236
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
237
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
238
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div>
239
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div>
240
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
241
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div>
242
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div>
243
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div>
244
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {</div>
245
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; visited.insert(succNode);</div>
246
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(succNode);</div>
247
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div>
248
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
249
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
250
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
251
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div>
252
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div>
253
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// const VFGNode* node = *it;</span></div>
254
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"></span> }</div>
255
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
256
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
257
- <div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 207</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div>
258
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div>
259
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
260
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div>
261
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; moduleNameVec = <a class="code" href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a>(</div>
262
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; argc, argv, <span class="stringliteral">&quot;Whole Program Points-to Analysis&quot;</span>, <span class="stringliteral">&quot;[options] &lt;input-bitcode...&gt;&quot;</span></div>
263
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; );</div>
264
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
265
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (Options::WriteAnder() == <span class="stringliteral">&quot;ir_annotator&quot;</span>)</div>
266
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
267
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; LLVMModuleSet::preProcessBCs(moduleNameVec);</div>
268
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
202
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const ICFGNode*&gt;</a> worklist;</div>
203
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const ICFGNode*&gt;</a> visited;</div>
204
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(iNode);</div>
205
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
206
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
207
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
208
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
209
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div>
210
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div>
211
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div>
212
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div>
213
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div>
214
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div>
215
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
216
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; visited.insert(succNode);</div>
217
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(succNode);</div>
218
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
219
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
220
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
221
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;}</div>
222
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
223
+ <div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b"> 168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val)</div>
224
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;{</div>
225
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div>
226
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
227
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(val));</div>
228
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-&gt;<a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div>
229
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;const VFGNode*&gt;</a> worklist;</div>
230
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;</a> visited;</div>
231
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(vNode);</div>
232
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
233
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div>
234
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div>
235
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div>
236
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div>
237
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; vNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div>
238
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
239
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div>
240
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div>
241
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div>
242
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div>
243
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; visited.insert(succNode);</div>
244
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(succNode);</div>
245
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
246
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
247
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div>
248
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
249
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const VFGNode*&gt;::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div>
250
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div>
251
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// const VFGNode* node = *it;</span></div>
252
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"></span> }</div>
253
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
254
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
255
+ <div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 205</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div>
256
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div>
257
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
258
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div>
259
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; moduleNameVec = <a class="code" href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a>(</div>
260
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; argc, argv, <span class="stringliteral">&quot;Whole Program Points-to Analysis&quot;</span>, <span class="stringliteral">&quot;[options] &lt;input-bitcode...&gt;&quot;</span></div>
261
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; );</div>
262
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
263
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (Options::WriteAnder() == <span class="stringliteral">&quot;ir_annotator&quot;</span>)</div>
264
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div>
265
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; LLVMModuleSet::preProcessBCs(moduleNameVec);</div>
266
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div>
267
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; </div>
268
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::buildSVFModule(moduleNameVec);</div>
269
269
  <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
270
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::buildSVFModule(moduleNameVec);</div>
271
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
272
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder(svfModule);</div>
273
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5ecf1deb5646ccb46b0b3101417f4689">build</a>();</div>
274
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
275
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div>
276
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; </div>
277
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; </div>
278
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
279
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div>
280
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
281
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>();</div>
282
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">&quot;icfg&quot;</span>);</div>
283
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
284
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div>
285
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
286
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div>
287
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">//SVFG* svfg =</span></div>
288
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div>
289
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
290
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
291
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
292
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// clean up memory</span></div>
293
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">delete</span> vfg;</div>
294
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; AndersenWaveDiff::releaseAndersenWaveDiff();</div>
295
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; SVFIR::releaseSVFIR();</div>
296
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
297
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;dumpModulesToFile(<span class="stringliteral">&quot;.svf.bc&quot;</span>);</div>
298
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div>
270
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder(svfModule);</div>
271
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5ecf1deb5646ccb46b0b3101417f4689">build</a>();</div>
272
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
273
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div>
274
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
275
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
276
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
277
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div>
278
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
279
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>();</div>
280
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; icfg-&gt;<a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">&quot;icfg&quot;</span>);</div>
281
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
282
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div>
283
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
284
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div>
285
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">//SVFG* svfg =</span></div>
286
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div>
287
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
288
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
289
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
290
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it : *icfg)</div>
291
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div>
292
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = it.second;</div>
293
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96">traverseOnICFG</a>(icfg, node);</div>
294
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
295
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
296
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// clean up memory</span></div>
297
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">delete</span> vfg;</div>
298
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; AndersenWaveDiff::releaseAndersenWaveDiff();</div>
299
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; SVFIR::releaseSVFIR();</div>
299
300
  <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; </div>
300
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; llvm::llvm_shutdown();</div>
301
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> 0;</div>
302
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div>
303
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; </div>
301
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;dumpModulesToFile(<span class="stringliteral">&quot;.svf.bc&quot;</span>);</div>
302
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div>
303
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
304
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; llvm::llvm_shutdown();</div>
305
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> 0;</div>
306
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div>
307
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
304
308
  </div><!-- fragment --></div><!-- contents -->
305
309
  <div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a0df409a67428e528321869d201f2a474"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(const Data &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00165">WorkList.h:165</a></div></div>
306
310
  <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_adb82778157e0f5e7a2ea4d803bcd07ad"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#adb82778157e0f5e7a2ea4d803bcd07ad">SVF::SVFIR2ItvExeState::translateCall</a></div><div class="ttdeci">void translateCall(const CallPE *callPE)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00946">SVFIR2ItvExeState.cpp:946</a></div></div>
307
311
  <div class="ttc" id="aclassSVF_1_1CopyStmt_html"><div class="ttname"><a href="classSVF_1_1CopyStmt.html">SVF::CopyStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00350">SVFStatements.h:350</a></div></div>
308
- <div class="ttc" id="asvf-ex_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00207">svf-ex.cpp:207</a></div></div>
312
+ <div class="ttc" id="asvf-ex_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00205">svf-ex.cpp:205</a></div></div>
309
313
  <div class="ttc" id="aclassSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00200">WorkList.h:200</a></div></div>
310
314
  <div class="ttc" id="aclassSVF_1_1SVFG_html"><div class="ttname"><a href="classSVF_1_1SVFG.html">SVF::SVFG</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00065">SVFG.h:65</a></div></div>
311
315
  <div class="ttc" id="aclassSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
@@ -327,6 +331,7 @@ $(function() {
327
331
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00174">PointerAnalysis.h:174</a></div></div>
328
332
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00058">PointerAnalysis.h:58</a></div></div>
329
333
  <div class="ttc" id="aclassSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00604">SVFStatements.h:604</a></div></div>
334
+ <div class="ttc" id="asvf-ex_8cpp_html_a19f3fe331a1e7050a513672a91743b96"><div class="ttname"><a href="svf-ex_8cpp.html#a19f3fe331a1e7050a513672a91743b96">traverseOnICFG</a></div><div class="ttdeci">void traverseOnICFG(ICFG *icfg, const ICFGNode *iNode)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00141">svf-ex.cpp:141</a></div></div>
330
335
  <div class="ttc" id="aclassSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00870">SVFStatements.h:870</a></div></div>
331
336
  <div class="ttc" id="aclassSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
332
337
  <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_aac5cc8767eb750bf121f1897788dee24"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#aac5cc8767eb750bf121f1897788dee24">SVF::SVFIR2ItvExeState::translateCmp</a></div><div class="ttdeci">void translateCmp(const CmpStmt *cmp)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00570">SVFIR2ItvExeState.cpp:570</a></div></div>
@@ -339,9 +344,8 @@ $(function() {
339
344
  <div class="ttc" id="aCommandLine_8h_html"><div class="ttname"><a href="CommandLine_8h.html">CommandLine.h</a></div></div>
340
345
  <div class="ttc" id="aclassSVF_1_1CallPE_html"><div class="ttname"><a href="classSVF_1_1CallPE.html">SVF::CallPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00544">SVFStatements.h:544</a></div></div>
341
346
  <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a8f2a564370d9b9fb05e139c45eeaba68"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a8f2a564370d9b9fb05e139c45eeaba68">SVF::SVFIR2ItvExeState::translateLoad</a></div><div class="ttdeci">void translateLoad(const LoadStmt *load)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00754">SVFIR2ItvExeState.cpp:754</a></div></div>
342
- <div class="ttc" id="asvf-ex_8cpp_html_ad58149e5445ad22ce478339e103ab42b"><div class="ttname"><a href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a></div><div class="ttdeci">void traverseOnVFG(const SVFG *vfg, SVFValue *val)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00170">svf-ex.cpp:170</a></div></div>
347
+ <div class="ttc" id="asvf-ex_8cpp_html_ad58149e5445ad22ce478339e103ab42b"><div class="ttname"><a href="svf-ex_8cpp.html#ad58149e5445ad22ce478339e103ab42b">traverseOnVFG</a></div><div class="ttdeci">void traverseOnVFG(const SVFG *vfg, SVFValue *val)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00168">svf-ex.cpp:168</a></div></div>
343
348
  <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
344
- <div class="ttc" id="asvf-ex_8cpp_html_addc5529c5b161d0c61eba4944428455e"><div class="ttname"><a href="svf-ex_8cpp.html#addc5529c5b161d0c61eba4944428455e">traverseOnICFG</a></div><div class="ttdeci">void traverseOnICFG(ICFG *icfg, const SVFInstruction *svfInst)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00141">svf-ex.cpp:141</a></div></div>
345
349
  <div class="ttc" id="aclassOptionBase_html_a4fb6c6e4a1754d702c6c1730f54457e5"><div class="ttname"><a href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a></div><div class="ttdeci">static std::vector&lt; std::string &gt; parseOptions(int argc, char *argv[], std::string description, std::string callFormat)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00075">CommandLine.h:75</a></div></div>
346
350
  <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html">SVF::SVFIR2ItvExeState</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00041">SVFIR2ItvExeState.h:41</a></div></div>
347
351
  <div class="ttc" id="aclassSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00956">SVFStatements.h:956</a></div></div>
@@ -352,7 +356,6 @@ $(function() {
352
356
  <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a449ee8f244120866037c7f6d2ee5fc13"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a449ee8f244120866037c7f6d2ee5fc13">SVF::SVFIR2ItvExeState::translateBinary</a></div><div class="ttdeci">void translateBinary(const BinaryOPStmt *binary)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00508">SVFIR2ItvExeState.cpp:508</a></div></div>
353
357
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_a19a3366fd8a58290d0c740c46c3dcb3d"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">SVF::GenericNode::OutEdgeEnd</a></div><div class="ttdeci">iterator OutEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00221">GenericGraph.h:221</a></div></div>
354
358
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class.</div></div>
355
- <div class="ttc" id="aclassSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00088">ICFG.h:88</a></div></div>
356
359
  <div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html">SVF::SVFIRBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00046">SVFIRBuilder.h:46</a></div></div>
357
360
  <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_aed2e41879bae8389c49e69356b7aaac5"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#aed2e41879bae8389c49e69356b7aaac5">SVF::SVFIR2ItvExeState::translateStore</a></div><div class="ttdeci">void translateStore(const StoreStmt *store)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00800">SVFIR2ItvExeState.cpp:800</a></div></div>
358
361
  <div class="ttc" id="anamespaceSVF_html_a61c01e2e687ab3a001fb806737583943"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a></div><div class="ttdeci">AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00604">SVFType.h:604</a></div></div>
@@ -387,7 +390,6 @@ $(function() {
387
390
  <div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
388
391
  <div class="ttc" id="aclassSVF_1_1ICFG_html_a999956500bbd605326531480546db9ba"><div class="ttname"><a href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">SVF::ICFG::dump</a></div><div class="ttdeci">void dump(const std::string &amp;file, bool simple=false)</div><div class="ttdoc">Dump graph into dot file.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00441">ICFG.cpp:441</a></div></div>
389
392
  <div class="ttc" id="aclassSVF_1_1ICFGNode_html_ac16c5a3227a44d3b9f7c3209156d9df2"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">SVF::ICFGNode::const_iterator</a></div><div class="ttdeci">ICFGEdge::ICFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00073">ICFGNode.h:73</a></div></div>
390
- <div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00620">SVFValue.h:620</a></div></div>
391
393
  <div class="ttc" id="aclassSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>
392
394
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00201">PointerAnalysis.h:201</a></div></div>
393
395
  <div class="ttc" id="aclassSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00101">GenericGraph.h:101</a></div></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.796",
3
+ "version": "1.0.798",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -101,26 +101,47 @@ APOffset AccessPath::computeConstantByteOffset() const
101
101
  APOffset totalConstOffset = 0;
102
102
  for(int i = offsetVarAndGepTypePairs.size() - 1; i >= 0; i--)
103
103
  {
104
+ /// For example, there is struct DEST{int a, char b[10], int c[5]}
105
+ /// (1) %c = getelementptr inbounds %struct.DEST, %struct.DEST* %arr, i32 0, i32 2
106
+ // (2) %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %b, i64 0, i64 8
104
107
  const SVFValue* value = offsetVarAndGepTypePairs[i].first->getValue();
108
+ /// for (1) offsetVarAndGepTypePairs.size() = 2
109
+ /// i = 0, type: %struct.DEST*, PtrType, op = 0
110
+ /// i = 1, type: %struct.DEST, StructType, op = 2
111
+ /// for (2) offsetVarAndGepTypePairs.size() = 2
112
+ /// i = 0, type: [10 x i8]*, PtrType, op = 0
113
+ /// i = 1, type: [10 x i8], ArrType, op = 8
105
114
  const SVFType* type = offsetVarAndGepTypePairs[i].second;
106
115
  const SVFType* type2 = type;
107
116
  if (const SVFArrayType* arrType = SVFUtil::dyn_cast<SVFArrayType>(type))
108
117
  {
118
+ /// for (2) i = 1, arrType: [10 x i8], type2 = i8
109
119
  type2 = arrType->getTypeOfElement();
110
120
  }
111
121
  else if (const SVFPointerType* ptrType = SVFUtil::dyn_cast<SVFPointerType>(type))
112
122
  {
123
+ /// for (1) i = 0, ptrType: %struct.DEST*, type2: %struct.DEST
124
+ /// for (2) i = 0, ptrType: [10 x i8]*, type2 = [10 x i8]
113
125
  type2 = ptrType->getPtrElementType();
114
126
  }
115
127
 
116
128
  const SVFConstantInt* op = SVFUtil::dyn_cast<SVFConstantInt>(value);
117
129
  if (const SVFStructType* structType = SVFUtil::dyn_cast<SVFStructType>(type))
118
130
  {
119
- type2 = structType->getTypeInfo()->getOriginalElemType(op->getSExtValue());
120
- totalConstOffset += type2->getLLVMByteSize();
131
+ /// for (1) structType: %struct.DEST
132
+ /// structField = 0, type2: int
133
+ /// structField = 1, type2: char[10]
134
+ /// structField = 2, type2: int[5]
135
+ for (u32_t structField = 0; structField < (u32_t)op->getSExtValue(); ++structField)
136
+ {
137
+ type2 = structType->getTypeInfo()->getOriginalElemType(structField);
138
+ totalConstOffset += type2->getLLVMByteSize();
139
+ }
121
140
  }
122
141
  else
123
142
  {
143
+ /// for (2) i = 0, op: 0, type: [10 x i8]*(Ptr), type2: [10 x i8](Arr)
144
+ /// i = 1, op: 8, type: [10 x i8](Arr), type2: i8
124
145
  totalConstOffset += op->getSExtValue() * type2->getLLVMByteSize();
125
146
  }
126
147
  }
@@ -138,9 +138,8 @@ void traverseOnSVFStmt(const ICFGNode* node)
138
138
  /*!
139
139
  * An example to query/collect all successor nodes from a ICFGNode (iNode) along control-flow graph (ICFG)
140
140
  */
141
- void traverseOnICFG(ICFG* icfg, const SVFInstruction* svfInst)
141
+ void traverseOnICFG(ICFG* icfg, const ICFGNode* iNode)
142
142
  {
143
- ICFGNode* iNode = icfg->getICFGNode(svfInst);
144
143
  FIFOWorkList<const ICFGNode*> worklist;
145
144
  Set<const ICFGNode*> visited;
146
145
  worklist.push(iNode);
@@ -154,7 +153,6 @@ void traverseOnICFG(ICFG* icfg, const SVFInstruction* svfInst)
154
153
  {
155
154
  ICFGEdge* edge = *it;
156
155
  ICFGNode* succNode = edge->getDstNode();
157
- traverseOnSVFStmt(succNode);
158
156
  if (visited.find(succNode) == visited.end())
159
157
  {
160
158
  visited.insert(succNode);
@@ -250,8 +248,13 @@ int main(int argc, char ** argv)
250
248
  /// Collect uses of an LLVM Value
251
249
  /// traverseOnVFG(svfg, value);
252
250
 
251
+
253
252
  /// Collect all successor nodes on ICFG
254
- /// traverseOnICFG(icfg, value);
253
+ for (const auto &it : *icfg)
254
+ {
255
+ const ICFGNode* node = it.second;
256
+ traverseOnICFG(icfg, node);
257
+ }
255
258
 
256
259
  // clean up memory
257
260
  delete vfg;