<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Concurrency__RacerDDomain (infer.Concurrency__RacerDDomain)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><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; Concurrency__RacerDDomain</nav><h1>Module <code>Concurrency__RacerDDomain</code></h1></header><div class="spec module" id="module-AccessExpression"><a href="#module-AccessExpression" class="anchor"></a><code><span class="keyword">module</span> AccessExpression = <a href="../Absint/HilExp/index.html#module-AccessExpression">Absint.HilExp.AccessExpression</a></code></div><div class="spec module" id="module-F"><a href="#module-F" class="anchor"></a><code><span class="keyword">module</span> F = Stdlib.Format</code></div><dl><dt class="spec value" id="val-pp_exp"><a href="#val-pp_exp" class="anchor"></a><code><span class="keyword">val</span> pp_exp : <a href="index.html#module-F">F</a>.formatter <span>&#45;&gt;</span> <a href="../Absint__HilExp/AccessExpression/index.html#type-t">AccessExpression.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>language sensitive pretty-printer</p></dd></dl><div class="spec module" id="module-Access"><a href="#module-Access" class="anchor"></a><code><span class="keyword">module</span> <a href="Access/index.html">Access</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><dl><dt class="spec module" id="module-LockDomain"><a href="#module-LockDomain" class="anchor"></a><code><span class="keyword">module</span> <a href="LockDomain/index.html">LockDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd><p>Overapproximation of number of time the lock has been acquired</p></dd></dl><dl><dt class="spec module" id="module-ThreadsDomain"><a href="#module-ThreadsDomain" class="anchor"></a><code><span class="keyword">module</span> <a href="ThreadsDomain/index.html">ThreadsDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd><p>Abstraction of threads that may run in parallel with the current thread. NoThread &lt; AnyThreadExceptSelf &lt; AnyThread</p></dd></dl><div class="spec module" id="module-OwnershipAbstractValue"><a href="#module-OwnershipAbstractValue" class="anchor"></a><code><span class="keyword">module</span> <a href="OwnershipAbstractValue/index.html">OwnershipAbstractValue</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><dl><dt class="spec module" id="module-AccessSnapshot"><a href="#module-AccessSnapshot" class="anchor"></a><code><span class="keyword">module</span> <a href="AccessSnapshot/index.html">AccessSnapshot</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd><p>snapshot of the relevant state at the time of a heap access: concurrent thread(s), lock(s) held, ownership precondition</p></dd></dl><div class="spec module" id="module-AccessDomain"><a href="#module-AccessDomain" class="anchor"></a><code><span class="keyword">module</span> <a href="AccessDomain/index.html">AccessDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-OwnershipDomain"><a href="#module-OwnershipDomain" class="anchor"></a><code><span class="keyword">module</span> <a href="OwnershipDomain/index.html">OwnershipDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-Attribute"><a href="#module-Attribute" class="anchor"></a><code><span class="keyword">module</span> <a href="Attribute/index.html">Attribute</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="spec module" id="module-AttributeMapDomain"><a href="#module-AttributeMapDomain" class="anchor"></a><code><span class="keyword">module</span> <a href="AttributeMapDomain/index.html">AttributeMapDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></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> = </code><code>{</code><table class="record"><tr id="type-t.threads" class="anchored"><td class="def field"><a href="#type-t.threads" class="anchor"></a><code>threads : <a href="ThreadsDomain/index.html#type-t">ThreadsDomain.t</a>;</code></td><td class="doc"><p>current thread: main, background, or unknown</p></td></tr><tr id="type-t.locks" class="anchored"><td class="def field"><a href="#type-t.locks" class="anchor"></a><code>locks : <a href="LockDomain/index.html#type-t">LockDomain.t</a>;</code></td><td class="doc"><p>boolean that is true if a lock must currently be held</p></td></tr><tr id="type-t.accesses" class="anchored"><td class="def field"><a href="#type-t.accesses" class="anchor"></a><code>accesses : <a href="index.html#module-AccessDomain">AccessDomain</a>.t;</code></td><td class="doc"><p>read and writes accesses performed without ownership permissions</p></td></tr><tr id="type-t.ownership" class="anchored"><td class="def field"><a href="#type-t.ownership" class="anchor"></a><code>ownership : <a href="OwnershipDomain/index.html#type-t">OwnershipDomain.t</a>;</code></td><td class="doc"><p>map of access paths to ownership predicates</p></td></tr><tr id="type-t.attribute_map" class="anchored"><td class="def field"><a href="#type-t.attribute_map" class="anchor"></a><code>attribute_map : <a href="AttributeMapDomain/index.html#type-t">AttributeMapDomain.t</a>;</code></td><td class="doc"><p>map of access paths to attributes such as owned, functional, ...</p></td></tr></table><code>}</code></dt></dl><div><div class="spec include"><div class="doc"><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../Absint/AbstractDomain/index.html#module-type-WithBottom">Absint.AbstractDomain.WithBottom</a> <span class="keyword">with</span> <span class="keyword">type</span> <a href="../Absint/AbstractDomain/module-type-WithBottom/index.html#type-t">t</a> := <a href="index.html#type-t">t</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> <a href="../Absint/AbstractDomain/index.html#module-type-S">Absint.AbstractDomain.S</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> <a href="../Absint/AbstractDomain/index.html#module-type-NoJoin">Absint.AbstractDomain.NoJoin</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> <a href="../IStdlib/PrettyPrintable/index.html#module-type-PrintableType">IStdlib.PrettyPrintable.PrintableType</a></code></span></summary><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt></dl><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <a href="../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> unit</code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-leq"><a href="#val-leq" class="anchor"></a><code><span class="keyword">val</span> leq : <span>lhs:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>rhs:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> bool</code></dt><dd><p>the implication relation: <code>lhs &lt;= rhs</code> means <code>lhs |- rhs</code></p></dd></dl></details></div></div></div><dl><dt class="spec value" id="val-join"><a href="#val-join" class="anchor"></a><code><span class="keyword">val</span> join : <a href="index.html#type-t">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-widen"><a href="#val-widen" class="anchor"></a><code><span class="keyword">val</span> widen : <span>prev:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>next:<a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>num_iters:int</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt></dl></details></div></div></div><dl><dt class="spec value" id="val-bottom"><a href="#val-bottom" class="anchor"></a><code><span class="keyword">val</span> bottom : <a href="index.html#type-t">t</a></code></dt><dd><p>The bottom value of the domain.</p></dd></dl><dl><dt class="spec value" id="val-is_bottom"><a href="#val-is_bottom" class="anchor"></a><code><span class="keyword">val</span> is_bottom : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Return true if this is the bottom value</p></dd></dl></details></div></div></div><dl><dt class="spec value" id="val-add_unannotated_call_access"><a href="#val-add_unannotated_call_access" class="anchor"></a><code><span class="keyword">val</span> add_unannotated_call_access : <a href="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a> <span>&#45;&gt;</span> <a href="../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../Absint/HilExp/index.html#type-t">Absint.HilExp.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> <a href="index.html#type-t">t</a></code></dt></dl><dl><dt class="spec type" id="type-summary"><a href="#type-summary" class="anchor"></a><code><span class="keyword">type</span> summary</code><code> = </code><code>{</code><table class="record"><tr id="type-summary.threads" class="anchored"><td class="def field"><a href="#type-summary.threads" class="anchor"></a><code>threads : <a href="ThreadsDomain/index.html#type-t">ThreadsDomain.t</a>;</code></td></tr><tr id="type-summary.locks" class="anchored"><td class="def field"><a href="#type-summary.locks" class="anchor"></a><code>locks : <a href="LockDomain/index.html#type-t">LockDomain.t</a>;</code></td></tr><tr id="type-summary.accesses" class="anchored"><td class="def field"><a href="#type-summary.accesses" class="anchor"></a><code>accesses : <a href="index.html#module-AccessDomain">AccessDomain</a>.t;</code></td></tr><tr id="type-summary.return_ownership" class="anchored"><td class="def field"><a href="#type-summary.return_ownership" class="anchor"></a><code>return_ownership : <a href="OwnershipAbstractValue/index.html#type-t">OwnershipAbstractValue.t</a>;</code></td></tr><tr id="type-summary.return_attribute" class="anchored"><td class="def field"><a href="#type-summary.return_attribute" class="anchor"></a><code>return_attribute : <a href="Attribute/index.html#type-t">Attribute.t</a>;</code></td></tr><tr id="type-summary.attributes" class="anchored"><td class="def field"><a href="#type-summary.attributes" class="anchor"></a><code>attributes : <a href="AttributeMapDomain/index.html#type-t">AttributeMapDomain.t</a>;</code></td></tr></table><code>}</code></dt><dd><p>same as astate, but without <code>attribute_map</code> (since these involve locals) and with the addition of the ownership/attributes associated with the return value as well as the set of formals which may escape</p></dd></dl><dl><dt class="spec value" id="val-empty_summary"><a href="#val-empty_summary" class="anchor"></a><code><span class="keyword">val</span> empty_summary : <a href="index.html#type-summary">summary</a></code></dt><dt class="spec value" id="val-pp_summary"><a href="#val-pp_summary" class="anchor"></a><code><span class="keyword">val</span> pp_summary : <a href="index.html#module-F">F</a>.formatter <span>&#45;&gt;</span> <a href="index.html#type-summary">summary</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-astate_to_summary"><a href="#val-astate_to_summary" class="anchor"></a><code><span class="keyword">val</span> astate_to_summary : <a href="../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a> <span>&#45;&gt;</span> <a href="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-summary">summary</a></code></dt></dl></div></body></html>