Concurrency.AbstractAddress
Type meant to represent abstract addresses based on access paths. It currently distinguishes between paths
Notably, there are no addresses rooted at locals (because proving aliasing between those is difficult).
There are two notions of equality:
x.f.g == y.f.g
). This allows demonically aliasing parameters in *distinct* threads.include IStdlib.PrettyPrintable.PrintableOrderedType
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val describe : F.formatter -> t -> unit
human readable description
val root_class : t -> IR.Typ.name option
Class of the root variable of the expression representing the address
val make : Absint.FormalMap.t -> Absint.HilExp.t -> t option
convert an expression to a canonical form for an address
val is_class_object : t -> bool
is the address a Java class object such as in synchronized(MyClass.class){}
or static synchronized void foo()
A substitution from formal position indices to address options. None
is used to for actuals that cannot be resolved to an address (eg local-rooted paths or arithmetic expressions).
val pp_subst : F.formatter -> subst -> unit
val make_subst : Absint.FormalMap.t -> Absint.HilExp.t list -> subst