Module PulseAttribute.Attributes

include IStdlib.PrettyPrintable.PPUniqRankSet with type elt = t
type t
val compare : t -> t -> int
val equal : t -> t -> bool
type rank
type elt = t
val add : t -> elt -> t
val empty : t
val find_rank : t -> rank -> elt option
val fold : t -> init:'accum -> f:('accum -> elt -> 'accum) -> 'accum
val fold_map : t -> init:'accum -> f:('accum -> elt -> 'accum * elt) -> 'accum * t
val for_all : f:(elt -> bool) -> t -> bool
val is_empty : t -> bool
val is_singleton : t -> bool
val is_subset : t -> of_:t -> bool
val map : t -> f:(elt -> elt) -> t
val singleton : elt -> t
val elements : t -> elt list
val remove : elt -> t -> t
val mem : elt -> t -> bool
val union_prefer_left : t -> t -> t

in case an element with the same rank is present both in lhs and rhs, keep the one from lhs in union_prefer_left lhs rhs

val pp : ?⁠print_rank:bool -> IStdlib.PrettyPrintable.F.formatter -> t -> unit
val get_address_of_stack_variable : t -> (IR.Var.t * IBase.Location.t * ValueHistory.t) option
val get_closure_proc_name : t -> IR.Procname.t option
val get_allocation : t -> (IR.Procname.t * Trace.t) option
val get_dynamic_type : t -> IR.Typ.t option
val is_end_of_collection : t -> bool
val get_invalid : t -> (Invalidation.t * Trace.t) option
val get_isl_abduced : t -> Trace.t option
val get_must_be_valid : t -> (Trace.t * Invalidation.must_be_valid_reason option) option
val get_written_to : t -> Trace.t option
val is_modified : t -> bool
val is_std_vector_reserved : t -> bool
val is_uninitialized : t -> bool
val get_must_be_initialized : t -> Trace.t option
val isl_subset : t -> t -> bool

check whether for each attr in the second list, there exists a corresponding attr in the first according to Attributes.isl_equiv.

val replace_isl_abduced : t -> t -> t

While applying a spec, replacing ISLAbduced by Allocated and Invalidation.Cfree by Invalidation.delete, if applicable