Module InferModules.PulseDomain

module F = Stdlib.Format
type call_event =
| Call of InferIR.Typ.Procname.t

known function with summary

| Model of string

hardcoded model

| SkippedKnownCall of InferIR.Typ.Procname.t

known function without summary

| SkippedUnknownCall of InferIR.Exp.t

couldn't link the expression to a proc name

val describe_call_event : F.formatter -> call_event -> unit
module Invalidation : sig ... end
module ValueHistory : sig ... end
module InterprocAction : sig ... end
module Trace : sig ... end
module Attribute : sig ... end
module Attributes : sig ... end
module AbstractAddress : sig ... end
module AbstractAddressSet : InferStdlib.PrettyPrintable.PPSet with type PPSet.elt = AbstractAddress.t
module AbstractAddressMap : InferStdlib.PrettyPrintable.PPMap with type PPMap.key = AbstractAddress.t
module AddrTracePair : sig ... end
module Stack : sig ... end
module Memory : sig ... end
type t = {
heap : Memory.t;
stack : Stack.t;
}
val empty : t
include AbstractDomain.NoJoin with type t := t
val (<=) : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val reachable_addresses : t -> AbstractAddressSet.t

compute the set of abstract addresses that are "used" in the abstract state, i.e. reachable from the stack variables

type mapping
val empty_mapping : mapping
type isograph_relation =
| NotIsomorphic

no mapping was found that can make LHS the same as the RHS

| IsomorphicUpTo of mapping

mapping(lhs) is isomorphic to rhs

val isograph_map : lhs:t -> rhs:t -> mapping -> isograph_relation
val is_isograph : lhs:t -> rhs:t -> mapping -> bool