Module Concurrency__StarvationDomain.Lock
Abstract address for a lock. There are two notions of equality:
- Equality for comparing two addresses within the same thread/process/trace. Under this, identical globals and identical class objects compare equal. Locks represented by access paths rooted at method parameters must have equal access paths to compare equal. Paths rooted at locals are ignored.
 - Equality for comparing two addresses in two distinct threads/traces. Globals and class objects are compared in the same way, but locks represented by access paths rooted at parameters need only have equal access lists (ie 
x.f.g == y.f.g). This allows demonically aliasing parameters in *distinct* threads. This relation is used inmay_deadlock. 
include module type of Concurrency.AbstractAddress
include IStdlib.PrettyPrintable.PrintableOrderedType
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val equal : t -> t -> boolval equal_across_threads : IR.Tenv.t -> t -> t -> boolval root_class : t -> IR.Typ.name optionClass of the root variable of the expression representing the address
val get_typ : IR.Tenv.t -> t -> IR.Typ.t optionval 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){}orstatic synchronized void foo()
type substA substitution from formal position indices to address options.
Noneis 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 -> substval apply_subst : subst -> t -> t option
val pp_locks : F.formatter -> t -> unitval make_java_synchronized : Absint.FormalMap.t -> IR.Procname.t -> t optioncreate the monitor locked when entering a synchronized java method