package goblint
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=20d5b7332a9f6072ab9ba86c4a53b898eaf681286c56a8805c41850bbf3ddf41
sha512=7c7685cfcd9aa866bc40e813df2bfcb3c79b3d40e615d8d6d0939c5798b9d70dd7f2ba87a741f5ba0ce891e9d254627207fb28057f1f2f6611e4e0d128fd6a71
doc/goblint_cdomain_value/ValueDomain/CArrays/index.html
Module ValueDomain.CArrays
include ArrayDomain.Str with type idx = ArrIdxDomain.t
include ArrayDomain.S0 with type idx = ArrIdxDomain.t
include Lattice.S
include Lattice.PO
include Printable.S
include Lattice.Bot with type t := t
include Lattice.Top with type t := t
type idx = ArrIdxDomain.tThe abstract domain used to index on arrays.
val 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 ArrayDomain.S
with type t := t
and type idx := idx
with type value = Compound.t
include ArrayDomain.S0
with type t := t
with type idx := idx
with type value = Compound.t
include Lattice.S with type t := t
include Lattice.PO with type t := t
include Printable.S with type t := t
val hash : t -> intval show : t -> stringval pretty : unit -> t -> Printable.Pretty.docval printXml : 'a BatInnerIO.output -> t -> unitval to_yojson : t -> Yojson.Safe.tval tag : t -> intUnique ID, given by HConsed, for context identification in witness
val arbitrary : unit -> t QCheck.arbitrarywiden x y assumes leq x y. Solvers guarantee this by calling widen old (join old new).
type value = Compound.tThe abstract domain of values stored in the array.
val set :
ArrayDomain.VDQ.t ->
t ->
(Basetype.CilExp.t option * idx) ->
value ->
tReturns 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 ->
ArrayDomain.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 project :
?varAttr:GoblintCil.Cil.attributes ->
?typAttr:GoblintCil.Cil.attributes ->
ArrayDomain.VDQ.t ->
t ->
tval 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 domain_of_t : t -> ArrayDomain.domainval get :
?checkBounds:bool ->
ArrayDomain.VDQ.t ->
t ->
(Basetype.CilExp.t option * idx) ->
valueReturns the element residing at the given index.