You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
39 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>PulseOperations (infer.Pulselib.PulseOperations)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.2"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Pulselib</a> &#x00BB; PulseOperations</nav><h1>Module <code>Pulselib.PulseOperations</code></h1></header><dl><dt class="spec module" id="module-Import"><a href="#module-Import" class="anchor"></a><code><span class="keyword">module</span> <a href="Import/index.html">Import</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd><p>For <code>open</code>ing in other modules.</p></dd></dl><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <a href="index.html#module-Import">Import</a></code></span></summary><dl><dt class="spec type" id="type-access_mode"><a href="#type-access_mode" class="anchor"></a><code><span class="keyword">type</span> access_mode</code><code> = </code><table class="variant"><tr id="type-access_mode.Read" class="anchored"><td class="def constructor"><a href="#type-access_mode.Read" class="anchor"></a><code>| </code><code><span class="constructor">Read</span></code></td></tr><tr id="type-access_mode.Write" class="anchored"><td class="def constructor"><a href="#type-access_mode.Write" class="anchor"></a><code>| </code><code><span class="constructor">Write</span></code></td></tr><tr id="type-access_mode.NoAccess" class="anchored"><td class="def constructor"><a href="#type-access_mode.NoAccess" class="anchor"></a><code>| </code><code><span class="constructor">NoAccess</span></code></td><td class="doc"><p>The initialized-ness of the address is not checked when it evaluates a heap address without actual memory access, for example, when evaluating <code>&amp;x.f</code> we need to check initialized-ness of <code>x</code>, not that of <code>x.f</code>.</p></td></tr></table></dt></dl><section><header><h3 id="imported-types-for-ease-of-use-and-so-we-can-write-variants-without-the-corresponding-module-prefix"><a href="#imported-types-for-ease-of-use-and-so-we-can-write-variants-without-the-corresponding-module-prefix" class="anchor"></a>Imported types for ease of use and so we can write variants without the corresponding module prefix</h3></header><dl><dt class="spec type" id="type-execution_domain_base_t"><a href="#type-execution_domain_base_t" class="anchor"></a><code><span class="keyword">type</span> <span>'abductive_domain_t execution_domain_base_t</span></code><code> = <span><span class="type-var">'abductive_domain_t</span> <a href="../PulseExecutionDomain/index.html#type-base_t">PulseDomainInterface.ExecutionDomain.base_t</a></span></code><code> = </code><table class="variant"><tr id="type-execution_domain_base_t.ContinueProgram" class="anchored"><td class="def constructor"><a href="#type-execution_domain_base_t.ContinueProgram" class="anchor"></a><code>| </code><code><span class="constructor">ContinueProgram</span> <span class="keyword">of</span> <span class="type-var">'abductive_domain_t</span></code></td></tr><tr id="type-execution_domain_base_t.ExitProgram" class="anchored"><td class="def constructor"><a href="#type-execution_domain_base_t.ExitProgram" class="anchor"></a><code>| </code><code><span class="constructor">ExitProgram</span> <span class="keyword">of</span> <a href="../PulseAbductiveDomain/index.html#type-summary">PulseDomainInterface.AbductiveDomain.summary</a></code></td></tr><tr id="type-execution_domain_base_t.AbortProgram" class="anchored"><td class="def constructor"><a href="#type-execution_domain_base_t.AbortProgram" class="anchor"></a><code>| </code><code><span class="constructor">AbortProgram</span> <span class="keyword">of</span> <a href="../PulseAbductiveDomain/index.html#type-summary">PulseDomainInterface.AbductiveDomain.summary</a></code></td></tr><tr id="type-execution_domain_base_t.LatentAbortProgram" class="anchored"><td class="def constructor"><a href="#type-execution_domain_base_t.LatentAbortProgram" class="anchor"></a><code>| </code><code><span class="constructor">LatentAbortProgram</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-execution_domain_base_t.astate" class="anchored"><td class="def field"><a href="#type-execution_domain_base_t.astate" class="anchor"></a><code>astate : <a href="../PulseAbductiveDomain/index.html#type-summary">PulseDomainInterface.AbductiveDomain.summary</a>;</code></td></tr><tr id="type-execution_domain_base_t.latent_issue" class="anchored"><td class="def field"><a href="#type-execution_domain_base_t.latent_issue" class="anchor"></a><code>latent_issue : <a href="../PulseLatentIssue/index.html#type-t">PulseDomainInterface.LatentIssue.t</a>;</code></td></tr></table><code>}</code></td></tr><tr id="type-execution_domain_base_t.LatentInvalidAccess" class="anchored"><td class="def constructor"><a href="#type-execution_domain_base_t.LatentInvalidAccess" class="anchor"></a><code>| </code><code><span class="constructor">LatentInvalidAccess</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-execution_domain_base_t.astate" class="anchored"><td class="def field"><a href="#type-execution_domain_base_t.astate" class="anchor"></a><code>astate : <a href="../PulseAbductiveDomain/index.html#type-summary">PulseDomainInterface.AbductiveDomain.summary</a>;</code></td></tr><tr id="type-execution_domain_base_t.address" class="anchored"><td class="def field"><a href="#type-execution_domain_base_t.address" class="anchor"></a><code>address : <a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a>;</code></td></tr><tr id="type-execution_domain_base_t.must_be_valid" class="anchored"><td class="def field"><a href="#type-execution_domain_base_t.must_be_valid" class="anchor"></a><code>must_be_valid : <a href="../PulseTrace/index.html#type-t">PulseBasicInterface.Trace.t</a> * <span><a href="../PulseInvalidation/index.html#type-must_be_valid_reason">PulseBasicInterface.Invalidation.must_be_valid_reason</a> option</span>;</code></td></tr><tr id="type-execution_domain_base_t.calling_context" class="anchored"><td class="def field"><a href="#type-execution_domain_base_t.calling_context" class="anchor"></a><code>calling_context : <span><span>(<a href="../PulseCallEvent/index.html#type-t">PulseBasicInterface.CallEvent.t</a> * <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a>)</span> list</span>;</code></td></tr></table><code>}</code></td></tr><tr id="type-execution_domain_base_t.ISLLatentMemoryError" class="anchored"><td class="def constructor"><a href="#type-execution_domain_base_t.ISLLatentMemoryError" class="anchor"></a><code>| </code><code><span class="constructor">ISLLatentMemoryError</span> <span class="keyword">of</span> <a href="../PulseAbductiveDomain/index.html#type-summary">PulseDomainInterface.AbductiveDomain.summary</a></code></td></tr></table></dt><dt class="spec type" id="type-base_error"><a href="#type-base_error" class="anchor"></a><code><span class="keyword">type</span> <span>'astate base_error</span></code><code> = <span><span class="type-var">'astate</span> <a href="../PulseAccessResult/index.html#type-error">PulseDomainInterface.AccessResult.error</a></span></code><code> = </code><table class="variant"><tr id="type-base_error.PotentialInvalidAccess" class="anchored"><td class="def constructor"><a href="#type-base_error.PotentialInvalidAccess" class="anchor"></a><code>| </code><code><span class="constructor">PotentialInvalidAccess</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-base_error.astate" class="anchored"><td class="def field"><a href="#type-base_error.astate" class="anchor"></a><code>astate : <span class="type-var">'astate</span>;</code></td></tr><tr id="type-base_error.address" class="anchored"><td class="def field"><a href="#type-base_error.address" class="anchor"></a><code>address : <a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a>;</code></td></tr><tr id="type-base_error.must_be_valid" class="anchored"><td class="def field"><a href="#type-base_error.must_be_valid" class="anchor"></a><code>must_be_valid : <a href="../PulseTrace/index.html#type-t">PulseBasicInterface.Trace.t</a> * <span><a href="../PulseInvalidation/index.html#type-must_be_valid_reason">PulseBasicInterface.Invalidation.must_be_valid_reason</a> option</span>;</code></td></tr></table><code>}</code></td></tr><tr id="type-base_error.PotentialInvalidAccessSummary" class="anchored"><td class="def constructor"><a href="#type-base_error.PotentialInvalidAccessSummary" class="anchor"></a><code>| </code><code><span class="constructor">PotentialInvalidAccessSummary</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-base_error.astate" class="anchored"><td class="def field"><a href="#type-base_error.astate" class="anchor"></a><code>astate : <a href="../PulseAbductiveDomain/index.html#type-summary">PulseDomainInterface.AbductiveDomain.summary</a>;</code></td></tr><tr id="type-base_error.address" class="anchored"><td class="def field"><a href="#type-base_error.address" class="anchor"></a><code>address : <a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a>;</code></td></tr><tr id="type-base_error.must_be_valid" class="anchored"><td class="def field"><a href="#type-base_error.must_be_valid" class="anchor"></a><code>must_be_valid : <a href="../PulseTrace/index.html#type-t">PulseBasicInterface.Trace.t</a> * <span><a href="../PulseInvalidation/index.html#type-must_be_valid_reason">PulseBasicInterface.Invalidation.must_be_valid_reason</a> option</span>;</code></td></tr></table><code>}</code></td></tr><tr id="type-base_error.ReportableError" class="anchored"><td class="def constructor"><a href="#type-base_error.ReportableError" class="anchor"></a><code>| </code><code><span class="constructor">ReportableError</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-base_error.astate" class="anchored"><td class="def field"><a href="#type-base_error.astate" class="anchor"></a><code>astate : <span class="type-var">'astate</span>;</code></td></tr><tr id="type-base_error.diagnostic" class="anchored"><td class="def field"><a href="#type-base_error.diagnostic" class="anchor"></a><code>diagnostic : <a href="../PulseDiagnostic/index.html#type-t">PulseBasicInterface.Diagnostic.t</a>;</code></td></tr></table><code>}</code></td></tr><tr id="type-base_error.ISLError" class="anchored"><td class="def constructor"><a href="#type-base_error.ISLError" class="anchor"></a><code>| </code><code><span class="constructor">ISLError</span> <span class="keyword">of</span> <span class="type-var">'astate</span></code></td></tr></table></dt></dl></section><section><header><h3 id="monadic-syntax"><a href="#monadic-syntax" class="anchor"></a>Monadic syntax</h3></header><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <a href="../../IStdlib/IResult/index.html#module-Let_syntax">IStdlib.IResult.Let_syntax</a></code></span></summary><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Result.Monad_infix</code></span></summary><dl><dt class="spec value" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;&gt;=) : <span><span>(<span class="type-var">'a</span>, <span class="type-var">'e</span>)</span> Core_kernel__Result.t</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'b</span>, <span class="type-var">'e</span>)</span> Core_kernel__Result.t</span>)</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'b</span>, <span class="type-var">'e</span>)</span> Core_kernel__Result.t</span></code></dt><dt class="spec value" id="val-(&gt;&gt;|)"><a href="#val-(&gt;&gt;|)" class="anchor"></a><code><span class="keyword">val</span> (&gt;&gt;|) : <span><span>(<span class="type-var">'a</span>, <span class="type-var">'e</span>)</span> Core_kernel__Result.t</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'b</span>, <span class="type-var">'e</span>)</span> Core_kernel__Result.t</span></code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span><span>(<span class="type-var">'ok</span>, <span class="type-var">'err</span>)</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.result</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'ok</span> <span>&#45;&gt;</span> <span class="type-var">'okk</span>)</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'okk</span>, <span class="type-var">'err</span>)</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.result</span></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span><span>(<span class="type-var">'ok</span>, <span class="type-var">'err</span>)</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.result</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'ok</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'okk</span>, <span class="type-var">'err</span>)</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.result</span>)</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'okk</span>, <span class="type-var">'err</span>)</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.result</span></code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-let&lt;*&gt;"><a href="#val-let&lt;*&gt;" class="anchor"></a><code><span class="keyword">val</span> let&lt;*&gt; : <span><span class="type-var">'a</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span><span class="type-var">'b</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span>)</span> <span>&#45;&gt;</span> <span><span><span class="type-var">'b</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span></code></dt><dd><p>monadic &quot;bind&quot; but not really that turns an <code>AccessResult.t</code> into a list of <code>AccessResult.t</code>s (not really because the first type is not an <code>AccessResult.t list</code> but just an <code>AccessResult.t</code>)</p></dd></dl><dl><dt class="spec value" id="val-let&lt;+&gt;"><a href="#val-let&lt;+&gt;" class="anchor"></a><code><span class="keyword">val</span> let&lt;+&gt; : <span><span class="type-var">'a</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'abductive_domain_t</span>)</span> <span>&#45;&gt;</span> <span><span><span><span class="type-var">'abductive_domain_t</span> <a href="index.html#type-execution_domain_base_t">execution_domain_base_t</a></span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span></code></dt><dd><p>monadic &quot;map&quot; but even less really that turns an <code>AccessResult.t</code> into an analysis result</p></dd></dl></section></details></div></div></div><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code><code> = <a href="../PulseAbductiveDomain/index.html#type-t">PulseDomainInterface.AbductiveDomain.t</a></code></dt></dl><dl><dt class="spec value" id="val-check_addr_access"><a href="#val-check_addr_access" class="anchor"></a><code><span class="keyword">val</span> check_addr_access : <a href="index.html#type-access_mode">access_mode</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>Check that the <code>address</code> is not known to be invalid</p></dd></dl><div class="spec module" id="module-Closures"><a href="#module-Closures" class="anchor"></a><code><span class="keyword">module</span> <a href="Closures/index.html">Closures</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><dl><dt class="spec value" id="val-eval"><a href="#val-eval" class="anchor"></a><code><span class="keyword">val</span> eval : <a href="index.html#type-access_mode">access_mode</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>Use the stack and heap to evaluate the given expression down to an abstract address representing its value.</p><p>Return an error state if it traverses some known invalid address or if the end destination is known to be invalid.</p></dd></dl><dl><dt class="spec value" id="val-eval_structure_isl"><a href="#val-eval_structure_isl" class="anchor"></a><code><span class="keyword">val</span> eval_structure_isl : <a href="index.html#type-access_mode">access_mode</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(bool * <span><span><span>(<a href="index.html#type-t">t</a> * <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>Similar to eval but apply to data structures and ISL abduction. Return a list of abduced states (ISLOk and ISLErs); The boolean indicates whether it is data structures or not.</p></dd></dl><dl><dt class="spec value" id="val-prune"><a href="#val-prune" class="anchor"></a><code><span class="keyword">val</span> prune : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>condition:<a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dt class="spec value" id="val-eval_deref"><a href="#val-eval_deref" class="anchor"></a><code><span class="keyword">val</span> eval_deref : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>Like <code>eval</code> but evaluates <code>*exp</code>.</p></dd></dl><dl><dt class="spec value" id="val-eval_deref_isl"><a href="#val-eval_deref_isl" class="anchor"></a><code><span class="keyword">val</span> eval_deref_isl : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span><span>(<a href="index.html#type-t">t</a> * <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span></code></dt><dt class="spec value" id="val-eval_access"><a href="#val-eval_access" class="anchor"></a><code><span class="keyword">val</span> eval_access : <a href="index.html#type-access_mode">access_mode</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="../../Pulselib__PulseBaseMemory/index.html#module-Access">Pulselib.PulseDomainInterface.BaseMemory.Access</a>.t <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>Like <code>eval</code> but starts from an address instead of an expression, checks that it is valid, and if so dereferences it according to the access.</p></dd></dl><dl><dt class="spec value" id="val-havoc_id"><a href="#val-havoc_id" class="anchor"></a><code><span class="keyword">val</span> havoc_id : <a href="../../IR/Ident/index.html#type-t">IR.Ident.t</a> <span>&#45;&gt;</span> <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-havoc_field"><a href="#val-havoc_field" class="anchor"></a><code><span class="keyword">val</span> havoc_field : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dt class="spec value" id="val-realloc_pvar"><a href="#val-realloc_pvar" class="anchor"></a><code><span class="keyword">val</span> realloc_pvar : <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a> <span>&#45;&gt;</span> <a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-write_id"><a href="#val-write_id" class="anchor"></a><code><span class="keyword">val</span> write_id : <a href="../../IR/Ident/index.html#type-t">IR.Ident.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-write_field"><a href="#val-write_field" class="anchor"></a><code><span class="keyword">val</span> write_field : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>ref:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <span>obj:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>write the edge <code>ref --.field--&gt; obj</code></p></dd></dl><dl><dt class="spec value" id="val-write_arr_index"><a href="#val-write_arr_index" class="anchor"></a><code><span class="keyword">val</span> write_arr_index : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>ref:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <span>index:<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a></span> <span>&#45;&gt;</span> <span>obj:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>write the edge <code>ref[index]--&gt; obj</code></p></dd></dl><dl><dt class="spec value" id="val-write_deref"><a href="#val-write_deref" class="anchor"></a><code><span class="keyword">val</span> write_deref : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>ref:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <span>obj:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>write the edge <code>ref --*--&gt; obj</code></p></dd></dl><dl><dt class="spec value" id="val-write_deref_biad_isl"><a href="#val-write_deref_biad_isl" class="anchor"></a><code><span class="keyword">val</span> write_deref_biad_isl : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>ref:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <span><a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> <a href="../../Absint/HilExp/Access/index.html#type-t">Absint.HilExp.Access.t</a></span> <span>&#45;&gt;</span> <span>obj:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span></code></dt><dt class="spec value" id="val-invalidate"><a href="#val-invalidate" class="anchor"></a><code><span class="keyword">val</span> invalidate : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../PulseInvalidation/index.html#type-t">PulseBasicInterface.Invalidation.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>record that the address is invalid</p></dd></dl><dl><dt class="spec value" id="val-invalidate_biad_isl"><a href="#val-invalidate_biad_isl" class="anchor"></a><code><span class="keyword">val</span> invalidate_biad_isl : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../PulseInvalidation/index.html#type-t">PulseBasicInterface.Invalidation.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span> list</span></code></dt><dd><p>record that the address is invalid. If the address has not been allocated, abduce ISL specs for both invalid (null, free, unint) and allocated heap.</p></dd></dl><dl><dt class="spec value" id="val-allocate"><a href="#val-allocate" class="anchor"></a><code><span class="keyword">val</span> allocate : <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-add_dynamic_type"><a href="#val-add_dynamic_type" class="anchor"></a><code><span class="keyword">val</span> add_dynamic_type : <a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a> <span>&#45;&gt;</span> <a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-remove_allocation_attr"><a href="#val-remove_allocation_attr" class="anchor"></a><code><span class="keyword">val</span> remove_allocation_attr : <a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-invalidate_access"><a href="#val-invalidate_access" class="anchor"></a><code><span class="keyword">val</span> invalidate_access : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../PulseInvalidation/index.html#type-t">PulseBasicInterface.Invalidation.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="../../Pulselib__PulseBaseMemory/index.html#module-Access">Pulselib.PulseDomainInterface.BaseMemory.Access</a>.t <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>record that what the address points via the access to is invalid</p></dd></dl><dl><dt class="spec value" id="val-invalidate_array_elements"><a href="#val-invalidate_array_elements" class="anchor"></a><code><span class="keyword">val</span> invalidate_array_elements : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../PulseInvalidation/index.html#type-t">PulseBasicInterface.Invalidation.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>record that all the array elements that address points to is invalid</p></dd></dl><dl><dt class="spec value" id="val-shallow_copy"><a href="#val-shallow_copy" class="anchor"></a><code><span class="keyword">val</span> shallow_copy : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dd><p>returns the address of a new cell with the same edges as the original</p></dd></dl><dl><dt class="spec value" id="val-get_dynamic_type_unreachable_values"><a href="#val-get_dynamic_type_unreachable_values" class="anchor"></a><code><span class="keyword">val</span> get_dynamic_type_unreachable_values : <span><a href="../../IR/Var/index.html#type-t">IR.Var.t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(<a href="../../IR/Var/index.html#type-t">IR.Var.t</a> * <a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a>)</span> list</span></code></dt><dd><p>Given a list of variables, computes the unreachable values if the variables were removed from the stack, then return the dynamic types of those values if they are available</p></dd></dl><dl><dt class="spec value" id="val-remove_vars"><a href="#val-remove_vars" class="anchor"></a><code><span class="keyword">val</span> remove_vars : <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <span><a href="../../IR/Var/index.html#type-t">IR.Var.t</a> list</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dt class="spec value" id="val-check_address_escape"><a href="#val-check_address_escape" class="anchor"></a><code><span class="keyword">val</span> check_address_escape : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a> <span>&#45;&gt;</span> <a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> <span>&#45;&gt;</span> <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-t">t</a> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt><dt class="spec value" id="val-get_captured_actuals"><a href="#val-get_captured_actuals" class="anchor"></a><code><span class="keyword">val</span> get_captured_actuals : <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>captured_vars:<span><span>(<a href="../../IR/Var/index.html#type-t">IR.Var.t</a> * <a href="../../IR/CapturedVar/index.html#type-capture_mode">IR.CapturedVar.capture_mode</a> * <a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a>)</span> list</span></span> <span>&#45;&gt;</span> <span>actual_closure:<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span></span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><span>(<a href="index.html#type-t">t</a> * <span><span>(<a href="../../IR/Var/index.html#type-t">IR.Var.t</a> * <span>(<span>(<a href="../PulseAbstractValue/index.html#type-t">PulseBasicInterface.AbstractValue.t</a> * <a href="../PulseValueHistory/index.html#type-t">PulseBasicInterface.ValueHistory.t</a>)</span> * <a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a>)</span>)</span> list</span>)</span> <a href="../PulseAccessResult/index.html#type-t">PulseDomainInterface.AccessResult.t</a></span></code></dt></dl></div></body></html>