IntDomain_intf.IntDomain
module type Arith = Arith
module type ArithIkind = ArithIkind
module type B = B
module type IkindUnawareS = IkindUnawareS
module type S = S
module type SOverflow = SOverflow
module type Y = Y
module type Z = Z
module type Ikind = Ikind
module PtrDiffIkind : Ikind
module IntDomTuple : sig ... end
val of_const : (Z.t * GoblintCil.Cil.ikind * string option) -> IntDomTuple.t
module Size : sig ... end
module BISet : SetDomain.S with type elt = Z.t
An exception that can be raised when the result of a computation is unknown. * This is caught by lifted domains and will be replaced by top.
An exception that can be raised when an arithmetic error occurs. This is * caught by lifted domains and the evaluation will then be set to bot, which * signifies an error in computation
module Integers
(Ints_t : IntOps.IntOps) :
IkindUnawareS with type t = Ints_t.t and type int_t = Ints_t.t
Predefined domains
module FlatPureIntegers :
IkindUnawareS
with type t = IntOps.Int64Ops.t
and type int_t = IntOps.Int64Ops.t
The integers with flattened orderings. Calling top
and bot
or join
ing or meet
ing inequal elements will raise exceptions.
module Flattened :
IkindUnawareS
with type t = [ `Top | `Lifted of IntOps.Int64Ops.t | `Bot ]
and type int_t = IntOps.Int64Ops.t
This is the typical flattened integer domain used in Kildall's constant * propagation.
module Lifted :
IkindUnawareS
with type t = [ `Top | `Lifted of int64 | `Bot ]
and type int_t = int64
Artificially bounded integers in their natural ordering.
module IntervalFunctor
(Ints_t : IntOps.IntOps) :
SOverflow
with type int_t = Ints_t.t
and type t = (Ints_t.t * Ints_t.t) option
module BitfieldFunctor
(Ints_t : IntOps.IntOps) :
SOverflow with type int_t = Ints_t.t and type t = Ints_t.t * Ints_t.t
module IntervalSetFunctor
(Ints_t : IntOps.IntOps) :
SOverflow with type int_t = Ints_t.t and type t = (Ints_t.t * Ints_t.t) list
module Interval32 : Y with type int_t = IntOps.Int64Ops.t
module IntervalSet : SOverflow with type int_t = Z.t
module Congruence : S with type int_t = Z.t
The DefExc domain. The Flattened integer domain is topped by exclusion sets. * Good for analysing branches.
Domain constructors
module Flat
(Base : IkindUnawareS) :
IkindUnawareS
with type t = [ `Bot | `Lifted of Base.t | `Top ]
and type int_t = Base.int_t
Creates a flat value domain, where all ordering is lost. Arithmetic * operations are lifted such that only lifted values can be evaluated * otherwise the top/bot is simply propagated with bot taking precedence over * top.
module Lift
(Base : IkindUnawareS) :
IkindUnawareS
with type t = [ `Bot | `Lifted of Base.t | `Top ]
and type int_t = Base.int_t
Just like Value.Flat
except the order is preserved.
Interval domain with int64-s --- use with caution!