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>Concurrency__RacerDDomain (infer.Concurrency__RacerDDomain)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.1"/><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>» Concurrency__RacerDDomain</nav><h1>Module <code>Concurrency__RacerDDomain</code></h1></header><divclass="spec module"id="module-AccessExpression"><ahref="#module-AccessExpression"class="anchor"></a><code><spanclass="keyword">module</span> AccessExpression = <ahref="../Absint/HilExp/index.html#module-AccessExpression">Absint.HilExp.AccessExpression</a></code></div><divclass="spec module"id="module-F"><ahref="#module-F"class="anchor"></a><code><spanclass="keyword">module</span> F = Stdlib.Format</code></div><dl><dtclass="spec value"id="val-apply_to_first_actual"><ahref="#val-apply_to_first_actual"class="anchor"></a><code><spanclass="keyword">val</span> apply_to_first_actual : <span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><spanclass="type-var">'a</span><span>-></span><span>f:<span>(<ahref="../Absint/HilExp/index.html#type-access_expression">Absint.HilExp.access_expression</a><span>-></span><spanclass="type-var">'a</span>)</span></span><span>-></span><spanclass="type-var">'a</span></code></dt><dtclass="spec value"id="val-pp_exp"><ahref="#val-pp_exp"class="anchor"></a><code><spanclass="keyword">val</span> pp_exp : <ahref="index.html#module-F">F</a>.formatter <span>-></span><ahref="../Absint__HilExp/AccessExpression/index.html#type-t">AccessExpression.t</a><span>-></span> unit</code></dt><dd><p>language sensitive pretty-printer</p></dd></dl><divclass="spec module"id="module-Access"><ahref="#module-Access"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Access/index.html">Access</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec module"id="module-LockDomain"><ahref="#module-LockDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="LockDomain/index.html">LockDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Overapproximation of number of times the lock has been acquired</p></dd></dl><dl><dtclass="spec module"id="module-ThreadsDomain"><ahref="#module-ThreadsDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="ThreadsDomain/index.html">ThreadsDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Abstraction of threads that may run in parallel with the current thread. NoThread < AnyThreadExceptSelf < AnyThread</p></dd></dl><divclass="spec module"id="module-OwnershipAbstractValue"><ahref="#module-OwnershipAbstractValue"class="anchor"></a><code><spanclass="keyword">module</span><ahref="OwnershipAbstractValue/index.html">OwnershipAbstractValue</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec module"id="module-AccessSnapshot"><ahref="#module-AccessSnapshot"class="anchor"></a><code><spanclass="keyword">module</span><ahref="AccessSnapshot/index.html">AccessSnapshot</a> : <spanclass="keyword">sig</span> ... <spanclass="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><divclass="spec module"id="module-AccessDomain"><ahref="#module-AccessDomain"class="anchor"></a><code><spanclass="keyword">module</span> AccessDomain : <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 = <ahref="AccessSnapshot/index.html#type-t">AccessSnapshot.t</a></code></div><divclass="spec module"id="module-OwnershipDomain"><ahref="#module-OwnershipDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="OwnershipDomain/index.html">OwnershipDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-Attribute"><ahref="#module-Attribute"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Attribute/index.html">Attribute</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-AttributeMapDomain"><ahref="#module-AttributeMapDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="AttributeMapDomain/index.html">AttributeMapDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span> t</code><code> = </code><code>{</code><tableclass="record"><trid="type-t.threads"class="anchored"><tdclass="def field"><ahref="#type-t.threads"class="anchor"></a><code>threads : <ahref="ThreadsDomain/index.html#type-t">ThreadsDomain.t</a>;</code></td><tdclass="doc"><p>current thread: main, background, or unknown</p></td></tr><trid="type-t.locks"class="anchored"><tdclass="def field"><ahref="#type-t.locks"class="anchor"></a><code>locks : <ahref="LockDomain/index.html#type-t">LockDomain.t</a>;</code></td><tdclass="doc"><p>boolean that is true if a lock must currently be held</p></td></tr><trid="type-t.accesses"class="anchored"><tdclass="def field"><ahref="#type-t.accesses"class="anchor"></a><code>accesses : <ahref="index.html#module-AccessDomain">AccessDomain</a>.t;</code></td><tdclass="doc"><p>read and writes accesses performed without ownership permissions</p></td></tr><trid="type-t.ownership"class="anchored"><tdclass="def field"><ahref="#type-t.ownership"class="anchor"></a><code>ownership : <ahref="OwnershipDomain/index.html#type-t">OwnershipDomain.t</a>;</code></td><tdclass="doc"><p>map of access paths to ownership predicates</p></td></tr><trid="type-t.attribute_map"class="anchored"><tdclass="def field"><ahref="#type-t.attribute_map"class="anchor"></a><code>attribute_map : <ahref="AttributeMapDomain/index.html#type-t">AttributeMapDomain.t</a>;</code></td><tdclass="doc"><p>map of access paths to attributes such as owned, functional, ...</p></td></tr></table><code>}</code></dt></dl><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../Absint/AbstractDomain/index.html#module-type-WithBottom">Absint.AbstractDomain.WithBottom</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../Absint/AbstractDomain/module-type-WithBottom/index.html#type-t">t</a> := <ahref="index.html#type-t">t</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../Absint/AbstractDomain/index.html#module-type-S">Absint.AbstractDomain.S</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../Absint/AbstractDomain/index.html#module-type-NoJoin">Absint.AbstractDomain.NoJoin</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../IStdlib/PrettyPrintable/index.html#module-type-PrintableType">IStdlib.PrettyPrintable.PrintableType</a></code></span></summary><dl><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span> t</code></dt></dl><dl><dtclass="spec value"id="val-pp"><ahref="#val-pp"class="anchor"></a><code><spanclass="keyword">val</span> pp : <ahref="../IStdlib/PrettyPrintable/index.html#module-F">IStdlib.PrettyPrintable.F</a>.formatter <span>-></span><ahref="index.html#type-t">t</a><span>-></span> unit</code></dt></dl></details></div></div></div><dl><dtclass="spec value"id="val-leq"><ahref="#val-leq"class="anchor"></a><code><spanclass="keyword">val</span> leq : <span>lhs:<ahref="index.html#type-t">t</a></span><span>-></span><span>rhs:<ahref="index.html#type-t">t</a></span><span>-></span> bool</code></dt><dd><p>the implication relation: <code>lhs <= rhs</code> means <code>lhs |- rhs</code></p></dd></dl></details></div></div></div><dl><dtclass="spec value"id="val-join"><ahref="#val-join"class="anchor"></a><code><spanclass="keyword">val</span> join : <ahref="index.html#type-t">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-widen"><ahref="#val-widen"class="anchor"></a><code><spanclass="keyword">val</span> widen : <span>prev:<ahref="index.html#type-t">t</a></span><span>-></span><span>next:<ahref="index.html#type-t">t</a></span><span>-></span><span>num_iters:int</span><span>-></span><ahref="index.html#type-t">t</a></code></dt></dl></details></div></div></div><dl><dtclass="spec value"id="val-bottom"><ahref="#val-bottom"class="anchor"></a><code><spanclass="keyword">val</span> bottom : <ahref="index.html#type-t">t</a></code></dt><dd><p>The bottom value of the domain.</p></dd></dl><dl><dtclass="spec value"id="val-is_bottom"><ahref="#val-is_bottom"class="anchor"></a><code><spanclass="keyword">val</span> is_bottom : <ahref="index.html#type-t">t</a><span>-></span> bool</code></dt><dd><p>Return true if this is the bottom value</p></dd></dl></details></div></div></div><dl><dtclass="spec value"id="val-add_unannotated_call_access"><ahref="#val-add_unannotated_call_access"class="anchor"></a><code><spanclass="keyword">val</span> add_unannotated_call_access : <ahref="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><ahref="../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt></dl><dl><dtclass="spec type"id="type-summary"><ahref="#type-summary"class="anchor"></a><code><spanclass="keyword">type</span> summary</code><code> = </code><code>{</code><tableclass="record"><trid="type-summary.threads"class="anchored"><tdclass="def field"><ahref="#type-summary.threads"class="anchor"></a><code>threads : <ahref="ThreadsDomain/index.html#type-t">ThreadsDomain.t</a>;</code></td></tr><trid="type-summary.locks"class="anchored"><tdclass="def field"><ahref="#type-summary.locks"class="anchor"></a><code>locks : <ahref="LockDomain/index.html#type-t">LockDomain.t</a>;</code></td></tr><trid="type-summary.accesses"class="anchored"><tdclass="def field"><ahref="#type-summary.accesses"class="anchor"></a><code>accesses : <ahref="index.html#module-AccessDomain">AccessDomain</a>.t;</code></td></tr><trid="type-summary.return_ownership"class="anchored"><tdclass="def field"><ahref="#type-summary.return_ownership"class="anchor"></a><code>return_ownership : <ahref="OwnershipAbstractValue/index.html#type-t">OwnershipAbstractValue.t</a>;</code></td></tr><trid="type-summary.return_attribute"class="anchored"><tdclass="def field"><ahref="#type-summary.return_attribute"class="anchor"></a><code>return_attribute : <ahref="Attribute/index.html#type-t">Attribute.t</a>;</code></td></tr><trid="type-summary.attributes"class="anchored"><tdclass="def field"><ahref="#type-summary.attributes"class="anchor"></a><code>attributes : <ahref="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><dtclass="spec value"id="val-empty_summary"><ahref="#val-empty_summary"class="anchor"></a><code><spanclass="keyword">val</span> empty_summary : <ahref="index.html#type-summary">summary</a></code></dt><dtclass="spec value"id="val-pp_summary"><ahref="#val-pp_summary"class="anchor"></a><code><spanclass="keyword">val</span> pp_summary : <ahref="index.html#module-F">F</a>.formatter <span>-></span><ahref="index.html#type-summary">summary</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-astate_to_summary"><ahref="#val-astate_to_summary"class="anchor"></a><code><spanclass="keyword">val</span> astate_to_summary : <ahref="../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a><span>-></span><ahref="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-summary">summary</a></code></dt><dtclass="spec value"id="val-add_access"><ahref="#val-add_access"class="anchor"></a><code><spanclass="keyword">val</span> add_access : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><ahref="../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><span>is_write:bool</span><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-add_container_access"><ahref="#val-add_container_access"class="anchor"></a><code><spanclass="keyword">val</span> add_container_access : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><span>is_write:bool</span><span>-></span><ahref="../Absint/AccessPath/index.html#type-base">Absint.AccessPath.base</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><ahref="../IBase/Location/index.html#type-t">IBase.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-add_reads_of_hilexps"><ahref="#val-add_reads_of_hilexps"class="anchor"></a><code><spanclass="keyword">val</span> add_reads_of_hilexps : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><ahref="../IBase/Location/index.html#type-t">IBase.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-integrate_summary"><ahref="#val-integrate_summary"class="anchor"></a><code><spanclass="keyword">val</span> integrate_summary : <ahref="../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><span>callee_proc_desc:<ahref="../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a></span><span>-></span><ahref="index.html#type-summary">summary</a><span>-></span><ahref="../Absint/HilExp/index.html#type-access_expression">Absint.HilExp.access_expression</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><ahref="../IBase/Location/index.html#type-t">IBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt></dl></div></body></html>