svf-tools 1.0.835 → 1.0.837

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.
@@ -123,226 +123,235 @@ $(function() {
123
123
  <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
124
124
  <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
125
125
  <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
126
- <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a3c98f0c5f07109f9da0a8a897aa51d18"> 62</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AccessPath.html#a3c98f0c5f07109f9da0a8a897aa51d18">AccessPath::getElementNum</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)<span class="keyword"> const</span></div>
127
- <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"></span>{</div>
128
- <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; assert(!SVFUtil::isa&lt;SVFPointerType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>) &amp;&amp; <span class="stringliteral">&quot;can&#39;t be pointer type&quot;</span>);</div>
129
- <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
130
- <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFArrayType, SVFStructType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
131
- <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
132
- <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a811a3489df0f793c7a5482d31d470a4c">getNumOfFlattenElements</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
133
- <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
134
- <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;isSingleValueType() || SVFUtil::isa&lt;SVFFunctionType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
135
- <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
136
- <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> 1;</div>
137
- <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
138
- <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">else</span></div>
139
- <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
140
- <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;GepIter Type&quot;</span> &lt;&lt; *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
141
- <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;What other types for this gep?&quot;</span>);</div>
142
- <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; abort();</div>
126
+ <div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a3c98f0c5f07109f9da0a8a897aa51d18"> 63</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AccessPath.html#a3c98f0c5f07109f9da0a8a897aa51d18">AccessPath::getElementNum</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)<span class="keyword"> const</span></div>
127
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword"></span>{</div>
128
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFArrayType, SVFStructType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
129
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
130
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a811a3489df0f793c7a5482d31d470a4c">getNumOfFlattenElements</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div>
131
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
132
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;isPointerTy())</div>
133
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
134
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// if type is a pointer, should be like:</span></div>
135
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// %2 = getelementptr inbounds i32*, i32** %1, ...</span></div>
136
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// where gepSrcPointee is of pointer type (i32*).</span></div>
137
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// this can be transformed to:</span></div>
138
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// %2 = getelementptr inbounds [N x i32], [N x i32]* %1, ...</span></div>
139
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// However, we do not know N without context information. int** implies non-contiguous blocks of memory</span></div>
140
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// In this case, we conservatively return max field limit</span></div>
141
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
143
142
  <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
