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>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>-></span><ahref="index.html#type-t">t</a><span>-></span> unit</code></dt><dd><p>human readable description</p></dd></dl><dl><dtclass="spec value"id="val-equal"><ahref="#val-equal"class="anchor"></a><code><spanclass="keyword">val</span> equal : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span> bool</code></dt><dtclass="spec value"id="val-equal_across_threads"><ahref="#val-equal_across_threads"class="anchor"></a><code><spanclass="keyword">val</span> equal_across_threads : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span> bool</code></dt><dtclass="spec value"id="val-root_class"><ahref="#val-root_class"class="anchor"></a><code><spanclass="keyword">val</span> root_class : <ahref="index.html#type-t">t</a><span>-></span><span><ahref="../../IR/Typ/index.html#type-name">IR.Typ.name</a> option</span></code></dt><dd><p>Class of the root variable of the expression representing the address</p></dd></dl><dl><dtclass="spec value"id="val-get_typ"><ahref="#val-get_typ"class="anchor"></a><code><spanclass="keyword">val</span> get_typ : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="../../IR/Typ/index.html#type-t">IR.Typ.t</a> option</span></code></dt><dtclass="spec value"id="val-make"><ahref="#val-make"class="anchor"></a><code><spanclass="keyword">val</span> make : <ahref="../../Absint/FormalMap/index.html#type-t">Absint.FormalMap.t</a><span>-></span><ahref="../../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a><span>-></span><span><ahref="index.html#type-t">t</a> option</span></code></dt><dd><p>convert an expression to a canonical form for an address</p></dd></dl><dl><dtclass="spec value"id="val-is_class_object"><ahref="#val-is_class_object"class="anchor"></a><code><spanclass="keyword">val</span> is_class_object : <ahref="index.html#type-t">t</a><span>-></span> bool</code></dt><dd><p>is the address a Java class object such as in <code>synchronized(MyClass.class){}</code> or <code>static synchronized void foo()</code></p></dd></dl><dl><dtclass="spec type"id="type-subst"><ahref="#type-subst"class="anchor"></a><code><spanclass="keyword">type</span> subst</code></dt><dd><p>A substitution from formal position indices to address options. <code>None</code> is used to for actuals that cannot be resolved to an address (eg local-rooted paths or arithmetic expressions).</p></dd></dl><dl><dtclass="spec value"id="val-pp_subst"><ahref="#val-pp_subst"class="anchor"></a><code><spanclass="keyword">val</span> pp_subst : <ahref="index.html#module-F">F</a>.formatter <span>-></span><ahref="index.html#type-subst">subst</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-make_subst"><ahref="#val-make_subst"class="anchor"></a><code><spanclass="keyword">val</span> make_subst : <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="index.html#type-subst">subst</a></code></dt><dtclass="spec value"id="val-apply_subst"><ahref="#val-apply_subst"class="anchor"></a><code><spanclass="keyword">val</span> apply_subst : <ahref="index.html#type-subst">subst</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#type-t">t</a> option</span></code></dt></dl></div></body></html>