BufferOverrunDomain.Valtype t = {itv : Itv.t;Interval
*)itv_thresholds : ItvThresholds.t;itv_updated_by : ItvUpdatedBy.t;modeled_range : ModeledRange.t;powloc : AbsLoc.PowLoc.t;Simple pointers
*)arrayblk : ArrayBlk.t;Array blocks
*)func_ptrs : FuncPtr.Set.t;Function pointers
*)traces : BufferOverrunTrace.Set.t;}include Absint.AbstractDomain.S with type t := tinclude Absint.AbstractDomain.Comparable with type t := tinclude IStdlib.PrettyPrintable.PrintableType with type t := tval pp : IStdlib.PrettyPrintable.F.formatter -> t -> unitval bot : tval unknown : tval of_big_int : ItvThresholds.elt -> tval of_c_array_alloc :
AbsLoc.Allocsite.t ->
stride:int option ->
offset:Itv.t ->
size:Itv.t ->
traces:BufferOverrunTrace.Set.t ->
tConstruct C array allocation. stride is a byte size of cell, offset is initial offset of pointer which is usually zero, and size is a total number of cells.
val of_java_array_alloc :
AbsLoc.Allocsite.t ->
length:Itv.t ->
traces:BufferOverrunTrace.Set.t ->
tConstruct Java array allocation. size is a total number of cells
val of_int : int -> tval of_int_lit : IR.IntLit.t -> tval of_itv : ?traces:BufferOverrunTrace.Set.t -> Itv.t -> tval of_literal_string : IR.IntegerWidths.t -> string -> tval of_loc : ?traces:BufferOverrunTrace.Set.t -> AbsLoc.Loc.t -> tCreate a value for a pointer pointing to x.
val of_pow_loc : traces:BufferOverrunTrace.Set.t -> AbsLoc.PowLoc.t -> tCreate a value for a pointer pointing to locations in powloc.
val of_func_ptrs : FuncPtr.Set.t -> tval unknown_locs : tval unknown_from :
IR.Typ.t ->
callee_pname:IR.Procname.t option ->
location:IBase.Location.t ->
tUnknown return value of callee_pname
val is_bot : t -> boolCheck if the value is bottom
val is_unknown : t -> boolReturn true if the value represents an unknown value. Note that this does not mean that it is identical with Dom.Val.unknown. This is because an unknown value is bound to a particular location (this affects fields sym, offset_sym, and size_sym - see MemReach.add_heap) and a to particular assignment (this affects the field traces - see Val.add_assign_trace_elem).
val is_mone : t -> boolCheck if the value is [-1,-1]
val get_all_locs : t -> AbsLoc.PowLoc.tGet all locations, including pointers and array blocks
val get_array_locs : t -> AbsLoc.PowLoc.tGet locations of array blocks
val get_array_blk : t -> ArrayBlk.tGet a range of an iterator value, for example, if iterator value is [lb,ub], it returns [0,ub].
val get_modeled_range : t -> ModeledRange.tval get_pow_loc : t -> AbsLoc.PowLoc.tval get_func_ptrs : t -> FuncPtr.Set.tval get_traces : t -> BufferOverrunTrace.Set.tval set_array_length : IBase.Location.t -> length:t -> t -> tval set_array_offset : IBase.Location.t -> Itv.t -> t -> tval set_modeled_range : ModeledRange.t -> t -> tval plus_a :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tSemantics of Binop.PlusA. f_trace merges traces of the operands. If f_trace is not given, it uses a default heuristic merge function.
val minus_a :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tval mult :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tval div :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tval mod_sem :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tval shiftlt :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tval shiftrt :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tval band_sem :
?f_trace:
(BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t ->
BufferOverrunTrace.Set.t) ->
t ->
t ->
tSemantic function for some bit operators which are hard to express in the domain, e.g., Unop.BNot.
Pruning semantics for Binop.Eq. This prunes value of x when given x == y, i.e., prune_eq x y.
Pruning semantics for Binop.Ne. This prunes value of x when given x != y, i.e., prune_ne x y.
Pruning semantics for Binop.Lt. This prunes value of x when given x < y, i.e., prune_lt x y.
val prune_binop : IR.Binop.t -> t -> t -> tPrune value of x when given x bop y, i.e., prune_binop bop x y
val add_assign_trace_elem : IBase.Location.t -> AbsLoc.PowLoc.t -> t -> tAdd assign trace for given abstract locations
Semantics of cast. This updates type information in pointer values, rather than re-calculating sizes of array blocks.
val subst : t -> eval_sym_trace -> IBase.Location.t -> tSubstitution of symbols in the value
val transform_array_length : IBase.Location.t -> f:(Itv.t -> Itv.t) -> t -> tApply f on array lengths in the value
module Itv : sig ... end