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.
10 lines
14 KiB
10 lines
14 KiB
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>RacerDDomain (infer.InferModules.RacerDDomain)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> — <span class="package">package <a href="../../index.html">infer</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">InferModules.RacerDDomain</span></h1></header><div class="spec module" id="module-F"><a href="#module-F" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>F = Format</code></div><div class="doc"></div></div><div class="spec module" id="module-Access"><a href="#module-Access" class="anchor"></a><div class="def module"><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><div class="doc"></div></div><div class="spec module" id="module-TraceElem"><a href="#module-TraceElem" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="TraceElem/index.html">TraceElem</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><div class="spec module" id="module-PathDomain"><a href="#module-PathDomain" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="PathDomain/index.html">PathDomain</a> : <a href="../SinkTrace/index.html#module-type-S">SinkTrace.S</a><span class="keyword"> with </span><span class="keyword">module </span><a href="../SinkTrace/module-type-S/Source/index.html">Source</a> = <a href="../Source/index.html#module-Dummy">Source.Dummy</a><span class="keyword"> and </span><span class="keyword">module </span><a href="../SinkTrace/module-type-S/Sink/index.html">Sink</a> = <a href="../SinkTrace/index.html#module-MakeSink">SinkTrace.MakeSink(TraceElem)</a></code></div><div class="doc"></div></div><div class="spec module" id="module-LocksDomain"><a href="#module-LocksDomain" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="LocksDomain/index.html">LocksDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><p>Overapproximation of number of locks that are currently held</p></div></div><div class="spec module" id="module-ThreadsDomain"><a href="#module-ThreadsDomain" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="ThreadsDomain/index.html">ThreadsDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><p>Abstraction of threads that may run in parallel with the current thread.
|
|
NoThread < AnyThreadExceptSelf < AnyThread</p></div></div><div class="spec module" id="module-AccessSnapshot"><a href="#module-AccessSnapshot" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="AccessSnapshot/index.html">AccessSnapshot</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><p>snapshot of the relevant state at the time of a heap access: concurrent thread(s), lock(s) held,
|
|
ownership precondition</p></div></div><div class="spec module" id="module-AccessDomain"><a href="#module-AccessDomain" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="AccessDomain/index.html">AccessDomain</a> : <span class="keyword">module type of </span><span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><p>map of access metadata |-> set of accesses. the map should hold all accesses to a
|
|
possibly-unowned access path</p></div></div><div class="spec module" id="module-OwnershipAbstractValue"><a href="#module-OwnershipAbstractValue" class="anchor"></a><div class="def module"><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><div class="doc"><p>Powerset domain on the formal indexes in OwnedIf with a distinguished bottom element (Owned)
|
|
and top element (Unowned)</p></div></div><div class="spec module" id="module-OwnershipDomain"><a href="#module-OwnershipDomain" class="anchor"></a><div class="def module"><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="doc"></div></div><div class="spec module" id="module-Choice"><a href="#module-Choice" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="Choice/index.html">Choice</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><p>attribute attached to a boolean variable specifying what it means when the boolean is true</p></div></div><div class="spec module" id="module-Attribute"><a href="#module-Attribute" class="anchor"></a><div class="def module"><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="doc"></div></div><div class="spec module" id="module-AttributeSetDomain"><a href="#module-AttributeSetDomain" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="AttributeSetDomain/index.html">AttributeSetDomain</a> : <span class="keyword">module type of </span><span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><div class="spec module" id="module-AttributeMapDomain"><a href="#module-AttributeMapDomain" class="anchor"></a><div class="def module"><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><div class="doc"></div></div><div class="spec module" id="module-StabilityDomain"><a href="#module-StabilityDomain" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="StabilityDomain/index.html">StabilityDomain</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><div class="spec type" id="type-astate"><a href="#type-astate" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>astate</code><code></code><code><span class="keyword"> = </span></code><code>{</code><table class="record"><tr id="type-astate.threads" class="anchored"><td class="def field"><a href="#type-astate.threads" class="anchor"></a><code>threads : <a href="ThreadsDomain/index.html#type-astate">ThreadsDomain.astate</a>;</code></td><td class="doc"><p>(** current thread: main, background, or unknown *)</p></td></tr><tr id="type-astate.locks" class="anchored"><td class="def field"><a href="#type-astate.locks" class="anchor"></a><code>locks : <a href="LocksDomain/index.html#type-astate">LocksDomain.astate</a>;</code></td><td class="doc"><p>(** boolean that is true if a lock must currently be held *)</p></td></tr><tr id="type-astate.accesses" class="anchored"><td class="def field"><a href="#type-astate.accesses" class="anchor"></a><code>accesses : <a href="AccessDomain/index.html#type-astate">AccessDomain.astate</a>;</code></td><td class="doc"><p>(** read and writes accesses performed without ownership permissions *)</p></td></tr><tr id="type-astate.ownership" class="anchored"><td class="def field"><a href="#type-astate.ownership" class="anchor"></a><code>ownership : <a href="OwnershipDomain/index.html#type-astate">OwnershipDomain.astate</a>;</code></td><td class="doc"><p>(** map of access paths to ownership predicates *)</p></td></tr><tr id="type-astate.attribute_map" class="anchored"><td class="def field"><a href="#type-astate.attribute_map" class="anchor"></a><code>attribute_map : <a href="AttributeMapDomain/index.html#type-astate">AttributeMapDomain.astate</a>;</code></td><td class="doc"><p>(** map of access paths to attributes such as owned, functional, ... *)</p></td></tr><tr id="type-astate.wobbly_paths" class="anchored"><td class="def field"><a href="#type-astate.wobbly_paths" class="anchor"></a><code>wobbly_paths : <a href="StabilityDomain/index.html#type-astate">StabilityDomain.astate</a>;</code></td><td class="doc"><p>(** Record the "touched" paths that can compromise the race detection * *)</p></td></tr></table><code>}</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-summary"><a href="#type-summary" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>summary</code><code></code><code><span class="keyword"> = </span></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-astate">ThreadsDomain.astate</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="LocksDomain/index.html#type-astate">LocksDomain.astate</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="AccessDomain/index.html#type-astate">AccessDomain.astate</a>;</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-astate">OwnershipAbstractValue.astate</a>;</code></td></tr><tr id="type-summary.return_attributes" class="anchored"><td class="def field"><a href="#type-summary.return_attributes" class="anchor"></a><code>return_attributes : <a href="AttributeSetDomain/index.html#type-astate">AttributeSetDomain.astate</a>;</code></td></tr><tr id="type-summary.wobbly_paths" class="anchored"><td class="def field"><a href="#type-summary.wobbly_paths" class="anchor"></a><code>wobbly_paths : <a href="StabilityDomain/index.html#type-astate">StabilityDomain.astate</a>;</code></td></tr></table><code>}</code><code></code></div><div class="doc"><p>same as astate, but without <code class="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></div></div><div class="spec include"><div class="doc"></div><details open="open"><summary><span class="def"><code><span class="keyword">include </span><a href="../AbstractDomain/index.html#module-type-WithBottom">AbstractDomain.WithBottom</a><span class="keyword"> with </span><span class="keyword">type </span><a href="../AbstractDomain/module-type-WithBottom/index.html#type-astate">astate</a> := <a href="index.html#type-astate">astate</a></code></span></summary><div class="spec include"><div class="doc"></div><details open="open"><summary><span class="def"><code><span class="keyword">include </span><a href="../AbstractDomain/index.html#module-type-S">AbstractDomain.S</a></code></span></summary><div class="spec type" id="type-astate"><a href="#type-astate" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>astate</code><code></code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-(<=)"><a href="#val-(<=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(<=) : lhs:<a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> rhs:<a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> bool</code></div><div class="doc"><p>the partial order induced by join</p></div></div><div class="spec val" id="val-join"><a href="#val-join" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>join : <a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> <a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> <a href="index.html#type-astate">astate</a></code></div><div class="doc"></div></div><div class="spec val" id="val-widen"><a href="#val-widen" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>widen : prev:<a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> next:<a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> num_iters:int <span class="keyword">‑></span> <a href="index.html#type-astate">astate</a></code></div><div class="doc"></div></div><div class="spec val" id="val-pp"><a href="#val-pp" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp : <a href="../AbstractDomain/index.html#module-F">InferModules.AbstractDomain.F</a>.formatter <span class="keyword">‑></span> <a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> unit</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-empty"><a href="#val-empty" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>empty : <a href="index.html#type-astate">astate</a></code></div><div class="doc"><p>The bottom value of the domain.
|
|
Naming it empty instead of bottom helps to bind the empty
|
|
value for sets and maps to the natural definition for bottom</p></div></div><div class="spec val" id="val-is_empty"><a href="#val-is_empty" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>is_empty : <a href="index.html#type-astate">astate</a> <span class="keyword">‑></span> bool</code></div><div class="doc"><p>Return true if this is the bottom value</p></div></div></details></div><div class="spec val" id="val-pp_summary"><a href="#val-pp_summary" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp_summary : <a href="index.html#module-F">F</a>.formatter <span class="keyword">‑></span> <a href="index.html#type-summary">summary</a> <span class="keyword">‑></span> unit</code></div><div class="doc"></div></div></body></html> |