This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>BufferOverrunDomain (infer.BO.BufferOverrunDomain)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">BO</a>» BufferOverrunDomain</nav><h1>Module <code>BO.BufferOverrunDomain</code></h1></header><dl><dtclass="spec module"id="module-ItvThresholds"><ahref="#module-ItvThresholds"class="anchor"></a><code><spanclass="keyword">module</span> ItvThresholds : <ahref="../../Absint/AbstractDomain/index.html#module-type-FiniteSetS">Absint.AbstractDomain.FiniteSetS</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../../Absint/AbstractDomain/index.html#module-type-FiniteSetS">FiniteSetS</a>.elt = Z.t</code></dt><dd><p>Set of integers for threshold widening</p></dd></dl><dl><dtclass="spec module"id="module-ItvUpdatedBy"><ahref="#module-ItvUpdatedBy"class="anchor"></a><code><spanclass="keyword">module</span><ahref="ItvUpdatedBy/index.html">ItvUpdatedBy</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain for recording which operations are used for evaluating interval values</p></dd></dl><dl><dtclass="spec module"id="module-ModeledRange"><ahref="#module-ModeledRange"class="anchor"></a><code><spanclass="keyword">module</span><ahref="ModeledRange/index.html">ModeledRange</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p><code>ModeledRange</code> represents how many times the interval value can be updated by modeled functions. This domain is to support the case where there are mismatches between value of a control variable and actual number of loop iterations. For example,</p></dd></dl><dl><dtclass="spec type"id="type-eval_sym_trace"><ahref="#type-eval_sym_trace"class="anchor"></a><code><spanclass="keyword">type</span> eval_sym_trace</code><code> = </code><code>{</code><tableclass="record"><trid="type-eval_sym_trace.eval_sym"class="anchored"><tdclass="def field"><ahref="#type-eval_sym_trace.eval_sym"class="anchor"></a><code>eval_sym : <ahref="../Bounds/Bound/index.html#type-eval_sym">Bounds.Bound.eval_sym</a>;</code></td><tdclass="doc"><p>evaluating symbol</p></td></tr><trid="type-eval_sym_trace.trace_of_sym"class="anchored"><tdclass="def field"><ahref="#type-eval_sym_trace.trace_of_sym"class="anchor"></a><code>trace_of_sym : <ahref="../Symb/Symbol/index.html#type-t">Symb.Symbol.t</a><span>-></span><ahref="../BufferOverrunTrace/Set/index.html#type-t">BufferOverrunTrace.Set.t</a>;</code></td><tdclass="doc"><p>getting traces of symbol</p></td></tr><trid="type-eval_sym_trace.eval_locpath"class="anchored"><tdclass="def field"><ahref="#type-eval_sym_trace.eval_locpath"class="anchor"></a><code>eval_locpath : <ahref="../AbsLoc/PowLoc/index.html#type-eval_locpath">AbsLoc.PowLoc.eval_locpath</a>;</code></td><tdclass="doc"><p>evaluating path</p></td></tr></table><code>}</code></dt><dd><p>type for on-demand symbol evaluation in Inferbo</p></dd></dl><divclass="spec module"id="module-Val"><ahref="#module-Val"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Val/index.html">Val</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec module"id="module-KeyRhs"><ahref="#module-KeyRhs"class="anchor"></a><code><spanclass="keyword">module</span><ahref="KeyRhs/index.html">KeyRhs</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Right hand side of the alias domain. See <code>AliasTarget</code>.</p></dd></dl><divclass="spec module"id="module-AliasTarget"><ahref="#module-AliasTarget"class="anchor"></a><code><spanclass="keyword">module</span><ahref="AliasTarget/index.html">AliasTarget</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-AliasTargets"><ahref="#module-AliasTargets"class="anchor"></a><code><spanclass="keyword">module</span><ahref="AliasTargets/index.html">AliasTargets</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec module"id="module-AliasRet"><ahref="#module-AliasRet"class="anchor"></a><code><spanclass="keyword">module</span><ahref="AliasRet/index.html">AliasRet</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Alias domain for return values of callees</p></dd></dl><dl><dtclass="spec module"id="module-CoreVal"><ahref="#module-CoreVal"class="anchor"></a><code><spanclass="keyword">module</span><ahref="CoreVal/index.html">CoreVal</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p><code>CoreVal</code> is similar to <code>Val</code>, but its compare function is defined only on core parts, interval, pointers, and array blocks, of abstract value. This domain is to keep pruned values, where we do not need to care about the other fields in the abstract values.</p></dd></dl><dl><dtclass="spec module"id="module-PruningExp"><ahref="#module-PruningExp"class="anchor"></a><code><spanclass="keyword">module</span><ahref="PruningExp/index.html">PruningExp</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain to keep assumed expressions</p></dd></dl><dl><dtclass="spec module"id="module-PrunedVal"><ahref="#module-PrunedVal"class="anchor"></a><code><spanclass="keyword">module</span><ahref="PrunedVal/index.html">PrunedVal</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain to keep pruned history, which are pairs of a pruned value and an assumed expression</p></dd></dl><dl><dtclass="spec module"id="module-PrunePairs"><ahref="#module-PrunePairs"class="anchor"></a><code><spanclass="keyword">module</span><ahref="PrunePairs/index.html">PrunePairs</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p><code>PrunePairs</code> is a map from abstract locations to abstract values that represents pruned results in the latest pruning. It uses <code>InvertedMap</code> because more pruning means smaller abstract states.</p></dd></dl><dl><dtclass="spec module"id="module-LatestPrune"><ahref="#module-LatestPrune"class="anchor"></a><code><spanclass="keyword">module</span><ahref="LatestPrune/index.html">LatestPrune</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain to keep latest pruned values</p></dd></dl><dl><dtclass="spec module"id="module-Reachability"><ahref="#module-Reachability"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Reachability/index.html">Reachability</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain for reachability check</p></dd></dl><divclass="spec module"id="module-LoopHeadLoc"><ahref="#module-LoopHeadLoc"class="anchor"></a><code><spanclass="keyword">module</span><ahref="LoopHeadLoc/index.html">LoopHeadLoc</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec module"id="module-MemReach"><ahref="#module-MemReach"class="anchor"></a><code><spanclass="keyword">module</span><ahref="MemReach/index.html">MemReach</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain for memory of reachable node</p></dd></dl><divclass="spec module"id="module-Mem"><ahref="#module-Mem"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Mem/index.html">Mem</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div></div></body></html>