Module Pulselib.PulseBaseAddressAttributes

module F = Stdlib.Format
type t
val compare : t -> t -> int
val equal : t -> t -> bool
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val empty : t
val filter : (PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.Attributes.t -> bool) -> t -> t
val for_all : (PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.Attributes.t -> bool) -> t -> bool
val filter_with_discarded_addrs : (PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.Attributes.t -> bool) -> t -> t * PulseBasicInterface.AbstractValue.t list
val find_opt : PulseBasicInterface.AbstractValue.t -> t -> PulseBasicInterface.Attributes.t option
val add_one : PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.Attribute.t -> t -> t
val add : PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.Attributes.t -> t -> t
val allocate : IR.Procname.t -> (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) -> IBase.Location.t -> t -> t
val fold : (PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.Attributes.t -> 'a -> 'a) -> t -> 'a -> 'a
val check_valid : PulseBasicInterface.AbstractValue.t -> t -> (unit, PulseBasicInterface.Invalidation.t * PulseBasicInterface.Trace.t) IStdlib.IStd.result
val check_initialized : PulseBasicInterface.AbstractValue.t -> t -> (unit, unit) IStdlib.IStd.result
val invalidate : (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) -> PulseBasicInterface.Invalidation.t -> IBase.Location.t -> t -> t
val get_allocation : PulseBasicInterface.AbstractValue.t -> t -> (IR.Procname.t * PulseBasicInterface.Trace.t) option
val get_closure_proc_name : PulseBasicInterface.AbstractValue.t -> t -> IR.Procname.t option
val get_invalid : PulseBasicInterface.AbstractValue.t -> t -> (PulseBasicInterface.Invalidation.t * PulseBasicInterface.Trace.t) option
val get_must_be_valid : PulseBasicInterface.AbstractValue.t -> t -> (PulseBasicInterface.Trace.t * PulseBasicInterface.Invalidation.must_be_valid_reason option) option
val is_must_be_valid_or_allocated_isl : PulseBasicInterface.AbstractValue.t -> t -> bool
val get_must_be_initialized : PulseBasicInterface.AbstractValue.t -> t -> PulseBasicInterface.Trace.t option
val add_dynamic_type : IR.Typ.t -> PulseBasicInterface.AbstractValue.t -> t -> t
val get_dynamic_type : t -> PulseBasicInterface.AbstractValue.t -> IR.Typ.t option
val std_vector_reserve : PulseBasicInterface.AbstractValue.t -> t -> t
val is_std_vector_reserved : PulseBasicInterface.AbstractValue.t -> t -> bool
val mark_as_end_of_collection : PulseBasicInterface.AbstractValue.t -> t -> t
val is_end_of_collection : PulseBasicInterface.AbstractValue.t -> t -> bool
val add_unreachable_at : PulseBasicInterface.AbstractValue.t -> IBase.Location.t -> t -> t
val pp : F.formatter -> t -> unit
val remove_allocation_attr : PulseBasicInterface.AbstractValue.t -> t -> t
val remove_must_be_valid_attr : PulseBasicInterface.AbstractValue.t -> t -> t
val remove_isl_abduced_attr : PulseBasicInterface.AbstractValue.t -> t -> t
val initialize : PulseBasicInterface.AbstractValue.t -> t -> t
val canonicalize : get_var_repr:(PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.AbstractValue.t) -> t -> t

merge the attributes of all the variables that are equal according to get_var_repr and remove non-canonical variables in favor of their rerpresentative

val subst_var : (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.AbstractValue.t) -> t -> t