Module BO__BufferOverrunSemantics
val is_stack_exp : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> boolCheck if an expression is a stack variable such as
n$0or local variable for C array
val eval : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.tEvalute an expression
val eval_locs : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.AbsLoc.PowLoc.teval_locs exp memis likeeval exp mem |> Val.get_all_locsbut takes some shortcuts to avoid computing useless and/or problematic intermediate values
val eval_arr : IR.Typ.IntegerWidths.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.tReturn the array value of the input expression. For example, when
xis a program variable,eval_arr xreturns array blocks thexis pointing to, on the other hand,eval xreturns the abstract location ofx.
val eval_lindex : IR.Typ.IntegerWidths.t -> IR.Exp.t -> IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.tEvaluate array location with index, i.e.,
eval_lindex integer_type_widths array_exp index_exp mem
val eval_array_locs_length : BO.AbsLoc.PowLoc.t -> _ BO.BufferOverrunDomain.Mem.t0 -> BO.BufferOverrunDomain.Val.tEvaluate length of array locations
val eval_string_len : IR.Exp.t -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.Val.tEvaluate length of C string
val conservative_array_length : ?traces:BO.BufferOverrunTrace.Set.t -> BO.AbsLoc.PowLoc.t -> _ BO.BufferOverrunDomain.Mem.t0 -> BO.BufferOverrunDomain.Val.tEvaluate the array length conservatively, which is useful when there are multiple array locations and their lengths are joined to top. For example, if the
arr_locspoints to two arraysaandband if their lengths area.lengthandb.length, this function evaluates its length as[0, a.length.ub + b.length.ub].
type eval_mode=Several modes of ondemand evaluations
val mk_eval_sym_trace : ?is_args_ref:bool -> IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BO.BufferOverrunDomain.Mem.t -> mode:eval_mode -> BO.BufferOverrunDomain.eval_sym_traceMake
eval_symfunction for on-demand symbol evaluation
val mk_eval_sym_cost : IR.Typ.IntegerWidths.t -> (IR.Pvar.t * IR.Typ.t) list -> (IR.Exp.t * IR.Typ.t) list -> BO.BufferOverrunDomain.Mem.t -> BO.BufferOverrunDomain.eval_sym_traceMake
eval_symfunction ofEvalCostmode for on-demand symbol evaluation
module Prune : sig ... end