BO.ArrayBlk
module ArrInfo : sig ... end
include Absint.AbstractDomain.MapS
with type key = AbsLoc.Allocsite.t
and type value = ArrInfo.t
include IStdlib.PrettyPrintable.PPMonoMap
with type key = AbsLoc.Allocsite.t
with type value = ArrInfo.t
include IStdlib.PrettyPrintable.MonoMap
with type key = AbsLoc.Allocsite.t
with type value = ArrInfo.t
type key = AbsLoc.Allocsite.t
type value = ArrInfo.t
val empty : t
val is_empty : t -> bool
val cardinal : t -> int
val is_singleton_or_more :
t ->
(key * value) IStdlib.IContainer.singleton_or_more
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp_key : IStdlib.PrettyPrintable.F.formatter -> key -> unit
include Absint.AbstractDomain.WithBottom with type t := t
include Absint.AbstractDomain.S with type t := t
include Absint.AbstractDomain.Comparable with type t := t
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val bottom : t
The bottom value of the domain.
val is_bottom : t -> bool
Return true if this is the bottom value
val bot : t
val make_c :
AbsLoc.Allocsite.t ->
offset:Itv.t ->
size:Itv.t ->
stride:Itv.t ->
t
Make an array block for C
val make_java : AbsLoc.Allocsite.t -> length:Itv.t -> t
Make an array block for Java
val unknown : t
val get_pow_loc : t -> AbsLoc.PowLoc.t
Return all allocsites as PowLoc.t
val is_bot : t -> bool
val is_unknown : t -> bool
val is_symbolic : t -> bool
Check if there is a symbolic integer value in its offset or size
Lift a comparison of Itv.t
and Loc.t
to that of t
. The comparison for Itv.t
is used for integer values such as offset and size, and the comparison for Loc.t
is used for allocsites.
val prune_binop : IR.Binop.t -> t -> t -> t
prune_binop bop x y
returns a pruned value of x
by bop
and y
.
Normalize all interval values such as offset and size in it. Thus, if an interval value is invalid, the interval value is replaced with bottom.
val subst :
t ->
Bounds.Bound.eval_sym ->
AbsLoc.PowLoc.eval_locpath ->
AbsLoc.PowLoc.t * t
Substitute symbolic abstract locations and symbolic interval value in the array block. eval_sym
is to get substituted interval values and eval_locpath
is to get substituted abstract locaion values. It also returns a set of abstract locations containing non-allocsite locations from the substitution results. Since the key of ArrayBlk.t
is AbsLoc.Allocsite.t
, they cannot be written in this domain.
val get_symbols : t -> Symb.SymbolSet.t
Return all symbols for integer values in it
Return offset of the array block. If cost_mode
is true
, it returns a conservative (bigger than correct one), but not correct offset results.