144
- <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div>
145
- <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
146
- <div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a43dc770c4458c6ac58c591974b93fc57"> 89</a></span>&#160;<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1AccessPath.html#a43dc770c4458c6ac58c591974b93fc57">AccessPath::computeConstantByteOffset</a>()<span class="keyword"> const</span></div>
147
- <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword"></span>{</div>
148
- <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; assert(isConstantOffset() &amp;&amp; <span class="stringliteral">&quot;not a constant offset&quot;</span>);</div>
149
- <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
150
- <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalConstOffset = 0;</div>
151
- <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = idxOperandPairs.size() - 1; i &gt;= 0; i--)</div>
152
- <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
153
- <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// (2) %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %b, i64 0, i64 8</span></div>
154
- <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* value = idxOperandPairs[i].first-&gt;getValue();</div>
155
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = idxOperandPairs[i].second;</div>
156
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;this GepStmt comes from ExternalAPI cannot call this api&quot;</span>);</div>
157
- <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* type2 = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
158
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>* arrType = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
159
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
160
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; type2 = arrType-&gt;getTypeOfElement();</div>
161
- <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
162
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
163
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
164
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; type2 = gepSrcPointeeType();</div>
165
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
166
- <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
167
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>* op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(value);</div>
168
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>* structType = SVFUtil::dyn_cast&lt;SVFStructType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
169
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
170
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> structField = 0; structField &lt; (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>(); ++structField)</div>
171
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
172
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> flattenIdx = structType-&gt;getTypeInfo()-&gt;getFlattenedFieldIdxVec()[structField];</div>
173
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; type2 = structType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>()-&gt;<a class="code" href="classSVF_1_1StInfo.html#a055697f565cb9d73b41110090fe50159">getOriginalElemType</a>(flattenIdx);</div>
174
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; totalConstOffset += type2-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
175
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
176
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
177
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">else</span></div>
178
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
179
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; totalConstOffset += op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>() * type2-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
180
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
181
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
182
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; totalConstOffset = <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() &gt; totalConstOffset? totalConstOffset: <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
183
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> totalConstOffset;</div>
184
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div>
185
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
186
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">// e.g. idxOperandVar: i32 2 idxOperandType: %struct.Student = type { i32, [i8 x 12], i32 }</span></div>
187
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// we accumulate field 0 (i32) byte size (4 Bytes), and field 1 ([i8x12]) byte size (12 Bytes)</span></div>
188
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment">// then the return byte offset is 16 Bytes.</span></div>
189
- <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a1f279344b4061838d7b3498631bc907c"> 154</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AccessPath.html#a1f279344b4061838d7b3498631bc907c">AccessPath::getStructFieldOffset</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* idxOperandVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>* idxOperandType)<span class="keyword"> const</span></div>
190
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword"></span>{</div>
191
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* idxValue = idxOperandVar-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>();</div>
192
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> structByteOffset = 0;</div>
193
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a> *op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(idxValue))</div>
194
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div>
195
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> structField = 0; structField &lt; (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)op-&gt;getSExtValue(); ++structField)</div>
196
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
197
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> flattenIdx = idxOperandType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>()-&gt;<a class="code" href="classSVF_1_1StInfo.html#aaf05447c20c9f90eea64ab6e88d6ab05">getFlattenedFieldIdxVec</a>()[structField];</div>
198
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; structByteOffset += idxOperandType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>()-&gt;<a class="code" href="classSVF_1_1StInfo.html#a055697f565cb9d73b41110090fe50159">getOriginalElemType</a>(flattenIdx)-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
199
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
200
- <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> structByteOffset;</div>
201
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div>
202
- <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">else</span></div>
203
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;struct type can only pair with constant idx&quot;</span>);</div>
204
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div>
205
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
206
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
207
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">// struct inner{ int rollNumber; float percentage;};</span></div>
208
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">// struct Student { struct inner rollNumber; char studentName[10][3];}</span></div>
209
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment">// char x = studentRecord[1].studentName[3][2];</span></div>
210
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
211
- <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651"> 199</a></span>&#160;<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651">AccessPath::computeConstantOffset</a>()<span class="keyword"> const</span></div>
212
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keyword"></span>{</div>
213
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
214
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; assert(isConstantOffset() &amp;&amp; <span class="stringliteral">&quot;not a constant offset&quot;</span>);</div>
215
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
216
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalConstOffset = 0;</div>
217
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">//After the model-const and model-array options are turned on,</span></div>
218
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// the gepstmt offset generated by the array on the global</span></div>
219
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// node will be saved in getConstantStructFldIdx</span></div>
220
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (idxOperandPairs.size() == 0)</div>
221
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> getConstantStructFldIdx();</div>
222
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = idxOperandPairs.size() - 1; i &gt;= 0; i--)</div>
223
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
224
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* value = idxOperandPairs[i].first-&gt;getValue();</div>
225
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = idxOperandPairs[i].second;</div>
226
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>* op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(value);</div>
227
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; assert(op &amp;&amp; <span class="stringliteral">&quot;not a constant offset?&quot;</span>);</div>
228
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>==<span class="keyword">nullptr</span>)</div>
229
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div>
230
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; totalConstOffset += op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>();</div>
231
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">continue</span>;</div>
232
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
233
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
234
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;SVFPointerType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
235
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; totalConstOffset += op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>() * getElementNum(gepPointeeType);</div>
236
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">else</span></div>
237
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div>
238
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>();</div>
239
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> &gt;= 0)</div>
240
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
241
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">const</span> std::vector&lt;u32_t&gt;&amp; so = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a5dc699aa85fe879eb4b2c9109cf3030d">getTypeInfo</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)-&gt;<a class="code" href="classSVF_1_1StInfo.html#a55e5fd85f232c1867c5c6a73646d53eb">getFlattenedElemIdxVec</a>();</div>
242
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// if offset is larger than the size of getFlattenedElemIdxVec (overflow)</span></div>
243
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// set offset the last index of getFlattenedElemIdxVec to avoid assertion</span></div>
244
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> &gt;= (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a>)so.size())</div>
245
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div>
246
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;It is overflow access, we access the last idx\n&quot;</span>;</div>
247
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = so.size() - 1;</div>
248
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
249
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">else</span></div>
250
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div>
251
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
252
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
253
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
254
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> flattenOffset =</div>
255
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">getFlattenedElemIdx</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>,</div>
256
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
257
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; totalConstOffset += flattenOffset;</div>
258
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
259
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
260
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
261
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> totalConstOffset;</div>
262
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</div>
263
- <div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf"> 254</a></span>&#160;<a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">AccessPath::computeAllLocations</a>()<span class="keyword"> const</span></div>
264
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="keyword"></span>{</div>
265
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> result;</div>
266
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; result.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getConstantStructFldIdx());</div>
267
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> result;</div>
268
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;}</div>
269
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
270
- <div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a6591b6092a829b0c874754b649087aa2"> 261</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> <a class="code" href="classSVF_1_1AccessPath.html#a6591b6092a829b0c874754b649087aa2">AccessPath::operator+</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; rhs)<span class="keyword"> const</span></div>
271
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="keyword"></span>{</div>
272
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; assert(gepPointeeType == rhs.<a class="code" href="classSVF_1_1AccessPath.html#a7b4921dea37246f0f08dffa7db384a61">gepSrcPointeeType</a>() &amp;&amp; <span class="stringliteral">&quot;source element type not match&quot;</span>);</div>
273
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(rhs);</div>
274
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">fldIdx</a> += getConstantStructFldIdx();</div>
275
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a> : ap.<a class="code" href="classSVF_1_1AccessPath.html#a586c71842e3e4487921aa3384ce9d025">getIdxOperandPairVec</a>())</div>
276
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">addOffsetVarAndGepTypePair</a>(<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.first, <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.second);</div>
277
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
278
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">return</span> ap;</div>
279
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;}</div>
280
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; </div>
281
- <div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#ae0f38a5f473af89678db2755667c3421"> 272</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AccessPath.html#ae0f38a5f473af89678db2755667c3421">AccessPath::operator&lt; </a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; rhs)<span class="keyword"> const</span></div>
282
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="keyword"></span>{</div>
283
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (fldIdx != rhs.<a class="code" href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">fldIdx</a>)</div>
284
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> (fldIdx &lt; rhs.<a class="code" href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">fldIdx</a>);</div>
285
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">else</span></div>
286
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div>
287
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html#a04ca154a70f40999a6a28c505bfd942d">IdxOperandPairs</a>&amp; pairVec = getIdxOperandPairVec();</div>
288
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html#a04ca154a70f40999a6a28c505bfd942d">IdxOperandPairs</a>&amp; rhsPairVec = rhs.<a class="code" href="classSVF_1_1AccessPath.html#a586c71842e3e4487921aa3384ce9d025">getIdxOperandPairVec</a>();</div>
289
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (pairVec.size() != rhsPairVec.size())</div>
290
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> (pairVec.size() &lt; rhsPairVec.size());</div>
291
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">else</span></div>
292
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div>
293
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; IdxOperandPairs::const_iterator it = pairVec.begin();</div>
294
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; IdxOperandPairs::const_iterator rhsIt = rhsPairVec.begin();</div>
295
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">for</span> (; it != pairVec.end() &amp;&amp; rhsIt != rhsPairVec.end(); ++it, ++rhsIt)</div>
296
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div>
297
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> (*it) &lt; (*rhsIt);</div>
298
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
299
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
300
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
301
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
302
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
303
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;}</div>
304
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
305
- <div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a98b8b3428479259fbafd9e527ecc09bb"> 296</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html#aabb6c9600fac408f36b9fde013597245">SVF::AccessPath::LSRelation</a> <a class="code" href="classSVF_1_1AccessPath.html#a98b8b3428479259fbafd9e527ecc09bb">AccessPath::checkRelation</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; LHS, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; RHS)</div>
306
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;{</div>
307
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> lhsLocations = LHS.<a class="code" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">computeAllLocations</a>();</div>
308
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> rhsLocations = RHS.<a class="code" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">computeAllLocations</a>();</div>
309
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (lhsLocations.<a class="code" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">intersects</a>(rhsLocations))</div>
310
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div>
311
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (lhsLocations == rhsLocations)</div>
312
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> Same;</div>
313
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhsLocations.<a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(rhsLocations))</div>
314
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> Superset;</div>
315
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhsLocations.<a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(lhsLocations))</div>
316
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> Subset;</div>
317
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span></div>
318
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> Overlap;</div>
319
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
320
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">else</span></div>
321
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
322
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">return</span> NonOverlap;</div>
323
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
324
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div>
325
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
326
- <div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a4519477605a58d5821d05951a88abcd0"> 318</a></span>&#160;<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1AccessPath.html#a4519477605a58d5821d05951a88abcd0">AccessPath::dump</a>()<span class="keyword"> const</span></div>
327
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="keyword"></span>{</div>
328
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
329
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; std::stringstream rawstr(str);</div>
330
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; </div>
331
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;AccessPath\tField_Index: &quot;</span> &lt;&lt; getConstantStructFldIdx();</div>
332
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;,\tNum-Stride: {&quot;</span>;</div>
333
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html#a04ca154a70f40999a6a28c505bfd942d">IdxOperandPairs</a>&amp; vec = getIdxOperandPairVec();</div>
334
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; IdxOperandPairs::const_iterator it = vec.begin();</div>
335
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; IdxOperandPairs::const_iterator eit = vec.end();</div>
336
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">for</span> (; it != eit; ++it)</div>
337
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
338
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* ty = it-&gt;second;</div>
339
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; (Svf var: &quot;</span> &lt;&lt; it-&gt;first-&gt;<a class="code" href="classSVF_1_1SVFType.html#a9035ac13134de4647d63507cd80ca3d6">toString</a>() &lt;&lt; <span class="stringliteral">&quot;, Iter type: &quot;</span> &lt;&lt; *ty &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
340
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
341
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; }\n&quot;</span>;</div>
342
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
343
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div>
143
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>-&gt;isSingleValueType() || SVFUtil::isa&lt;SVFFunctionType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
144
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
145
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> 1;</div>
146
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
147
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span></div>
148
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
149
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;GepIter Type&quot;</span> &lt;&lt; *<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
150
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;What other types for this gep?&quot;</span>);</div>
151
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; abort();</div>
152
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
153
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
154
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
155
+ <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a43dc770c4458c6ac58c591974b93fc57"> 99</a></span>&#160;<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1AccessPath.html#a43dc770c4458c6ac58c591974b93fc57">AccessPath::computeConstantByteOffset</a>()<span class="keyword"> const</span></div>
156
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keyword"></span>{</div>
157
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; assert(isConstantOffset() &amp;&amp; <span class="stringliteral">&quot;not a constant offset&quot;</span>);</div>
158
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
159
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalConstOffset = 0;</div>
160
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = idxOperandPairs.size() - 1; i &gt;= 0; i--)</div>
161
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
162
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// (2) %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %b, i64 0, i64 8</span></div>
163
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* value = idxOperandPairs[i].first-&gt;getValue();</div>
164
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = idxOperandPairs[i].second;</div>
165
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; assert(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> &amp;&amp; <span class="stringliteral">&quot;this GepStmt comes from ExternalAPI cannot call this api&quot;</span>);</div>
166
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* type2 = <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div>
167
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>* arrType = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
168
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div>
169
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; type2 = arrType-&gt;getTypeOfElement();</div>
170
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
171
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
172
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
173
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; type2 = gepSrcPointeeType();</div>
174
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
175
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
176
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>* op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(value);</div>
177
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>* structType = SVFUtil::dyn_cast&lt;SVFStructType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
178
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div>
179
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> structField = 0; structField &lt; (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>(); ++structField)</div>
180
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
181
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> flattenIdx = structType-&gt;getTypeInfo()-&gt;getFlattenedFieldIdxVec()[structField];</div>
182
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; type2 = structType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>()-&gt;<a class="code" href="classSVF_1_1StInfo.html#a055697f565cb9d73b41110090fe50159">getOriginalElemType</a>(flattenIdx);</div>
183
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; totalConstOffset += type2-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
184
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
185
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
186
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">else</span></div>
187
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
188
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; totalConstOffset += op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>() * type2-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
189
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
190
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div>
191
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; totalConstOffset = <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() &gt; totalConstOffset? totalConstOffset: <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
192
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> totalConstOffset;</div>
193
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div>
194
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
195
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment">// e.g. idxOperandVar: i32 2 idxOperandType: %struct.Student = type { i32, [i8 x 12], i32 }</span></div>
196
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">// we accumulate field 0 (i32) byte size (4 Bytes), and field 1 ([i8x12]) byte size (12 Bytes)</span></div>
197
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// then the return byte offset is 16 Bytes.</span></div>
198
+ <div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a1f279344b4061838d7b3498631bc907c"> 164</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AccessPath.html#a1f279344b4061838d7b3498631bc907c">AccessPath::getStructFieldOffset</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* idxOperandVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>* idxOperandType)<span class="keyword"> const</span></div>
199
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="keyword"></span>{</div>
200
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* idxValue = idxOperandVar-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>();</div>
201
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> structByteOffset = 0;</div>
202
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a> *op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(idxValue))</div>
203
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
204
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> structField = 0; structField &lt; (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)op-&gt;getSExtValue(); ++structField)</div>
205
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div>
206
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> flattenIdx = idxOperandType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>()-&gt;<a class="code" href="classSVF_1_1StInfo.html#aaf05447c20c9f90eea64ab6e88d6ab05">getFlattenedFieldIdxVec</a>()[structField];</div>
207
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; structByteOffset += idxOperandType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">getTypeInfo</a>()-&gt;<a class="code" href="classSVF_1_1StInfo.html#a055697f565cb9d73b41110090fe50159">getOriginalElemType</a>(flattenIdx)-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
208
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
209
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> structByteOffset;</div>
210
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
211
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">else</span></div>
212
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;struct type can only pair with constant idx&quot;</span>);</div>
213
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;}</div>
214
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
215
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
216
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment">// struct inner{ int rollNumber; float percentage;};</span></div>
217
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment">// struct Student { struct inner rollNumber; char studentName[10][3];}</span></div>
218
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment">// char x = studentRecord[1].studentName[3][2];</span></div>
219
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
220
+ <div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651"> 209</a></span>&#160;<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651">AccessPath::computeConstantOffset</a>()<span class="keyword"> const</span></div>
221
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword"></span>{</div>
222
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
223
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; assert(isConstantOffset() &amp;&amp; <span class="stringliteral">&quot;not a constant offset&quot;</span>);</div>
224
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
225
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalConstOffset = 0;</div>
226
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">//After the model-const and model-array options are turned on,</span></div>
227
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// the gepstmt offset generated by the array on the global</span></div>
228
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// node will be saved in getConstantStructFldIdx</span></div>
229
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (idxOperandPairs.size() == 0)</div>
230
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> getConstantStructFldIdx();</div>
231
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = idxOperandPairs.size() - 1; i &gt;= 0; i--)</div>
232
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div>
233
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* value = idxOperandPairs[i].first-&gt;getValue();</div>
234
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = idxOperandPairs[i].second;</div>
235
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>* op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(value);</div>
236
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; assert(op &amp;&amp; <span class="stringliteral">&quot;not a constant offset?&quot;</span>);</div>
237
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>==<span class="keyword">nullptr</span>)</div>
238
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
239
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; totalConstOffset += op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>();</div>
240
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">continue</span>;</div>
241
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
242
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; </div>
243
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;SVFPointerType&gt;(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>))</div>
244
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; totalConstOffset += op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>() * getElementNum(gepPointeeType);</div>
245
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">else</span></div>
246
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div>
247
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = op-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>();</div>
248
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> &gt;= 0)</div>
249
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div>
250
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">const</span> std::vector&lt;u32_t&gt;&amp; so = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a5dc699aa85fe879eb4b2c9109cf3030d">getTypeInfo</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)-&gt;<a class="code" href="classSVF_1_1StInfo.html#a55e5fd85f232c1867c5c6a73646d53eb">getFlattenedElemIdxVec</a>();</div>
251
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// if offset is larger than the size of getFlattenedElemIdxVec (overflow)</span></div>
252
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// set offset the last index of getFlattenedElemIdxVec to avoid assertion</span></div>
253
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> &gt;= (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a>)so.size())</div>
254
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div>
255
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;It is overflow access, we access the last idx\n&quot;</span>;</div>
256
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = so.size() - 1;</div>
257
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
258
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">else</span></div>
259
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; {</div>
260
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
261
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
262
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
263
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> flattenOffset =</div>
264
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">getFlattenedElemIdx</a>(<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>,</div>
265
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
266
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; totalConstOffset += flattenOffset;</div>
267
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
268
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
269
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div>
270
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> totalConstOffset;</div>
271
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;}</div>
272
+ <div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf"> 264</a></span>&#160;<a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">AccessPath::computeAllLocations</a>()<span class="keyword"> const</span></div>
273
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="keyword"></span>{</div>
274
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> result;</div>
275
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; result.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getConstantStructFldIdx());</div>
276
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> result;</div>
277
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div>
278
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
279
+ <div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a6591b6092a829b0c874754b649087aa2"> 271</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> <a class="code" href="classSVF_1_1AccessPath.html#a6591b6092a829b0c874754b649087aa2">AccessPath::operator+</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; rhs)<span class="keyword"> const</span></div>
280
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="keyword"></span>{</div>
281
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; assert(gepPointeeType == rhs.<a class="code" href="classSVF_1_1AccessPath.html#a7b4921dea37246f0f08dffa7db384a61">gepSrcPointeeType</a>() &amp;&amp; <span class="stringliteral">&quot;source element type not match&quot;</span>);</div>
282
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(rhs);</div>
283
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">fldIdx</a> += getConstantStructFldIdx();</div>
284
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a> : ap.<a class="code" href="classSVF_1_1AccessPath.html#a586c71842e3e4487921aa3384ce9d025">getIdxOperandPairVec</a>())</div>
285
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; ap.<a class="code" href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">addOffsetVarAndGepTypePair</a>(<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.first, <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.second);</div>
286
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
287
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span> ap;</div>
288
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;}</div>
289
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
290
+ <div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#ae0f38a5f473af89678db2755667c3421"> 282</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AccessPath.html#ae0f38a5f473af89678db2755667c3421">AccessPath::operator&lt; </a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; rhs)<span class="keyword"> const</span></div>
291
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="keyword"></span>{</div>
292
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (fldIdx != rhs.<a class="code" href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">fldIdx</a>)</div>
293
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> (fldIdx &lt; rhs.<a class="code" href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">fldIdx</a>);</div>
294
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">else</span></div>
295
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div>
296
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html#a04ca154a70f40999a6a28c505bfd942d">IdxOperandPairs</a>&amp; pairVec = getIdxOperandPairVec();</div>
297
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html#a04ca154a70f40999a6a28c505bfd942d">IdxOperandPairs</a>&amp; rhsPairVec = rhs.<a class="code" href="classSVF_1_1AccessPath.html#a586c71842e3e4487921aa3384ce9d025">getIdxOperandPairVec</a>();</div>
298
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (pairVec.size() != rhsPairVec.size())</div>
299
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> (pairVec.size() &lt; rhsPairVec.size());</div>
300
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span></div>
301
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
302
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; IdxOperandPairs::const_iterator it = pairVec.begin();</div>
303
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; IdxOperandPairs::const_iterator rhsIt = rhsPairVec.begin();</div>
304
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">for</span> (; it != pairVec.end() &amp;&amp; rhsIt != rhsPairVec.end(); ++it, ++rhsIt)</div>
305
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
306
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> (*it) &lt; (*rhsIt);</div>
307
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
308
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
309
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
310
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
311
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
312
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;}</div>
313
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
314
+ <div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a98b8b3428479259fbafd9e527ecc09bb"> 306</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html#aabb6c9600fac408f36b9fde013597245">SVF::AccessPath::LSRelation</a> <a class="code" href="classSVF_1_1AccessPath.html#a98b8b3428479259fbafd9e527ecc09bb">AccessPath::checkRelation</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; LHS, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; RHS)</div>
315
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;{</div>
316
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> lhsLocations = LHS.<a class="code" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">computeAllLocations</a>();</div>
317
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> rhsLocations = RHS.<a class="code" href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">computeAllLocations</a>();</div>
318
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">if</span> (lhsLocations.<a class="code" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">intersects</a>(rhsLocations))</div>
319
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div>
320
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span> (lhsLocations == rhsLocations)</div>
321
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">return</span> Same;</div>
322
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhsLocations.<a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(rhsLocations))</div>
323
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">return</span> Superset;</div>
324
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhsLocations.<a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(lhsLocations))</div>
325
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> Subset;</div>
326
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">else</span></div>
327
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> Overlap;</div>
328
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
329
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">else</span></div>
330
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
331
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> NonOverlap;</div>
332
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
333
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;}</div>
334
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
335
+ <div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1AccessPath.html#a4519477605a58d5821d05951a88abcd0"> 328</a></span>&#160;<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1AccessPath.html#a4519477605a58d5821d05951a88abcd0">AccessPath::dump</a>()<span class="keyword"> const</span></div>
336
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="keyword"></span>{</div>
337
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
338
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; std::stringstream rawstr(str);</div>
339
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; </div>
340
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;AccessPath\tField_Index: &quot;</span> &lt;&lt; getConstantStructFldIdx();</div>
341
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;,\tNum-Stride: {&quot;</span>;</div>
342
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html#a04ca154a70f40999a6a28c505bfd942d">IdxOperandPairs</a>&amp; vec = getIdxOperandPairVec();</div>
343
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; IdxOperandPairs::const_iterator it = vec.begin();</div>
344
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; IdxOperandPairs::const_iterator eit = vec.end();</div>
345
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">for</span> (; it != eit; ++it)</div>
346
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
347
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* ty = it-&gt;second;</div>
348
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; (Svf var: &quot;</span> &lt;&lt; it-&gt;first-&gt;<a class="code" href="classSVF_1_1SVFType.html#a9035ac13134de4647d63507cd80ca3d6">toString</a>() &lt;&lt; <span class="stringliteral">&quot;, Iter type: &quot;</span> &lt;&lt; *ty &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div>
349
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
350
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; }\n&quot;</span>;</div>
351
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div>
352
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div>
344
353
  </div><!-- fragment --></div><!-- contents -->
345
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a1f279344b4061838d7b3498631bc907c"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a1f279344b4061838d7b3498631bc907c">SVF::AccessPath::getStructFieldOffset</a></div><div class="ttdeci">u32_t getStructFieldOffset(const SVFVar *idxOperandVar, const SVFStructType *idxOperandType) const</div><div class="ttdoc">Return byte offset from the beginning of the structure to the field where it is located for struct ty...</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00154">AccessPath.cpp:154</a></div></div>
354
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a1f279344b4061838d7b3498631bc907c"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a1f279344b4061838d7b3498631bc907c">SVF::AccessPath::getStructFieldOffset</a></div><div class="ttdeci">u32_t getStructFieldOffset(const SVFVar *idxOperandVar, const SVFStructType *idxOperandType) const</div><div class="ttdoc">Return byte offset from the beginning of the structure to the field where it is located for struct ty...</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00164">AccessPath.cpp:164</a></div></div>
346
355
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
347
356
  <div class="ttc" id="aclassSVF_1_1SparseBitVector_html_a16756e0545fd3d50ab89f45a2e83bb79"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">SVF::SparseBitVector::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVector&lt; ElementSize &gt; *RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01031">SparseBitVector.h:1031</a></div></div>
348
357
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a95b8031f1e15d49c7d68628be1d05aae"><div class="ttname"><a href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">SVF::SVFType::getByteSize</a></div><div class="ttdeci">u32_t getByteSize() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00323">SVFType.h:323</a></div></div>
@@ -352,16 +361,16 @@ $(function() {
352
361
  <div class="ttc" id="anamespaceSVF_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="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
353
362
  <div class="ttc" id="aclassSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00747">SparseBitVector.h:747</a></div></div>
354
363
  <div class="ttc" id="aAccessPath_8h_html"><div class="ttname"><a href="AccessPath_8h.html">AccessPath.h</a></div></div>
355
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_ae0f38a5f473af89678db2755667c3421"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ae0f38a5f473af89678db2755667c3421">SVF::AccessPath::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const AccessPath &amp;rhs) const</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00272">AccessPath.cpp:272</a></div></div>
364
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_ae0f38a5f473af89678db2755667c3421"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ae0f38a5f473af89678db2755667c3421">SVF::AccessPath::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const AccessPath &amp;rhs) const</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00282">AccessPath.cpp:282</a></div></div>
356
365
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_a2358a8194b5e2c4bcbb5218dee7fcbcd"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">SVF::AccessPath::addOffsetVarAndGepTypePair</a></div><div class="ttdeci">bool addOffsetVarAndGepTypePair(const SVFVar *var, const SVFType *gepIterType)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00042">AccessPath.cpp:42</a></div></div>
357
366
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_ac2db6304ea5526fb446ae882983beeb0"><div class="ttname"><a href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">SVF::SVFVar::getValue</a></div><div class="ttdeci">const SVFValue * getValue() const</div><div class="ttdoc">Get/has methods of the components.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
358
367
  <div class="ttc" id="aclassSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00459">SparseBitVector.h:459</a></div></div>
359
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a76222b6571e46e8a8bd5c8c597c8ffaf"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">SVF::AccessPath::computeAllLocations</a></div><div class="ttdeci">NodeBS computeAllLocations() const</div><div class="ttdoc">Compute all possible locations according to offset and number-stride pairs.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00254">AccessPath.cpp:254</a></div></div>
360
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a3c98f0c5f07109f9da0a8a897aa51d18"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a3c98f0c5f07109f9da0a8a897aa51d18">SVF::AccessPath::getElementNum</a></div><div class="ttdeci">u32_t getElementNum(const SVFType *type) const</div><div class="ttdoc">Return element number of a type.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00062">AccessPath.cpp:62</a></div></div>
368
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a76222b6571e46e8a8bd5c8c597c8ffaf"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a76222b6571e46e8a8bd5c8c597c8ffaf">SVF::AccessPath::computeAllLocations</a></div><div class="ttdeci">NodeBS computeAllLocations() const</div><div class="ttdoc">Compute all possible locations according to offset and number-stride pairs.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00264">AccessPath.cpp:264</a></div></div>
369
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a3c98f0c5f07109f9da0a8a897aa51d18"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a3c98f0c5f07109f9da0a8a897aa51d18">SVF::AccessPath::getElementNum</a></div><div class="ttdeci">u32_t getElementNum(const SVFType *type) const</div><div class="ttdoc">Return element number of a type.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00063">AccessPath.cpp:63</a></div></div>
361
370
  <div class="ttc" id="aSVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
362
371
  <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
363
372
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a24df52313f8093bb651ae9da972cd663"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">SVF::SymbolTableInfo::getFlattenedElemIdx</a></div><div class="ttdeci">u32_t getFlattenedElemIdx(const SVFType *T, u32_t origId)</div><div class="ttdoc">Flattened element idx of an array or struct by considering stride.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00181">SymbolTableInfo.cpp:181</a></div></div>
364
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a98b8b3428479259fbafd9e527ecc09bb"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a98b8b3428479259fbafd9e527ecc09bb">SVF::AccessPath::checkRelation</a></div><div class="ttdeci">LSRelation checkRelation(const AccessPath &amp;LHS, const AccessPath &amp;RHS)</div><div class="ttdoc">Check relations of two location sets.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00296">AccessPath.cpp:296</a></div></div>
373
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a98b8b3428479259fbafd9e527ecc09bb"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a98b8b3428479259fbafd9e527ecc09bb">SVF::AccessPath::checkRelation</a></div><div class="ttdeci">LSRelation checkRelation(const AccessPath &amp;LHS, const AccessPath &amp;RHS)</div><div class="ttdoc">Check relations of two location sets.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00306">AccessPath.cpp:306</a></div></div>
365
374
  <div class="ttc" id="aclassSVF_1_1SVFValue_html"><div class="ttname"><a href="classSVF_1_1SVFValue.html">SVF::SVFValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00177">SVFValue.h:177</a></div></div>
366
375
  <div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
367
376
  <div class="ttc" id="aclassSVF_1_1SVFArrayType_html"><div class="ttname"><a href="classSVF_1_1SVFArrayType.html">SVF::SVFArrayType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00469">SVFType.h:469</a></div></div>
@@ -370,7 +379,7 @@ $(function() {
370
379
  <div class="ttc" id="acJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
371
380
  <div class="ttc" id="aclassSVF_1_1SVFType_html"><div class="ttname"><a href="classSVF_1_1SVFType.html">SVF::SVFType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00242">SVFType.h:242</a></div></div>
372
381
  <div class="ttc" id="aclassSVF_1_1SVFStructType_html"><div class="ttname"><a href="classSVF_1_1SVFStructType.html">SVF::SVFStructType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00436">SVFType.h:436</a></div></div>
373
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_ae746362c42da05a641ae062658e40651"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651">SVF::AccessPath::computeConstantOffset</a></div><div class="ttdeci">APOffset computeConstantOffset() const</div><div class="ttdoc">For example,.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00199">AccessPath.cpp:199</a></div></div>
382
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_ae746362c42da05a641ae062658e40651"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ae746362c42da05a641ae062658e40651">SVF::AccessPath::computeConstantOffset</a></div><div class="ttdeci">APOffset computeConstantOffset() const</div><div class="ttdoc">For example,.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00209">AccessPath.cpp:209</a></div></div>
374
383
  <div class="ttc" id="aclassSVF_1_1SVFConstantInt_html"><div class="ttname"><a href="classSVF_1_1SVFConstantInt.html">SVF::SVFConstantInt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00961">SVFValue.h:961</a></div></div>
375
384
  <div class="ttc" id="aclassSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00045">SVFVariables.h:45</a></div></div>
376
385
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a9035ac13134de4647d63507cd80ca3d6"><div class="ttname"><a href="classSVF_1_1SVFType.html#a9035ac13134de4647d63507cd80ca3d6">SVF::SVFType::toString</a></div><div class="ttdeci">std::string toString() const</div></div>
@@ -379,17 +388,17 @@ $(function() {
379
388
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_a586c71842e3e4487921aa3384ce9d025"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a586c71842e3e4487921aa3384ce9d025">SVF::AccessPath::getIdxOperandPairVec</a></div><div class="ttdeci">const IdxOperandPairs &amp; getIdxOperandPairVec() const</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00108">AccessPath.h:108</a></div></div>
380
389
  <div class="ttc" id="aclassSVF_1_1StInfo_html_aaf05447c20c9f90eea64ab6e88d6ab05"><div class="ttname"><a href="classSVF_1_1StInfo.html#aaf05447c20c9f90eea64ab6e88d6ab05">SVF::StInfo::getFlattenedFieldIdxVec</a></div><div class="ttdeci">std::vector&lt; u32_t &gt; &amp; getFlattenedFieldIdxVec()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00180">SVFType.h:180</a></div></div>
381
390
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a05850c17c2dbe42e5602dc8c9a70f3bd"><div class="ttname"><a href="classSVF_1_1SVFType.html#a05850c17c2dbe42e5602dc8c9a70f3bd">SVF::SVFType::getTypeInfo</a></div><div class="ttdeci">StInfo * getTypeInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00309">SVFType.h:309</a></div></div>
382
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a6591b6092a829b0c874754b649087aa2"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a6591b6092a829b0c874754b649087aa2">SVF::AccessPath::operator+</a></div><div class="ttdeci">AccessPath operator+(const AccessPath &amp;rhs) const</div><div class="ttdoc">Overload operators.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00261">AccessPath.cpp:261</a></div></div>
391
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a6591b6092a829b0c874754b649087aa2"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a6591b6092a829b0c874754b649087aa2">SVF::AccessPath::operator+</a></div><div class="ttdeci">AccessPath operator+(const AccessPath &amp;rhs) const</div><div class="ttdoc">Overload operators.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00271">AccessPath.cpp:271</a></div></div>
383
392
  <div class="ttc" id="acJSON_8cpp_html_a95bf816579e97b6f33bdb5e25ed6d5de"><div class="ttname"><a href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a></div><div class="ttdeci">buffer offset</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l01113">cJSON.cpp:1113</a></div></div>
384
393
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
385
394
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_a403312192a96a9fd5e7d071481592a7f"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a403312192a96a9fd5e7d071481592a7f">SVF::AccessPath::isConstantOffset</a></div><div class="ttdeci">bool isConstantOffset() const</div><div class="ttdoc">Return TRUE if this is a constant location set.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00049">AccessPath.cpp:49</a></div></div>
386
395
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_aa1747064a0833855a5848ebf4a4d65fa"><div class="ttname"><a href="classSVF_1_1AccessPath.html#aa1747064a0833855a5848ebf4a4d65fa">SVF::AccessPath::fldIdx</a></div><div class="ttdeci">APOffset fldIdx</div><div class="ttdoc">Accumulated Constant Offsets.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00174">AccessPath.h:174</a></div></div>
387
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a4519477605a58d5821d05951a88abcd0"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a4519477605a58d5821d05951a88abcd0">SVF::AccessPath::dump</a></div><div class="ttdeci">std::string dump() const</div><div class="ttdoc">Dump location set.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00318">AccessPath.cpp:318</a></div></div>
396
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a4519477605a58d5821d05951a88abcd0"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a4519477605a58d5821d05951a88abcd0">SVF::AccessPath::dump</a></div><div class="ttdeci">std::string dump() const</div><div class="ttdoc">Dump location set.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00328">AccessPath.cpp:328</a></div></div>
388
397
  <div class="ttc" id="aclassSVF_1_1Options_html_aaab923c093730b1670a54f09340b1bd5"><div class="ttname"><a href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const Option&lt; u32_t &gt; MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
389
398
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_aabb6c9600fac408f36b9fde013597245"><div class="ttname"><a href="classSVF_1_1AccessPath.html#aabb6c9600fac408f36b9fde013597245">SVF::AccessPath::LSRelation</a></div><div class="ttdeci">LSRelation</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00059">AccessPath.h:59</a></div></div>
390
399
  <div class="ttc" id="aclassSVF_1_1StInfo_html_a055697f565cb9d73b41110090fe50159"><div class="ttname"><a href="classSVF_1_1StInfo.html#a055697f565cb9d73b41110090fe50159">SVF::StInfo::getOriginalElemType</a></div><div class="ttdeci">const SVFType * getOriginalElemType(u32_t fldIdx) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00026">SVFValue.cpp:26</a></div></div>
391
400
  <div class="ttc" id="aclassSVF_1_1SVFConstantInt_html_a73f04bdfc19261b65164b98787bc2ed4"><div class="ttname"><a href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">SVF::SVFConstantInt::getSExtValue</a></div><div class="ttdeci">s64_t getSExtValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00989">SVFValue.h:989</a></div></div>
392
- <div class="ttc" id="aclassSVF_1_1AccessPath_html_a43dc770c4458c6ac58c591974b93fc57"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a43dc770c4458c6ac58c591974b93fc57">SVF::AccessPath::computeConstantByteOffset</a></div><div class="ttdeci">APOffset computeConstantByteOffset() const</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00089">AccessPath.cpp:89</a></div></div>
401
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a43dc770c4458c6ac58c591974b93fc57"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a43dc770c4458c6ac58c591974b93fc57">SVF::AccessPath::computeConstantByteOffset</a></div><div class="ttdeci">APOffset computeConstantByteOffset() const</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00099">AccessPath.cpp:99</a></div></div>
393
402
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
394
403
  <div class="ttc" id="aclassSVF_1_1StInfo_html_a55e5fd85f232c1867c5c6a73646d53eb"><div class="ttname"><a href="classSVF_1_1StInfo.html#a55e5fd85f232c1867c5c6a73646d53eb">SVF::StInfo::getFlattenedElemIdxVec</a></div><div class="ttdeci">std::vector&lt; u32_t &gt; &amp; getFlattenedElemIdxVec()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00184">SVFType.h:184</a></div></div>
395
404
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00056">SVFUtil.h:56</a></div></div>