module Location_Bytes:sig..end
module M:sig..end
type t =
| |
Top of |
(* |
Garbled mix of the addresses in the set
| *) |
| |
Map of |
(* |
Precice set of addresses+offsets
| *) |
typesize_widen_hint =Ival.size_widen_hint
typegeneric_widen_hint =Base.t -> Ival.generic_widen_hint
typewiden_hint =size_widen_hint *
generic_widen_hint
include Lattice_type.AI_Lattice_with_cardinal_one
join, narrow, etc.include Lattice_type.With_Error_Top
include Datatype.S_with_collections
val singleton_zero : t0val singleton_one : t1val zero_or_one : t
val is_zero : t -> bool
val is_bottom : t -> bool
val top_int : t
val top_float : t
val top_single_precision_float : t
val inject : Base.t -> Ival.t -> t
val inject_ival : Ival.t -> t
val inject_float : Fval.F.t -> t
val add : Base.t -> Ival.t -> t -> tadd b i loc binds b to i in loc when i is not Ival.bottom,
and returns bottom otherwise.val diff : t ->
t -> targ2 needs to be exact or an
under_approximation.val diff_if_one : t ->
t -> targ2 can be an
over-approximation.val shift : Ival.t -> t -> t
val shift_under : Ival.t -> t -> tval sub_pointwise : ?factor:Int_Base.t ->
t -> t -> Ival.tloc1 and loc2.
Returns the pointwise substraction of their offsets
off1 - factor * off2. factor defaults to 1.val topify_arith_origin : t -> tval topify_misaligned_read_origin : t -> t
val topify_merge_origin : t -> t
val topify_leaf_origin : t -> t
val topify_with_origin : Origin.t -> t -> t
val topify_with_origin_kind : Origin.kind -> t -> t
val inject_top_origin : Origin.t -> Base.Hptset.t -> tinject_top_origin origin p creates a top with origin origin
and additional information paramval top_with_origin : Origin.t -> tval fold_bases : (Base.t -> 'a -> 'a) -> t -> 'a -> 'aTop bases.Error_Top in the case Top Top.val fold_i : (Base.t -> Ival.t -> 'a -> 'a) -> t -> 'a -> 'aError_Top in the cases Top Top, Top bases.val fold_topset_ok : (Base.t -> Ival.t -> 'a -> 'a) -> t -> 'a -> 'aTop bases. In this case,
Ival.top is supplied to the iterator.Error_Top in the case Top Top.val fold_enum : (t -> 'a -> 'a) ->
t -> 'a -> 'afold_enum f loc acc enumerates the locations in acc, and passes
them to f. Make sure to call Locations.Location_Bytes.cardinal_less_than before calling
this function, as all possible combinations of bases/offsets are
presented to f. Raises Error_Top if loc is Top _ or if
one offset cannot be enumerated.val cached_fold : cache_name:string ->
temporary:bool ->
f:(Base.t -> Ival.t -> 'a) ->
projection:(Base.t -> Ival.t) ->
joiner:('a -> 'a -> 'a) -> empty:'a -> t -> 'afold_i, for advanced usersval filter_base : (Base.t -> bool) -> t -> tval cardinal_zero_or_one : t -> bool
val cardinal_less_than : t -> int -> intcardinal_less_than v card returns the cardinal of v if it is less
than card, or raises Not_less_than.val cardinal : t -> Integer.t optionval find_lonely_key : t -> Base.t * Ival.tb in the location, then returns the
pair b,o where o are the offsets associated to b.Not_found otherwise.val find_lonely_binding : t -> Base.t * Ival.tb -> o in the location (that is, only
one base b with cardinal_zero_or_one o), returns the pair b,o.Not_found otherwiseval find : Base.t -> t -> Ival.tval find_or_bottom : Base.t -> M.t -> Ival.t
val split : Base.t -> t -> Ival.t * t
val get_bases : t -> Base.SetLattice.tBase.SetLattice.Top.val contains_addresses_of_locals : (M.key -> bool) ->
t -> boolcontains_addresses_of_locals is_local loc returns true
if loc contains the adress of a variable for which
is_local returns trueval remove_escaping_locals : (M.key -> bool) ->
t -> Base.SetLattice.t * tremove_escaping_locals is_local v removes from v information
associated with bases for which is_local returns true.val contains_addresses_of_any_locals : t -> boolcontains_addresses_of_any_locals loc returns true iff loc contains
the adress of a local variable or of a formal variable.val iter_on_strings : skip:Base.t option ->
(Base.t -> string -> int -> int -> unit) ->
t -> unit
val partially_overlaps : size:Abstract_interp.Int.t ->
t -> t -> boolsizeval is_relationable : t -> boolis_relationable loc returns true iff loc represents a single
memory location.val may_reach : Base.t -> t -> boolmay_reach base loc is true if base might be accessed from loc.