ArrayDomain.StrWithDomaininclude Strinclude S0include Lattice.Sinclude Lattice.POinclude Printable.Sinclude Lattice.Bot with type t := tinclude Lattice.Top with type t := tval to_null_byte_domain : string -> tstring_copy dest src n returns an abstract value representing the copy of string src * into array dest, taking at most n bytes of src if present
string_concat s1 s2 n returns a new abstract value representing the string * concatenation of the input abstract values s1 and s2, taking at most n bytes of * s2 if present
substring_extraction haystack needle returns IsNotSubstr if the string represented by * the abstract value needle surely isn't a substring of haystack, IsSubstrAtIndex0 if * needle is the empty string, else IsMaybeSubstr
include S with type t := t and type idx := idxinclude S0 with type t := t with type idx := idxinclude Lattice.S with type t := tinclude Lattice.PO with type t := twiden x y assumes leq x y. Solvers guarantee this by calling widen old (join old new).
Returns a new abstract value, where the given index is replaced with the * given element.
val make :
?varAttr:GoblintCil.Cil.attributes ->
?typAttr:GoblintCil.Cil.attributes ->
idx ->
value ->
tmake l e creates an abstract representation of an array of length l * containing the element e.
val move_if_affected :
?replace_with_const:bool ->
VDQ.t ->
t ->
GoblintCil.Cil.varinfo ->
(GoblintCil.Cil.exp -> int option) ->
tchanges the way in which the array is partitioned if this is necessitated by a change * to the variable *
val get_vars_in_e : t -> GoblintCil.Cil.varinfo listreturns the variables occuring in the expression according to which the * array was partitioned (if any)
Left fold (like List.fold_left) over the arrays elements
val smart_join :
(GoblintCil.Cil.exp -> IntOps.BigIntOps.t option) ->
(GoblintCil.Cil.exp -> IntOps.BigIntOps.t option) ->
t ->
t ->
tval smart_widen :
(GoblintCil.Cil.exp -> IntOps.BigIntOps.t option) ->
(GoblintCil.Cil.exp -> IntOps.BigIntOps.t option) ->
t ->
t ->
tval smart_leq :
(GoblintCil.Cil.exp -> IntOps.BigIntOps.t option) ->
(GoblintCil.Cil.exp -> IntOps.BigIntOps.t option) ->
t ->
t ->
boolval invariant :
value_invariant:
(offset:GoblintCil.Cil.offset ->
lval:GoblintCil.Cil.lval ->
value ->
Invariant.t) ->
offset:GoblintCil.Cil.offset ->
lval:GoblintCil.Cil.lval ->
t ->
Invariant.tval get :
?checkBounds:bool ->
VDQ.t ->
t ->
(Basetype.CilExp.t option * idx) ->
valueReturns the element residing at the given index.