Module BufferOverrunDomain.MemReach

type 'has_oenv t0 = {
stack_locs : StackLocs.t;
mem_pure : MemPure.t;
alias : Alias.t;
latest_prune : LatestPrune.t;
relation : Relation.t;
oenv : ('has_oenvOndemandEnv.t) InferStdlib.GOption.t;
}
type no_oenv_t = InferStdlib.GOption.none t0
type t = InferStdlib.GOption.some t0
val init : OndemandEnv.t -> t
val (<=) : lhs:'a t0 -> rhs:'a t0 -> bool
val widen : prev:InferStdlib.GOption.some t0 -> next:InferStdlib.GOption.some t0 -> num_iters:int -> InferStdlib.GOption.some t0
val join : t -> t -> t
val pp : F.formatter -> 'a t0 -> unit
val unset_oenv : t -> no_oenv_t
val is_stack_loc : AbsLoc.Loc.t -> 'a t0 -> bool
val is_rep_multi_loc : AbsLoc.Loc.t -> 'a t0 -> bool
val find_opt : AbsLoc.Loc.t -> 'a t0 -> Val.t option
val find_stack : AbsLoc.Loc.t -> 'a t0 -> Val.t
val find_heap_default : default:Val.t -> ?⁠typ:InferIR.Typ.t -> AbsLoc.Loc.t -> 'a t0 -> Val.t
val find_heap : ?⁠typ:InferIR.Typ.t -> AbsLoc.Loc.t -> 'a t0 -> Val.t
val find : ?⁠typ:InferIR.Typ.t -> AbsLoc.Loc.t -> 'a t0 -> Val.t
val find_set : ?⁠typ:InferIR.Typ.t -> AbsLoc.PowLoc.t -> 'a t0 -> Val.t
val find_alias : InferIR.Ident.t -> 'a t0 -> AliasTarget.t option
val find_simple_alias : InferIR.Ident.t -> 'a t0 -> (AbsLoc.Loc.t * InferIR.IntLit.t option) option
val find_ret_alias : 'a t0 -> AliasTarget.t option
val load_alias : InferIR.Ident.t -> AliasTarget.t -> t -> t
val store_simple_alias : AbsLoc.Loc.t -> InferIR.Exp.t -> t -> t
val store_empty_alias : Val.t -> AbsLoc.Loc.t -> t -> t
val fgets_alias : InferIR.Ident.t -> AbsLoc.PowLoc.t -> t -> t
val add_stack_loc : AbsLoc.Loc.t -> t -> t
val add_stack : ?⁠represents_multiple_values:bool -> AbsLoc.Loc.t -> Val.t -> t -> t
val replace_stack : AbsLoc.Loc.t -> Val.t -> t -> t
val add_heap : ?⁠represents_multiple_values:bool -> AbsLoc.Loc.t -> Val.t -> t -> t
val add_heap_set : ?⁠represents_multiple_values:bool -> AbsLoc.PowLoc.t -> Val.t -> t -> t
val add_unknown_from : InferIR.Ident.t -> callee_pname:InferIR.Typ.Procname.t option -> location:InferBase.Location.t -> t -> t
val strong_update : AbsLoc.PowLoc.t -> Val.t -> t -> t
val transformi_mem : f:(AbsLoc.Loc.t -> Val.t -> Val.t) -> AbsLoc.PowLoc.t -> t -> t
val transform_mem : f:(Val.t -> Val.t) -> AbsLoc.PowLoc.t -> t -> t
val weak_update : AbsLoc.PowLoc.t -> Val.t -> t -> t
val update_mem : AbsLoc.PowLoc.t -> Val.t -> t -> t
val remove_temp : InferIR.Ident.t -> t -> t
val remove_temps : InferIR.Ident.t list -> t -> t
val set_prune_pairs : PrunePairs.t -> t -> t
val apply_latest_prune : InferIR.Exp.t -> t -> t * PrunePairs.t
val update_latest_prune : updated_locs:AbsLoc.PowLoc.t -> InferIR.Exp.t -> InferIR.Exp.t -> t -> t
val get_latest_prune : 'a t0 -> LatestPrune.t
val set_latest_prune : LatestPrune.t -> t -> t
val get_reachable_locs_from_aux : f:(InferIR.Pvar.t -> bool) -> AbsLoc.PowLoc.t -> 'a t0 -> AbsLoc.PowLoc.t
val get_reachable_locs_from : (InferIR.Pvar.t * InferIR.Typ.t) list -> AbsLoc.PowLoc.t -> 'a t0 -> AbsLoc.PowLoc.t
val range : filter_loc:(AbsLoc.Loc.t -> LoopHeadLoc.t option) -> t -> Polynomials.NonNegativePolynomial.t
val get_relation : t -> Relation.t
val is_relation_unsat : t -> bool
val lift_relation : (Relation.t -> Relation.t) -> t -> t
val meet_constraints : Relation.Constraints.t -> t -> t
val store_relation : AbsLoc.PowLoc.t -> (Relation.SymExp.t option * Relation.SymExp.t option * Relation.SymExp.t option) -> t -> t
val relation_forget_locs : AbsLoc.PowLoc.t -> t -> t
val forget_unreachable_locs : formals:(InferIR.Pvar.t * InferIR.Typ.t) list -> t -> t
val init_param_relation : AbsLoc.Loc.t -> t -> t
val init_array_relation : AbsLoc.Allocsite.t -> offset_opt:Itv.t option -> size:Itv.t -> size_exp_opt:Relation.SymExp.t option -> t -> t
val instantiate_relation : Relation.SubstMap.t -> caller:t -> callee:no_oenv_t -> t
val set_first_idx_of_null : AbsLoc.Loc.t -> Val.t -> t -> t
val unset_first_idx_of_null : AbsLoc.Loc.t -> Val.t -> t -> t