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>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>InferModules__PulseOperations (infer.InferModules__PulseOperations)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc %%VERSION%%"/><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>» InferModules__PulseOperations</nav><h1>Module <code>InferModules__PulseOperations</code></h1></header><divclass="spec module"id="module-AbstractAddress"><ahref="#module-AbstractAddress"class="anchor"></a><code><spanclass="keyword">module</span> AbstractAddress = <ahref="../InferModules/PulseDomain/index.html#module-AbstractAddress">InferModules.PulseDomain.AbstractAddress</a></code></div><dl><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span> t</code><code> = <ahref="../InferModules/PulseAbductiveDomain/index.html#type-t">InferModules.PulseAbductiveDomain.t</a></code></dt><dtclass="spec type"id="type-access_result"><ahref="#type-access_result"class="anchor"></a><code><spanclass="keyword">type</span><span>'a access_result</span></code><code> = <span><span>(<spanclass="type-var">'a</span>,<ahref="../InferModules/PulseDiagnostic/index.html#type-t">InferModules.PulseDiagnostic.t</a>)</span><ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.result</span></code></dt></dl><divclass="spec module"id="module-Closures"><ahref="#module-Closures"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Closures/index.html">Closures</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec value"id="val-eval"><ahref="#val-eval"class="anchor"></a><code><spanclass="keyword">val</span> eval : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><span>(<ahref="index.html#type-t">t</a> * <ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a>)</span><ahref="index.html#type-access_result">access_result</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><dtclass="spec value"id="val-eval_deref"><ahref="#val-eval_deref"class="anchor"></a><code><spanclass="keyword">val</span> eval_deref : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><span>(<ahref="index.html#type-t">t</a> * <ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a>)</span><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>Like <code>eval</code> but evaluates <code>*exp</code>.</p></dd></dl><dl><dtclass="spec value"id="val-eval_access"><ahref="#val-eval_access"class="anchor"></a><code><spanclass="keyword">val</span> eval_access : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="../InferModules__PulseDomain/Memory/index.html#module-Access">InferModules.PulseDomain.Memory.Access</a>.t <span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><span>(<ahref="index.html#type-t">t</a> * <ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a>)</span><ahref="index.html#type-access_result">access_result</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><dtclass="spec value"id="val-havoc_id"><ahref="#val-havoc_id"class="anchor"></a><code><spanclass="keyword">val</span> havoc_id : <ahref="../../InferIR/InferIR/Ident/index.html#type-t">InferIR.Ident.t</a><span>-></span><ahref="../InferModules/PulseDomain/ValueHistory/index.html#type-t">InferModules.PulseDomain.ValueHistory.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-havoc_deref"><ahref="#val-havoc_deref"class="anchor"></a><code><spanclass="keyword">val</span> havoc_deref : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="../InferModules/PulseDomain/ValueHistory/index.html#type-t">InferModules.PulseDomain.ValueHistory.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dtclass="spec value"id="val-havoc_field"><ahref="#val-havoc_field"class="anchor"></a><code><spanclass="keyword">val</span> havoc_field : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="../../InferIR/InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a><span>-></span><ahref="../InferModules/PulseDomain/ValueHistory/index.html#type-t">InferModules.PulseDomain.ValueHistory.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dtclass="spec value"id="val-realloc_var"><ahref="#val-realloc_var"class="anchor"></a><code><spanclass="keyword">val</span> realloc_var : <ahref="../../InferIR/InferIR/Var/index.html#type-t">InferIR.Var.t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-write_id"><ahref="#val-write_id"class="anchor"></a><code><spanclass="keyword">val</span> write_id : <ahref="../../InferIR/InferIR/Ident/index.html#type-t">InferIR.Ident.t</a><span>-></span><ahref="../InferModules/PulseDomain/Stack/index.html#type-value">InferModules.PulseDomain.Stack.value</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-write_deref"><ahref="#val-write_deref"class="anchor"></a><code><spanclass="keyword">val</span> write_deref : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><span>ref:<ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a></span><span>-></span><span>obj:<ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a></span><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>write the edge <code>ref --*--> obj</code></p></dd></dl><dl><dtclass="spec value"id="val-invalidate"><ahref="#val-invalidate"class="anchor"></a><code><spanclass="keyword">val</span> invalidate : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><span><ahref="../InferModules/PulseDomain/Invalidation/index.html#type-t">InferModules.PulseDomain.Invalidation.t</a><ahref="../InferModules/PulseDomain/InterprocAction/index.html#type-t">InferModules.PulseDomain.InterprocAction.t</a></span><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>record that the address is invalid</p></dd></dl><dl><dtclass="spec value"id="val-invalidate_deref"><ahref="#val-invalidate_deref"class="anchor"></a><code><spanclass="keyword">val</span> invalidate_deref : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><span><ahref="../InferModules/PulseDomain/Invalidation/index.html#type-t">InferModules.PulseDomain.Invalidation.t</a><ahref="../InferModules/PulseDomain/InterprocAction/index.html#type-t">InferModules.PulseDomain.InterprocAction.t</a></span><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>record that what the address points to is invalid</p></dd></dl><dl><dtclass="spec value"id="val-invalidate_array_elements"><ahref="#val-invalidate_array_elements"class="anchor"></a><code><spanclass="keyword">val</span> invalidate_array_elements : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><span><ahref="../InferModules/PulseDomain/Invalidation/index.html#type-t">InferModules.PulseDomain.Invalidation.t</a><ahref="../InferModules/PulseDomain/InterprocAction/index.html#type-t">InferModules.PulseDomain.InterprocAction.t</a></span><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>record that all the array elements that address points to is invalid</p></dd></dl><dl><dtclass="spec value"id="val-shallow_copy"><ahref="#val-shallow_copy"class="anchor"></a><code><spanclass="keyword">val</span> shallow_copy : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../InferModules/PulseDomain/AddrTracePair/index.html#type-t">InferModules.PulseDomain.AddrTracePair.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><span>(<ahref="index.html#type-t">t</a> * <ahref="../InferModules__PulseDomain/AbstractAddress/index.html#type-t">AbstractAddress.t</a>)</span><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>returns the address of a new cell with the same edges as the original</p></dd></dl><dl><dtclass="spec value"id="val-remove_vars"><ahref="#val-remove_vars"class="anchor"></a><code><spanclass="keyword">val</span> remove_vars : <span><ahref="../../InferIR/InferIR/Var/index.html#type-t">InferIR.Var.t</a> list</span><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-check_address_escape"><ahref="#val-check_address_escape"class="anchor"></a><code><spanclass="keyword">val</span> check_address_escape : <ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a><span>-></span><ahref="../InferModules__PulseDomain/AbstractAddress/index.html#type-t">AbstractAddress.t</a><span>-></span><ahref="../InferModules/PulseDomain/ValueHistory/index.html#type-t">InferModules.PulseDomain.ValueHistory.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a><ahref="index.html#type-access_result">access_result</a></span></code></dt><dtclass="spec value"id="val-call"><ahref="#val-call"class="anchor"></a><code><spanclass="keyword">val</span> call : <span>caller_summary:<ahref="../InferModules/Summary/index.html#type-t">InferModules.Summary.t</a></span><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span>-></span><span>ret:<span>(<ahref="../../InferIR/InferIR/Ident/index.html#type-t">InferIR.Ident.t</a> * <ahref="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a>)</span></span><span>-></span><span>actuals:<span><span>(<span>(<ahref="../InferModules__PulseDomain/AbstractAddress/index.html#type-t">AbstractAddress.t</a> * <ahref="../InferModules/PulseDomain/ValueHistory/index.html#type-t">InferModules.PulseDomain.ValueHistory.t</a>)</span> * <ahref="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a>)</span> list</span></span><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><span><ahref="index.html#type-t">t</a> list</span><ahref="index.html#type-access_result">access_result</a></span></code></dt><dd><p>perform an interprocedural call: apply the summary for the call proc name passed as argument if it exists</p></dd></dl></div></body></html>