|
|
exp.offlist</code> for some list of offsets <code>offlist</code>. If so, it returns <code>Some(offlist)</code>. Otherwise, it returns <code>None</code>. Assumes that <code>base_exp</code> points to the beginning of a structure, not the middle.</p></dd></dl><dl><dt class="spec value" id="val-expand_hpred_pointer"><a href="#val-expand_hpred_pointer" class="anchor"></a><code><span class="keyword">val</span> expand_hpred_pointer : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>-></span> bool <span>-></span> <a href="../../../InferIR/InferIR/Sil/index.html#type-hpred">InferIR.Sil.hpred</a> <span>-></span> bool * bool * <a href="../../../InferIR/InferIR/Sil/index.html#type-hpred">InferIR.Sil.hpred</a></code></dt><dd><p><code>expand_hpred_pointer calc_index_frame hpred</code> expands <code>hpred</code> if it is a |-> whose lhs is a Lfield or Lindex or ptr+off. Return <code>(changed, calc_index_frame', hpred')</code> where <code>changed</code> indicates whether the predicate has changed.</p></dd></dl><dl><dt class="spec value" id="val-get_bounds"><a href="#val-get_bounds" class="anchor"></a><code><span class="keyword">val</span> get_bounds : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>-></span> <span><a href="../Prop/index.html#type-normal">Prop.normal</a> <a href="../Prop/index.html#type-t">Prop.t</a></span> <span>-></span> <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span>-></span> <span><a href="../../../InferIR/InferIR/IntLit/index.html#type-t">InferIR.IntLit.t</a> option</span> * <span><a href="../../../InferIR/InferIR/IntLit/index.html#type-t">InferIR.IntLit.t</a> option</span></code></dt><dd><p>Get upper and lower bounds of an expression, if any</p></dd></dl></section><section><header><h3 id="abduction-prover"><a href="#abduction-prover" class="anchor"></a>Abduction prover</h3></header><dl><dt class="spec value" id="val-check_implication"><a href="#val-check_implication" class="anchor"></a><code><span class="keyword">val</span> check_implication : <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>-></span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>-></span> <span><a href="../Prop/index.html#type-normal">Prop.normal</a> <a href="../Prop/index.html#type-t">Prop.t</a></span> <span>-></span> <span><a href="../Prop/index.html#type-exposed">Prop.exposed</a> <a href="../Prop/index.html#type-t">Prop.t</a></span> <span>-></span> bool</code></dt><dd><p><code>check_implication p1 p2</code> returns true if <code>p1|-p2</code></p></dd></dl><dl><dt class="spec type" id="type-check"><a href="#type-check" class="anchor"></a><code><span class="keyword">type</span> check</code><code> = </code><table class="variant"><tr id="type-check.Bounds_check" class="anchored"><td class="def constructor"><a href="#type-check.Bounds_check" class="anchor"></a><code>| </code><code><span class="constructor">Bounds_check</span></code></td></tr><tr id="type-check.Class_cast_check" class="anchored"><td class="def constructor"><a href="#type-check.Class_cast_check" class="anchor"></a><code>| </code><code><span class="constructor">Class_cast_check</span> <span class="keyword">of</span> <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> * <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> * <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a></code></td></tr></table></dt></dl><dl><dt class="spec value" id="val-d_typings"><a href="#val-d_typings" class="anchor"></a><code><span class="keyword">val</span> d_typings : <span><span>(<a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> * <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a>)</span> list</span> <span>-></span> unit</code></dt></dl><dl><dt class="spec type" id="type-implication_result"><a href="#type-implication_result" class="anchor"></a><code><span class="keyword">type</span> implication_result</code><code> = </code><table class="variant"><tr id="type-implication_result.ImplOK" class="anchored"><td class="def constructor"><a href="#type-implication_result.ImplOK" class="anchor"></a><code>| </code><code><span class="constructor">ImplOK</span> <span class="keyword">of</span> <span><a href="index.html#type-check">check</a> list</span> * <a href="../../../InferIR/InferIR/Sil/index.html#type-subst">InferIR.Sil.subst</a> * <a href="../../../InferIR/InferIR/Sil/index.html#type-subst">InferIR.Sil.subst</a> * <span><a href="../../../InferIR/InferIR/Sil/index.html#type-hpred">InferIR.Sil.hpred</a> list</span> * <span><a href="../../../InferIR/InferIR/Sil/index.html#type-atom">InferIR.Sil.atom</a> list</span> * <span><a href="../../../InferIR/InferIR/Sil/index.html#type-hpred">InferIR.Sil.hpred</a> list</span> * <span><a href="../../../InferIR/InferIR/Sil/index.html#type-hpred">InferIR.Sil.hpred</a> list</span> * <span><a href="../../../InferIR/InferIR/Sil/index.html#type-hpred">InferIR.Sil.hpred</a> list</span> * <span><span>(<a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> * <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a>)</span> list</span> * <span><span>(<a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> * <a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a>)</span> list</span></code></td></tr><tr id="type-implication_result.ImplFail" class="anchored"><td class="def constructor"><a href="#type-implication_result.ImplFail" class="anchor"></a><code>| </code><code><span class="constructor">ImplFail</span> <span class="keyword">of</span> <span><a href="index.html#type-check">check</a> list</span></code></td></tr></table></dt></dl><dl><dt class="spec value" id="val-check_implication_for_footprint"><a href="#val-check_implication_for_footprint" class="anchor"></a><code><span class="keyword">val</span> check_implication_for_footprint : <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>-></span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>-></span> <span><a href="../Prop/index.html#type-normal">Prop.normal</a> <a href="../Prop/index.html#type-t">Prop.t</a></span> <span>-></span> <span><a href="../Prop/index.html#type-exposed">Prop.exposed</a> <a href="../Prop/index.html#type-t">Prop.t</a></span> <span>-></span> <a href="index.html#type-implication_result">implication_result</a></code></dt><dd><p><code>check_implication_for_footprint p1 p2</code> returns <code>Some(sub, frame, missing)</code> if <code>sub(p1 * missing) |- sub(p2 *
|