svf-tools 1.0.463 → 1.0.466
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.
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h.html +7 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +10 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +40 -39
- package/SVF-doxygen/html/html/Options_8h_source.html +41 -40
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp.html +86 -0
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +125 -0
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +48 -43
- package/SVF-doxygen/html/html/SVFG_8h_source.html +41 -38
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +55 -54
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +90 -64
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +91 -88
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +299 -113
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +100 -97
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +18 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -0
- package/SVF-doxygen/html/html/files.html +4 -3
- package/SVF-doxygen/html/html/functions_c.html +5 -9
- package/SVF-doxygen/html/html/functions_func_g.html +7 -4
- package/SVF-doxygen/html/html/functions_func_r.html +7 -4
- package/SVF-doxygen/html/html/functions_func_w.html +1 -0
- package/SVF-doxygen/html/html/functions_g.html +10 -10
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +17 -17
- package/SVF-doxygen/html/html/functions_p.html +10 -10
- package/SVF-doxygen/html/html/functions_r.html +9 -3
- package/SVF-doxygen/html/html/functions_s.html +14 -14
- package/SVF-doxygen/html/html/functions_t.html +4 -4
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_r.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_w.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +4 -0
- package/SVF-doxygen/html/html/globals_s.html +1 -3
- package/SVF-doxygen/html/html/namespaceSVF.html +40 -1
- package/SVF-doxygen/html/html/namespacemembers_o.html +1 -1
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_12.js +5 -3
- package/SVF-doxygen/html/html/search/all_13.js +13 -12
- package/SVF-doxygen/html/html/search/all_14.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_17.js +2 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +2 -2
- package/SVF-doxygen/html/html/search/all_e.js +5 -5
- package/SVF-doxygen/html/html/search/all_f.js +4 -4
- package/SVF-doxygen/html/html/search/files_d.js +1 -0
- package/SVF-doxygen/html/html/search/functions_14.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -0
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +1 -0
- package/SVF-doxygen/html/html/search/variables_12.js +1 -0
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_17.js +2 -1
- package/SVF-doxygen/html/html/search/variables_7.js +0 -1
- package/SVF-doxygen/html/html/search/variables_e.js +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +20 -20
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
- package/include/Graphs/SVFG.h +4 -0
- package/include/MSSA/MSSAMuChi.h +1 -0
- package/include/Util/Options.h +3 -3
- package/lib/Graphs/SVFG.cpp +31 -27
- package/lib/Graphs/SVFGReadWrite.cpp +478 -0
- package/lib/MSSA/MemRegion.cpp +7 -0
- package/lib/Util/Options.cpp +11 -8
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
6
|
+
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/lib/Graphs/SVFGReadWrite.cpp File Reference</title>
|
|
9
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
10
|
+
<script type="text/javascript" src="jquery.js"></script>
|
|
11
|
+
<script type="text/javascript" src="dynsections.js"></script>
|
|
12
|
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
13
|
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
14
|
+
<script type="text/javascript" src="search/search.js"></script>
|
|
15
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
19
|
+
<div id="titlearea">
|
|
20
|
+
<table cellspacing="0" cellpadding="0">
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr style="height: 56px;">
|
|
23
|
+
<td id="projectalign" style="padding-left: 0.5em;">
|
|
24
|
+
<div id="projectname">Static Value-Flow Analysis
|
|
25
|
+
</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- end header part -->
|
|
32
|
+
<!-- Generated by Doxygen 1.8.13 -->
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
35
|
+
</script>
|
|
36
|
+
<script type="text/javascript" src="menudata.js"></script>
|
|
37
|
+
<script type="text/javascript" src="menu.js"></script>
|
|
38
|
+
<script type="text/javascript">
|
|
39
|
+
$(function() {
|
|
40
|
+
initMenu('',true,false,'search.php','Search');
|
|
41
|
+
$(document).ready(function() { init_search(); });
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
<div id="main-nav"></div>
|
|
45
|
+
<!-- window showing the filter options -->
|
|
46
|
+
<div id="MSearchSelectWindow"
|
|
47
|
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
48
|
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
49
|
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- iframe showing the search results (closed by default) -->
|
|
53
|
+
<div id="MSearchResultsWindow">
|
|
54
|
+
<iframe src="javascript:void(0)" frameborder="0"
|
|
55
|
+
name="MSearchResults" id="MSearchResults">
|
|
56
|
+
</iframe>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="nav-path" class="navpath">
|
|
60
|
+
<ul>
|
|
61
|
+
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li><li class="navelem"><a class="el" href="dir_1870ebf480d659cc38d2dd7ac3aa8993.html">Graphs</a></li> </ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div><!-- top -->
|
|
64
|
+
<div class="header">
|
|
65
|
+
<div class="headertitle">
|
|
66
|
+
<div class="title">SVFGReadWrite.cpp File Reference</div> </div>
|
|
67
|
+
</div><!--header-->
|
|
68
|
+
<div class="contents">
|
|
69
|
+
<div class="textblock"><code>#include "<a class="el" href="SVFModule_8h_source.html">Util/SVFModule.h</a>"</code><br />
|
|
70
|
+
<code>#include "<a class="el" href="LLVMUtil_8h_source.html">SVF-FE/LLVMUtil.h</a>"</code><br />
|
|
71
|
+
<code>#include "<a class="el" href="SVFG_8h_source.html">Graphs/SVFG.h</a>"</code><br />
|
|
72
|
+
<code>#include "<a class="el" href="SVFGStat_8h_source.html">Graphs/SVFGStat.h</a>"</code><br />
|
|
73
|
+
<code>#include "<a class="el" href="PointerAnalysisImpl_8h_source.html">MemoryModel/PointerAnalysisImpl.h</a>"</code><br />
|
|
74
|
+
<code>#include <fstream></code><br />
|
|
75
|
+
<code>#include "<a class="el" href="Options_8h_source.html">Util/Options.h</a>"</code><br />
|
|
76
|
+
</div>
|
|
77
|
+
<p><a href="SVFGReadWrite_8cpp_source.html">Go to the source code of this file.</a></p>
|
|
78
|
+
</div><!-- contents -->
|
|
79
|
+
<!-- start footer part -->
|
|
80
|
+
<hr class="footer"/><address class="footer"><small>
|
|
81
|
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
82
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
83
|
+
</a> 1.8.13
|
|
84
|
+
</small></address>
|
|
85
|
+
</body>
|
|
86
|
+
</html>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
6
|
+
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/lib/Graphs/SVFGReadWrite.cpp Source File</title>
|
|
9
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
10
|
+
<script type="text/javascript" src="jquery.js"></script>
|
|
11
|
+
<script type="text/javascript" src="dynsections.js"></script>
|
|
12
|
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
13
|
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
14
|
+
<script type="text/javascript" src="search/search.js"></script>
|
|
15
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
19
|
+
<div id="titlearea">
|
|
20
|
+
<table cellspacing="0" cellpadding="0">
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr style="height: 56px;">
|
|
23
|
+
<td id="projectalign" style="padding-left: 0.5em;">
|
|
24
|
+
<div id="projectname">Static Value-Flow Analysis
|
|
25
|
+
</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- end header part -->
|
|
32
|
+
<!-- Generated by Doxygen 1.8.13 -->
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
35
|
+
</script>
|
|
36
|
+
<script type="text/javascript" src="menudata.js"></script>
|
|
37
|
+
<script type="text/javascript" src="menu.js"></script>
|
|
38
|
+
<script type="text/javascript">
|
|
39
|
+
$(function() {
|
|
40
|
+
initMenu('',true,false,'search.php','Search');
|
|
41
|
+
$(document).ready(function() { init_search(); });
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
<div id="main-nav"></div>
|
|
45
|
+
<!-- window showing the filter options -->
|
|
46
|
+
<div id="MSearchSelectWindow"
|
|
47
|
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
48
|
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
49
|
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- iframe showing the search results (closed by default) -->
|
|
53
|
+
<div id="MSearchResultsWindow">
|
|
54
|
+
<iframe src="javascript:void(0)" frameborder="0"
|
|
55
|
+
name="MSearchResults" id="MSearchResults">
|
|
56
|
+
</iframe>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="nav-path" class="navpath">
|
|
60
|
+
<ul>
|
|
61
|
+
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li><li class="navelem"><a class="el" href="dir_1870ebf480d659cc38d2dd7ac3aa8993.html">Graphs</a></li> </ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div><!-- top -->
|
|
64
|
+
<div class="header">
|
|
65
|
+
<div class="headertitle">
|
|
66
|
+
<div class="title">SVFGReadWrite.cpp</div> </div>
|
|
67
|
+
</div><!--header-->
|
|
68
|
+
<div class="contents">
|
|
69
|
+
<a href="SVFGReadWrite_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SVFGReadWrite.cpp -- SVFG read & write-----------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * SVFGReadWrite.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: May 21, 2022</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Jeffrey Ma</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SVFGStat_8h.html">Graphs/SVFGStat.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <fstream></span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// Format of file</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// __Nodes__</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// SVFGNodeID: <id> >= <node type> >= MVER: {MRVERID: <id> MemRegion: pts{<pts> } MRVERSION: <version> MSSADef: <version>, pts{<pts> }} >= ICFGNodeID: <id></span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// __Edges__</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// srcSVFGNodeID: <id> => dstSVFGNodeID: <id> >= <edge type> | MVER: {MRVERID: <id> MemRegion: pts{<pts> } MRVERSION: <version> MSSADef: <version>, pts{<pts> }}</span></div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1"> 46</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1">SVFG::writeToFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>& filename)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Writing SVFG analysis to '"</span> << filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  error_code err;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (!f.good())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" error opening file for writing!\n"</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  f << <span class="stringliteral">"__Nodes__\n"</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// Iterate over nodes and write to file</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> it = begin(), eit = end(); it!=eit; ++it)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it->second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast<FormalINSVFGNode>(node))</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">//node</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"FormalINSVFGNode"</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  f << *formalIn->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << formalIn->getFunEntryNode()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast<FormalOUTSVFGNode>(node))</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">//node</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"FormalOUTSVFGNode"</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  f << *formalOut->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << formalOut->getFunExitNode()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast<ActualINSVFGNode>(node))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">//node</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"ActualINSVFGNode"</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  f << *actualIn->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << actualIn->getCallSite()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::dyn_cast<ActualOUTSVFGNode>(node))</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">//node</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"ActualOUTSVFGNode"</span> << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  f << *actualOut->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << actualOut->getCallSite()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast<MSSAPHISVFGNode>(node))</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">//node</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"PHISVFGNode"</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  unordered_map<u32_t,const MRVer*> opvers;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  it != eit; it++)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  opvers.insert(make_pair(it->first, it->second));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// opvers</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  f << *phiNode->getResVer();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  f << <span class="stringliteral">"} >= ICFGNodeID: "</span> << pag->getICFG()->getICFGNode(&(phiNode->getICFGNode()->getBB()->front()))->getId();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  f << <span class="stringliteral">" >= OPVers: {"</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> x: opvers)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = x.second;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  f << <span class="stringliteral">"{"</span> << *op << <span class="stringliteral">"}"</span> << <span class="stringliteral">","</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  f << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  f << <span class="stringliteral">"\n\n__Edges__\n"</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Iterate over edges and write to file</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> it = begin(), eit = end(); it!=eit; ++it)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it->second;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* loadNode = SVFUtil::dyn_cast<LoadSVFGNode>(node))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1SVFG.html#acdbe1c510273107b708935061b6c4127">MUSet</a>& muSet = mssa->getMUSet(SVFUtil::cast<LoadStmt>(loadNode->getPAGEdge()));</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadMU.html">LOADMU</a>* mu = SVFUtil::dyn_cast<LOADMU>(*it))</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = getDef(mu->getMRVer());</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= LoadNode | MVER: {"</span><< *mu->getMRVer() << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* storeNode = SVFUtil::dyn_cast<StoreSVFGNode>(node))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1SVFG.html#a8843ab4a4608f7f5f46f68ad31314c07">CHISet</a>& chiSet = mssa->getCHISet(SVFUtil::cast<StoreStmt>(storeNode->getPAGEdge()));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreCHI.html">STORECHI</a>* chi = SVFUtil::dyn_cast<STORECHI>(*it))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = getDef(chi->getOpVer());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= StoreNode | MVER: {"</span><< *chi->getOpVer() << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast<FormalINSVFGNode>(node))</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  mssa->getPTA()->getPTACallGraph()->getDirCallSitesInvokingCallee(formalIn->getFun(),callInstSet);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span>(!mssa->hasMU(cs))</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classSVF_1_1SVFG.html#aa9f520779475e4783eccc45c460e346a">ActualINSVFGNodeSet</a>& actualIns = getActualINSVFGNodes(cs);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">for</span>(ActualINSVFGNodeSet::iterator ait = actualIns.begin(), aeit = actualIns.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast<ActualINSVFGNode>(getSVFGNode(*ait));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << actualIn-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" >= FormalINSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast<FormalOUTSVFGNode>(node))</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  mssa->getPTA()->getPTACallGraph()->getDirCallSitesInvokingCallee(formalOut->getFun(),callInstSet);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span>(!mssa->hasCHI(cs))</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="classSVF_1_1SVFG.html#a2f6ed8a9f14657abc1e2a89247a84b99">ActualOUTSVFGNodeSet</a>& actualOuts = getActualOUTSVFGNodes(cs);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">for</span>(ActualOUTSVFGNodeSet::iterator ait = actualOuts.begin(), aeit = actualOuts.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast<ActualOUTSVFGNode>(getSVFGNode(*ait));</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << actualOut-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" >= FormalOUTSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = getDef(formalOut->getMRVer());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= FormalOUTSVFGNode | intra"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast<ActualINSVFGNode>(node))</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = getDef(actualIn->getMRVer());</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= ActualINSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast<MSSAPHISVFGNode>(node))</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  it != eit; it++)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = it->second;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = getDef(op);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= PHISVFGNode | MVER: {"</span><< *op << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  f.close();</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858"> 205</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858">SVFG::readFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>& filename)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Loading SVFG analysis results from '"</span> << filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  ifstream <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>(filename.c_str());</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (!<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.is_open())</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" error opening file for reading!\n"</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a2bdfa37167b5496629e5cae62705d5f2">PAGEdge::PAGEdgeSetTy</a>& stores = getPAGEdgeSet(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">PAGEdge::Store</a>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::cast<StoreStmt>(*iter);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* sNode = getStmtVFGNode(store);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">for</span>(CHISet::iterator pi = mssa->getCHISet(store).begin(), epi = mssa->getCHISet(store).end(); pi!=epi; ++pi)</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  setDef((*pi)->getResVer(),sNode);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">//outer loop through each line in the file</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// add nodes</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  stat->ATVFNodeStart();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">while</span> (<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.good())</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  getline(<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>, line);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (line.find(<span class="stringliteral">"__Edges__"</span>) != std::string::npos)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  std::string s = line;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  std::string delimiter = <span class="stringliteral">" >= "</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordtype">int</span> index = 0;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">//implement delimiter to split string using ">="</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordtype">size_t</span> next = 0;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordtype">size_t</span> outer_last = 0;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordtype">size_t</span> nextTemp; <span class="comment">//size_t lastTemp;</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = 0;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">string</span> type;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordtype">string</span> MR;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordtype">string</span> basicBlock;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordtype">string</span> opVer;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">//inner loop through to get each element in the line</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">while</span> ((next = s.find(delimiter, last)) != string::npos)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  temp = s.substr(last, next-last);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  last = next + 4;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  outer_last = next + 4;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span>(index == 0)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  nextTemp = temp.find(<span class="stringliteral">"SVFGNodeID: "</span>) + 12;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordtype">id</span> = atoi(temp.substr(nextTemp).c_str());</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span>(index == 1)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  type = temp;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">if</span>(index > 1)</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">if</span>(index == 2)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  {</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  MR = temp;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span>(index == 3)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  basicBlock = temp;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  index++;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">if</span>(!MR.empty())</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  tempMRVer = getMRVERFromString(MR);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  tempMRVer = getMRVERFromString(<span class="stringliteral">""</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">//add nodes using the variables we extracted</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span>(type == <span class="stringliteral">"FormalINSVFGNode"</span>)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  outer_last = s.find(<span class="stringliteral">"ICFGNodeID: "</span>) + 12;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> FunID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  addFormalINSVFGNode(SVFUtil::dyn_cast<FunEntryICFGNode>(pag->getICFG()->getICFGNode(FunID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">"FormalOUTSVFGNode"</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  outer_last = s.find(<span class="stringliteral">"ICFGNodeID: "</span>) + 12;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> FunID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  addFormalOUTSVFGNode(SVFUtil::dyn_cast<FunExitICFGNode>(pag->getICFG()->getICFGNode(FunID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">"ActualINSVFGNode"</span>)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  outer_last = s.find(<span class="stringliteral">"ICFGNodeID: "</span>) + 12;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  addActualINSVFGNode(SVFUtil::dyn_cast<CallICFGNode>(pag->getICFG()->getICFGNode(CallSiteID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">"ActualOUTSVFGNode"</span>)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  outer_last = s.find(<span class="stringliteral">"ICFGNodeID: "</span>) + 12;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  addActualOUTSVFGNode(SVFUtil::dyn_cast<CallICFGNode>(pag->getICFG()->getICFGNode(CallSiteID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">"PHISVFGNode"</span>)</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  opVer = s.substr(outer_last);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  next = opVer.find(<span class="stringliteral">"{"</span>) + 1;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  last = opVer.find(<span class="stringliteral">",}"</span>);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  temp = opVer.substr(next, last);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<u32_t,const MRVer*></a> OPVers;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordtype">int</span> index = 0;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">while</span> ((next = temp.find(<span class="stringliteral">"{"</span>) + 1) != string::npos)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (temp == <span class="stringliteral">",}"</span>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  last = temp.find(<span class="stringliteral">"},"</span>);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordtype">string</span> temp1;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  temp1 = temp.substr(next, last-next);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempOPVer = getMRVERFromString(temp1);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  OPVers.insert(make_pair(index, tempOPVer));</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  temp = temp.substr(last + 1);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  index++;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  next = basicBlock.find(<span class="stringliteral">"ICFGNodeID: "</span>) + 12;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  temp = basicBlock.substr(next);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  addIntraMSSAPHISVFGNode(pag->getICFG()->getICFGNode(atoi(temp.c_str())), OPVers.begin(), OPVers.end(), tempMRVer, id);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">if</span> (totalVFGNode < <span class="keywordtype">id</span>)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  totalVFGNode = <span class="keywordtype">id</span> + 1;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  stat->ATVFNodeEnd();</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  stat->indVFEdgeStart();</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// Edges</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">while</span> (<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.good())</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  getline(<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>, line);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  std::string s = line;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  std::string delimiter = <span class="stringliteral">" >= "</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">// int index = 0;</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordtype">size_t</span> next = 0; <span class="comment">// size_t outer_last = 0;</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordtype">string</span> edge;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordtype">string</span> attributes;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  next = s.find(delimiter);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  edge = s.substr(0, next);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  attributes = s.substr(next + 4);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="comment">// extract nodeIDs for src and dst nodes</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  next = edge.find(<span class="stringliteral">"srcSVFGNodeID: "</span>) + 15;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  last = edge.find(<span class="stringliteral">" => "</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  src = atoi(edge.substr(next, last-next).c_str());</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  next = edge.find(<span class="stringliteral">"dstSVFGNodeID: "</span>) + 15;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  dst = atoi(edge.substr(next).c_str());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordtype">string</span> type;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordtype">string</span> attribute;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordflow">if</span> (attributes.find(<span class="stringliteral">" | "</span>) == string::npos)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  type = attributes;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  next = attributes.find(<span class="stringliteral">" | "</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  type = attributes.substr(0, next);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  attribute = attributes.substr(next + 3);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">if</span>(type == <span class="stringliteral">"FormalINSVFGNode"</span>)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::cast<FormalINSVFGNode>(getSVFGNode(src));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast<ActualINSVFGNode>(getSVFGNode(dst));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  addInterIndirectVFCallEdge(actualIn,formalIn, getCallSiteID(actualIn->getCallSite(), formalIn-><a class="code" href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">getFun</a>()));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">"FormalOUTSVFGNode"</span>)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::cast<FormalOUTSVFGNode>(getSVFGNode(src));</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">if</span> (attribute.find(<span class="stringliteral">"intra"</span>) != string::npos)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  addIntraIndirectVFEdge(dst, src, formalOut-><a class="code" href="classSVF_1_1FormalOUTSVFGNode.html#ad2e841a18b777220c2b13f38289d6168">getMRVer</a>()-><a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-><a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast<ActualOUTSVFGNode>(getSVFGNode(dst));</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  addInterIndirectVFRetEdge(formalOut,actualOut,getCallSiteID(actualOut-><a class="code" href="classSVF_1_1ActualOUTSVFGNode.html#a89cb274936513df411a75fb33a86702f">getCallSite</a>(), formalOut-><a class="code" href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">getFun</a>()));</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">"ActualINSVFGNode"</span>)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast<ActualINSVFGNode>(getSVFGNode(src));</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  addIntraIndirectVFEdge(dst,src, actualIn-><a class="code" href="classSVF_1_1ActualINSVFGNode.html#aa92b36228a6f42496984cfea32f3415c">getMRVer</a>()-><a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-><a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">"ActualOUTSVFGNode"</span>)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="comment">// There's no need to connect actual out node to its definition site in the same function.</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">"StoreNode"</span> || type == <span class="stringliteral">"LoadNode"</span> || type == <span class="stringliteral">"PHISVFGNode"</span>)</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  tempMRVer = getMRVERFromString(attribute);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  addIntraIndirectVFEdge(dst,src, tempMRVer-><a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-><a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  stat->indVFEdgeEnd();</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  connectFromGlobalToProgEntry();</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de"> 429</a></span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">SVFG::getMRVERFromString</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>& s)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">if</span>(s == <span class="stringliteral">""</span>)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordtype">size_t</span> next = 0;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* tempMemRegion;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>* tempDef;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="comment">//{create Memory Region object</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  next = s.find(<span class="stringliteral">"MemRegion: pts{"</span>) + 15;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  last = s.find(<span class="stringliteral">"} MRVERSION: "</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  temp = s.substr(next, last-next);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="comment">// convert string to PointsTo</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> dstPts;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordtype">string</span> point;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  stringstream ss(temp);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">while</span> (getline(ss, point, <span class="charliteral">' '</span>))</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  istringstream sss(point);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  sss >> obj;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  dstPts.set(obj);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  tempMemRegion = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(dstPts);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="comment">// create mssdef</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  next = s.find(<span class="stringliteral">"MSSADef: "</span>) + 9;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  last = s.find(<span class="stringliteral">"} >="</span>);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  temp = s.substr(next, last-next);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// convert string to deftype</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  istringstream ss1(temp.substr(0, temp.find(<span class="stringliteral">", "</span>)));</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordtype">int</span> obj1;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  ss1 >> obj1;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <a class="code" href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">MSSADEF::DEFTYPE</a> defType = <span class="keyword">static_cast<</span><a class="code" href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">MSSADEF::DEFTYPE</a><span class="keyword">></span>(obj1);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  tempDef = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>(defType, tempMemRegion);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// mrversion</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  next = s.find(<span class="stringliteral">"MRVERSION: "</span>) + 11;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  last = s.find(<span class="stringliteral">" MSSADef:"</span>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  temp = s.substr(next, last-next);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// convert mrversion to nodeid</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  istringstream ss2(temp);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj2;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  ss2 >> obj2;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="comment">// create mrver</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  tempMRVer = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>(tempMemRegion, obj2, tempDef);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">return</span> tempMRVer;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
|
|
70
|
+
<div class="ttc" id="classSVF_1_1ActualINSVFGNode_html_aa92b36228a6f42496984cfea32f3415c"><div class="ttname"><a href="classSVF_1_1ActualINSVFGNode.html#aa92b36228a6f42496984cfea32f3415c">SVF::ActualINSVFGNode::getMRVer</a></div><div class="ttdeci">const MRVer * getMRVer() const</div><div class="ttdoc">Ver. </div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00200">SVFGNode.h:200</a></div></div>
|
|
71
|
+
<div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00240">VFGNode.h:240</a></div></div>
|
|
72
|
+
<div class="ttc" id="classSVF_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#l00180">SVFStatements.h:180</a></div></div>
|
|
73
|
+
<div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
74
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_acdbe1c510273107b708935061b6c4127"><div class="ttname"><a href="classSVF_1_1SVFG.html#acdbe1c510273107b708935061b6c4127">SVF::SVFG::MUSet</a></div><div class="ttdeci">MemSSA::MUSet MUSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00086">SVFG.h:86</a></div></div>
|
|
75
|
+
<div class="ttc" id="classSVF_1_1StoreCHI_html"><div class="ttname"><a href="classSVF_1_1StoreCHI.html">SVF::StoreCHI</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00461">MSSAMuChi.h:461</a></div></div>
|
|
76
|
+
<div class="ttc" id="classSVF_1_1FormalOUTSVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalOUTSVFGNode.html">SVF::FormalOUTSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00138">SVFGNode.h:138</a></div></div>
|
|
77
|
+
<div class="ttc" id="classSVF_1_1ActualOUTSVFGNode_html_a89cb274936513df411a75fb33a86702f"><div class="ttname"><a href="classSVF_1_1ActualOUTSVFGNode.html#a89cb274936513df411a75fb33a86702f">SVF::ActualOUTSVFGNode::getCallSite</a></div><div class="ttdeci">const CallICFGNode * getCallSite() const</div><div class="ttdoc">Callsite. </div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00244">SVFGNode.h:244</a></div></div>
|
|
78
|
+
<div class="ttc" id="classSVF_1_1VFGNode_html_ab98e74dfd4756e70e3e3c5b7d5e5ae27"><div class="ttname"><a href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">SVF::VFGNode::getFun</a></div><div class="ttdeci">virtual const SVFFunction * getFun() const</div><div class="ttdoc">Get the function of this SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00084">VFGNode.h:84</a></div></div>
|
|
79
|
+
<div class="ttc" id="SVFG_8h_html"><div class="ttname"><a href="SVFG_8h.html">SVFG.h</a></div></div>
|
|
80
|
+
<div class="ttc" id="classSVF_1_1ActualOUTSVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualOUTSVFGNode.html">SVF::ActualOUTSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00229">SVFGNode.h:229</a></div></div>
|
|
81
|
+
<div class="ttc" id="classSVF_1_1MSSAPHISVFGNode_html"><div class="ttname"><a href="classSVF_1_1MSSAPHISVFGNode.html">SVF::MSSAPHISVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00276">SVFGNode.h:276</a></div></div>
|
|
82
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00109">SVFBasicTypes.h:109</a></div></div>
|
|
83
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_aa9f520779475e4783eccc45c460e346a"><div class="ttname"><a href="classSVF_1_1SVFG.html#aa9f520779475e4783eccc45c460e346a">SVF::SVFG::ActualINSVFGNodeSet</a></div><div class="ttdeci">NodeBS ActualINSVFGNodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00078">SVFG.h:78</a></div></div>
|
|
84
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_a910298ed854a6b88b9dae44181ca72de"><div class="ttname"><a href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">SVF::SVFG::getMRVERFromString</a></div><div class="ttdeci">virtual MRVer * getMRVERFromString(const std::string &input)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00429">SVFGReadWrite.cpp:429</a></div></div>
|
|
85
|
+
<div class="ttc" id="classSVF_1_1ActualINSVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualINSVFGNode.html">SVF::ActualINSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00180">SVFGNode.h:180</a></div></div>
|
|
86
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_a9da50b8f467066b478143af64f7c9858"><div class="ttname"><a href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858">SVF::SVFG::readFile</a></div><div class="ttdeci">virtual void readFile(const std::string &filename)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00205">SVFGReadWrite.cpp:205</a></div></div>
|
|
87
|
+
<div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_adbedb15ac0f9395c5264f087a63bad3b"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">SVF::PTACallGraphEdge::CallInstSet</a></div><div class="ttdeci">Set< const CallICFGNode * > CallInstSet</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00055">PTACallGraph.h:55</a></div></div>
|
|
88
|
+
<div class="ttc" id="classSVF_1_1MSSADEF_html"><div class="ttname"><a href="classSVF_1_1MSSADEF.html">SVF::MSSADEF</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00325">MSSAMuChi.h:325</a></div></div>
|
|
89
|
+
<div class="ttc" id="classSVF_1_1FormalOUTSVFGNode_html_ad2e841a18b777220c2b13f38289d6168"><div class="ttname"><a href="classSVF_1_1FormalOUTSVFGNode.html#ad2e841a18b777220c2b13f38289d6168">SVF::FormalOUTSVFGNode::getMRVer</a></div><div class="ttdeci">const MRVer * getMRVer() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00153">SVFGNode.h:153</a></div></div>
|
|
90
|
+
<div class="ttc" id="classSVF_1_1LoadMU_html"><div class="ttname"><a href="classSVF_1_1LoadMU.html">SVF::LoadMU</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00165">MSSAMuChi.h:165</a></div></div>
|
|
91
|
+
<div class="ttc" id="SVFGStat_8h_html"><div class="ttname"><a href="SVFGStat_8h.html">SVFGStat.h</a></div></div>
|
|
92
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
|
|
93
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_a7ce9ec638995467c211958262be08ee1"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1">SVF::SVFG::writeToFile</a></div><div class="ttdeci">virtual void writeToFile(const std::string &filename)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00046">SVFGReadWrite.cpp:46</a></div></div>
|
|
94
|
+
<div class="ttc" id="namespaceSVF_html_a03d88a0302bcd253387690f13f693f64"><div class="ttname"><a href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">SVF::CallSiteID</a></div><div class="ttdeci">unsigned CallSiteID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00092">SVFBasicTypes.h:92</a></div></div>
|
|
95
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
96
|
+
<div class="ttc" id="classSVF_1_1LoadVFGNode_html"><div class="ttname"><a href="classSVF_1_1LoadVFGNode.html">SVF::LoadVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00199">VFGNode.h:199</a></div></div>
|
|
97
|
+
<div class="ttc" id="PointerAnalysisImpl_8h_html"><div class="ttname"><a href="PointerAnalysisImpl_8h.html">PointerAnalysisImpl.h</a></div></div>
|
|
98
|
+
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
99
|
+
<div class="ttc" id="classSVF_1_1MRVer_html_a63bd0641be553860cc5f517634b65825"><div class="ttname"><a href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">SVF::MRVer::getMR</a></div><div class="ttdeci">const MemRegion * getMR() const</div><div class="ttdoc">Return the memory region. </div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00063">MSSAMuChi.h:63</a></div></div>
|
|
100
|
+
<div class="ttc" id="CFLGrammar_8txt_html_acc7b4cf736579c4d83be2316d5a9e5f2"><div class="ttname"><a href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a></div><div class="ttdeci">V Fbar V F</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00008">CFLGrammar.txt:8</a></div></div>
|
|
101
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_a2f6ed8a9f14657abc1e2a89247a84b99"><div class="ttname"><a href="classSVF_1_1SVFG.html#a2f6ed8a9f14657abc1e2a89247a84b99">SVF::SVFG::ActualOUTSVFGNodeSet</a></div><div class="ttdeci">NodeBS ActualOUTSVFGNodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00079">SVFG.h:79</a></div></div>
|
|
102
|
+
<div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00363">ICFGNode.h:363</a></div></div>
|
|
103
|
+
<div class="ttc" id="classSVF_1_1MemRegion_html_a1e5befaa1a46943e101b33adaf141ca1"><div class="ttname"><a href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">SVF::MemRegion::getPointsTo</a></div><div class="ttdeci">const NodeBS & getPointsTo() const</div><div class="ttdoc">Return points-to. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00079">MemRegion.h:79</a></div></div>
|
|
104
|
+
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
|
|
105
|
+
<div class="ttc" id="classSVF_1_1MSSADEF_html_a32682e20c9c08d2bdd5abc62ea17af18"><div class="ttname"><a href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">SVF::MSSADEF::DEFTYPE</a></div><div class="ttdeci">DEFTYPE</div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00329">MSSAMuChi.h:329</a></div></div>
|
|
106
|
+
<div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVF::SVFStmt::Store</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
|
|
107
|
+
<div class="ttc" id="classSVF_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#l00169">GenericGraph.h:169</a></div></div>
|
|
108
|
+
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
|
|
109
|
+
<div class="ttc" id="classSVF_1_1StmtVFGNode_html"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html">SVF::StmtVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00116">VFGNode.h:116</a></div></div>
|
|
110
|
+
<div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
|
|
111
|
+
<div class="ttc" id="classSVF_1_1StoreStmt_html"><div class="ttname"><a href="classSVF_1_1StoreStmt.html">SVF::StoreStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00341">SVFStatements.h:341</a></div></div>
|
|
112
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_a8843ab4a4608f7f5f46f68ad31314c07"><div class="ttname"><a href="classSVF_1_1SVFG.html#a8843ab4a4608f7f5f46f68ad31314c07">SVF::SVFG::CHISet</a></div><div class="ttdeci">MemSSA::CHISet CHISet</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00087">SVFG.h:87</a></div></div>
|
|
113
|
+
<div class="ttc" id="classSVF_1_1MemRegion_html"><div class="ttname"><a href="classSVF_1_1MemRegion.html">SVF::MemRegion</a></div><div class="ttdoc">Memory Region class. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00051">MemRegion.h:51</a></div></div>
|
|
114
|
+
<div class="ttc" id="classSVF_1_1FormalINSVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalINSVFGNode.html">SVF::FormalINSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00093">SVFGNode.h:93</a></div></div>
|
|
115
|
+
<div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|
|
116
|
+
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
|
|
117
|
+
</div><!-- fragment --></div><!-- contents -->
|
|
118
|
+
<!-- start footer part -->
|
|
119
|
+
<hr class="footer"/><address class="footer"><small>
|
|
120
|
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
121
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
122
|
+
</a> 1.8.13
|
|
123
|
+
</small></address>
|
|
124
|
+
</body>
|
|
125
|
+
</html>
|