Module Cvalue_type.V_Offsetmap


module V_Offsetmap: Offsetmap.Make(V_Or_Uninitialized)

type y 
type widen_hint 
include Datatype.S
val tag : t -> int
val empty : t
val is_empty : t -> bool
val pretty_c_assert_typ : string -> Cil_types.typ -> (unit -> unit) -> Format.formatter -> t -> unit
val pretty_typ : Cil_types.typ option -> Format.formatter -> t -> unit
val pretty_debug : Format.formatter -> t -> unit
val reduce : Ival.t -> size:Abstract_interp.Int.t -> y -> t -> t
reduce i s v o tries to reduce the offsetmap o with the additional knowledge that the value of size s at i is included in v. May raise Result_is_same.
val is_included : t -> t -> bool
val is_included_exn : t -> t -> unit
val is_included_exn_generic : (y -> y -> unit) -> t -> t -> unit
val is_included_actual_generic : Base.Set.t ->
Base.Set.t Pervasives.ref ->
Locations.Location_Bytes.t Base.Map.t Pervasives.ref -> t -> t -> unit
val join : t -> t -> (Abstract_interp.Int.t * Abstract_interp.Int.t) list * t
val widen : widen_hint -> t -> t -> t
val find_ival : conflate_bottom:bool ->
validity:Base.validity ->
with_alarms:CilE.warn_mode ->
Ival.t -> t -> Abstract_interp.Int.t -> y
May raise Not_found if V.top is found
val cardinal_zero_or_one : Base.validity -> t -> bool
val find_imprecise_entire_offsetmap : validity:Base.validity -> t -> y
val concerned_bindings_ival : offsets:Ival.t ->
offsetmap:t ->
size:Abstract_interp.Int.t -> y list -> y list
accumulates the list of the values associated to at least one bit of the ival. For this function Top is not a binding!
val update_ival : with_alarms:CilE.warn_mode ->
validity:Base.validity ->
exact:bool ->
offsets:Ival.t -> size:Abstract_interp.Int.t -> t -> y -> t
May raise Result_is_bottom if this is completely out of bound
val overwrite : t -> y -> Origin.t -> t
overwrite m v o computes the offsetmap resulting from writing v potentially anywhere in m
val over_intersection : t -> t -> t
An over-approximation of the intersection. The arguments can not be arbitrary offsetmaps: the algorithm would be too complicated. The provided algorithm should work fine with offsetmaps that correspond to the relation view and the memory view of the same analysed code.
val from_string : string -> t
val add_internal : Offsetmap.itv ->
Abstract_interp.Int.t * Abstract_interp.Int.t * y -> t -> t
val add_whole : Offsetmap.itv -> y -> t -> t
val remove_whole : Offsetmap.itv -> t -> t
val fold_whole : size:Abstract_interp.Int.t ->
(Ival.t -> Abstract_interp.Int.t -> y -> 'a -> 'a) ->
t -> 'a -> 'a
May raise Invalid_argument "Offsetmap.Make.fold"
val fold_single_bindings : size:Abstract_interp.Int.t ->
(Ival.t -> Abstract_interp.Int.t -> y -> 'a -> 'a) ->
t -> 'a -> 'a
May raise Invalid_argument "Offsetmap.Make.fold"
val fold_internal : (Offsetmap.itv ->
Abstract_interp.Int.t * Abstract_interp.Int.t * y -> 'a -> 'a) ->
t -> 'a -> 'a
val shift_ival : Ival.t -> t -> t option -> t option
shift_ival shift o acc returns the join of acc and of o shifted by all values in shift. Raises Found_Top when the result is Top.
val copy_paste : t ->
Abstract_interp.Int.t ->
Abstract_interp.Int.t -> Abstract_interp.Int.t -> t -> t
val copy_merge : t ->
Abstract_interp.Int.t ->
Abstract_interp.Int.t -> Abstract_interp.Int.t -> t -> t
val copy_offsmap : t -> Abstract_interp.Int.t -> Abstract_interp.Int.t -> t
val copy_ival : validity:Base.validity ->
with_alarms:CilE.warn_mode -> Ival.t -> t -> Abstract_interp.Int.t -> t
val merge_by_itv : t -> t -> Abstract_value.Int_Intervals.t -> t
val shift : Abstract_interp.Int.t -> t -> t
val sized_zero : size_in_bits:Abstract_interp.Int.t -> t
val reciprocal_image : t -> Base.t -> Abstract_value.Int_Intervals.t * Ival.t
reciprocal_image m b is the set of bits in the offsetmap m that may lead to Top(b) and the set of offsets in m where one can read an address b+_
val create_initial : v:y -> modu:Abstract_interp.Int.t -> t
val reduce_by_int_intervals : t -> Abstract_value.Int_Intervals.t -> t
val top_stuff : (y -> bool) -> (y -> y) -> t -> t
val iter_contents : (y -> unit) -> t -> Abstract_interp.Int.t -> unit
Iter on the contents of offsetmap of given size
val fold : (Abstract_interp.Int.t * Abstract_interp.Int.t ->
Abstract_interp.Int.t * Abstract_interp.Int.t * y -> 'a -> 'a) ->
t -> 'a -> 'a