<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>AbstractAddress (infer.Concurrency.AbstractAddress)</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>»<ahref="../index.html">Concurrency</a>» AbstractAddress</nav><h1>Module <code>Concurrency.AbstractAddress</code></h1></header><divclass="spec module"id="module-F"><ahref="#module-F"class="anchor"></a><code><spanclass="keyword">module</span> F = Stdlib.Format</code></div><aside><p>Type meant to represent abstract addresses based on access paths. It currently distinguishes between paths</p><ul><li>rooted at formal parameters (these are identified by the parameter index and the path without the root variable, though that variable is kept for pretty printing);</li><li>rooted at global variables;</li><li>non access-path expressions representing class objects (java only).</li></ul><p>Notably, there are no addresses rooted at locals (because proving aliasing between those is difficult).</p><p>There are two notions of equality:</p><ul><li>Equality for comparing two addresses within the same thread/process/trace. Under this, identical globals and identical class objects compare equal. Parameter-rooted paths compare equal if their parameter indices, types and lists of accesses are equal.</li><li>Equality for comparing two addresses in two distinct threads/traces. Globals and class objects are compared in the same way, but parameter-rooted paths need only have equal access lists (ie <code>x.f.g == y.f.g</code>). This allows demonically aliasing parameters in *distinct* threads.</li></ul></aside><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../IStdlib/PrettyPrintable/index.html#module-type-PrintableOrderedType">IStdlib.PrettyPrintable.PrintableOrderedType</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Set.OrderedType</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-compare"><ahref="#val-compare"class="anchor"></a><code><spanclass="keyword">val</span> compare : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span> int</code></dt></dl></details></div></div></div><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><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../../IStdlib/PrettyPrintable/module-type-PrintableType/index.html#type-t">t</a> := <ahref="index.html#type-t">t</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></details></div></div></div><dl><dtclass="spec value"id="val-describe"><ahref="#val-describe"class="anchor"></a><code><spanclass="keyword">val</span> describe : <ahref="index.html#module-F">F</a>.formatter <span