Concurrency.AbstractAddressType 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.PrintableOrderedTypeinclude IStdlib.PrettyPrintable.PrintableType with type t := tval pp : IStdlib.PrettyPrintable.F.formatter -> t -> unitval describe : F.formatter -> t -> unithuman readable description
val root_class : t -> IR.Typ.name optionClass of the root variable of the expression representing the address
val make : Absint.FormalMap.t -> Absint.HilExp.t -> t optionconvert an expression to a canonical form for an address
val is_class_object : t -> boolis 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 -> unitval make_subst : Absint.FormalMap.t -> Absint.HilExp.t list -> subst