Goblint_lib.ArrayDomainAbstract domains for C arrays.
module VDQ = ValueDomainQueriesval get_domain :
varAttr:GoblintCil.Cil.attributes ->
typAttr:GoblintCil.Cil.attributes ->
domaingets the underlying domain: chosen by the attributes in AttributeConfiguredArrayDomain
val can_recover_from_top : domain -> boolSome domains such as Trivial cannot recover from their value ever being top. ValueDomain handles intialization differently for these
module type S = sig ... endAbstract domains representing arrays.
module type LatticeWithSmartOps = sig ... endThis functor creates a trivial single cell representation of an array. The * indexing type is taken as a parameter to satisfy the type system, it is not * used in the implementation.
module TrivialWithLength
(Val : Lattice.S)
(Idx : IntDomain.Z) :
S with type value = Val.t and type idx = Idx.tThis functor creates a trivial single cell representation of an array. The * indexing type is also used to manage the length.
module Partitioned
(Val : LatticeWithSmartOps)
(Idx : IntDomain.Z) :
S with type value = Val.t and type idx = Idx.tThis functor creates an array representation that allows for partitioned arrays * Such an array can be partitioned according to an expression in which case it * uses three values from Val to represent the elements of the array to the left, * at, and to the right of the expression. The Idx domain is required only so to * have a signature that allows for choosing an array representation at runtime.
module PartitionedWithLength
(Val : LatticeWithSmartOps)
(Idx : IntDomain.Z) :
S with type value = Val.t and type idx = Idx.tLike partitioned but additionally manages the length of the array.
module AttributeConfiguredArrayDomain
(Val : LatticeWithSmartOps)
(Idx : IntDomain.Z) :
S with type value = Val.t and type idx = Idx.tSwitches between PartitionedWithLength, TrivialWithLength and Unroll based on variable, type, and flag.