Concurrency.RacerDDomainmodule AccessExpression = Absint.HilExp.AccessExpressionval apply_to_first_actual :
Absint.HilExp.t list ->
'a ->
f:(Absint.HilExp.access_expression -> 'a) ->
'aval pp_exp : F.formatter -> AccessExpression.t -> unitlanguage sensitive pretty-printer
module Access : sig ... endmodule LockDomain : sig ... endOverapproximation of number of times the lock has been acquired
module ThreadsDomain : sig ... endAbstraction of threads that may run in parallel with the current thread. NoThread < AnyThreadExceptSelf < AnyThread
module OwnershipAbstractValue : sig ... endmodule AccessSnapshot : sig ... endsnapshot of the relevant state at the time of a heap access: concurrent thread(s), lock(s) held, ownership precondition
module AccessDomain :
Absint.AbstractDomain.FiniteSetS with type elt = AccessSnapshot.tmodule OwnershipDomain : sig ... endmodule Attribute : sig ... endmodule AttributeMapDomain : sig ... endmodule NeverReturns : Absint.AbstractDomain.Stype t = {threads : ThreadsDomain.t;current thread: main, background, or unknown
*)locks : LockDomain.t;boolean that is true if a lock must currently be held
*)never_returns : NeverReturns.t;boolean which is true if a noreturn call is always reached
accesses : AccessDomain.t;read and writes accesses performed without ownership permissions
*)ownership : OwnershipDomain.t;map of access paths to ownership predicates
*)attribute_map : AttributeMapDomain.t;map of access paths to attributes such as owned, functional, ...
*)}include Absint.AbstractDomain.S with type t := tinclude Absint.AbstractDomain.Comparable with type t := tinclude IStdlib.PrettyPrintable.PrintableType with type t := tval pp : IStdlib.PrettyPrintable.F.formatter -> t -> unitval initial : tval add_unannotated_call_access :
Absint.FormalMap.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
IBase.Location.t ->
t ->
ttype summary = {threads : ThreadsDomain.t;locks : LockDomain.t;never_returns : NeverReturns.t;accesses : AccessDomain.t;return_ownership : OwnershipAbstractValue.t;return_attribute : Attribute.t;attributes : AttributeMapDomain.t;}same as astate, but without attribute_map (since these involve locals) and with the addition of the ownership/attributes associated with the return value as well as the set of formals which may escape
val empty_summary : summaryval pp_summary : F.formatter -> summary -> unitval astate_to_summary : IR.Procdesc.t -> Absint.FormalMap.t -> t -> summaryval add_access :
IR.Tenv.t ->
Absint.FormalMap.t ->
IBase.Location.t ->
is_write:bool ->
t ->
Absint.HilExp.t ->
tval add_container_access :
IR.Tenv.t ->
Absint.FormalMap.t ->
is_write:bool ->
Absint.AccessPath.base ->
IR.Procname.t ->
Absint.HilExp.t list ->
IBase.Location.t ->
t ->
tval add_reads_of_hilexps :
IR.Tenv.t ->
Absint.FormalMap.t ->
Absint.HilExp.t list ->
IBase.Location.t ->
t ->
tval integrate_summary :
Absint.FormalMap.t ->
callee_proc_attrs:IR.ProcAttributes.t ->
summary ->
Absint.HilExp.access_expression ->
IR.Procname.t ->
Absint.HilExp.t list ->
IBase.Location.t ->
t ->
tval lock_if_true : Absint.HilExp.access_expression -> t -> tval branch_never_returns : unit -> t