IntDomain.FlatCreates 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 Base : IkindUnawareSinclude B
with type t = [ `Bot | `Lifted of Base.t | `Top ]
with type int_t = Base.int_tinclude Lattice.S with type t = [ `Bot | `Lifted of Base.t | `Top ]include Lattice.PO with type t = [ `Bot | `Lifted of Base.t | `Top ]include Printable.S with type t = [ `Bot | `Lifted of Base.t | `Top ]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
widen x y assumes leq x y. Solvers guarantee this by calling widen old (join old new).
val pretty_diff : unit -> (t * t) -> Lattice.Pretty.docIf leq x y = false, then pretty_diff () (x, y) should explain why.
val bot : unit -> tval is_bot : t -> boolval top : unit -> tval is_top : t -> booltype int_t = Base.int_tAccessing values of the ADT
val bot_of : GoblintCil.Cil.ikind -> tval top_of : GoblintCil.Cil.ikind -> tReturn a single integer value if the value is a known constant, otherwise * don't return anything.
val to_bool : t -> bool optionGive a boolean interpretation of an abstract value if possible, otherwise * don't return anything.
Gives a list representation of the excluded values from included range of bits if possible.
val of_excl_list : GoblintCil.Cil.ikind -> int_t list -> tCreates an exclusion set from a given list of integers.
val is_excl_list : t -> boolChecks if the element is an exclusion set.
Gives a list representation of the included values if possible.
Cast
val cast_to : ?torg:GoblintCil.Cil.typ -> GoblintCil.Cil.ikind -> t -> tCast from original type torg to integer type Cil.ikind. Currently, torg is only present for actual casts. The function is also called to handle overflows/wrap around after operations. In these cases (where the type stays the same) torg is None.
val starting : ?suppress_ovwarn:bool -> GoblintCil.Cil.ikind -> int_t -> tval ending : ?suppress_ovwarn:bool -> GoblintCil.Cil.ikind -> int_t -> tval of_bool : bool -> tTransform a known boolean value to the default internal representation. It * should follow C: of_bool true = of_int 1 and of_bool false = of_int 0.
val of_interval :
?suppress_ovwarn:bool ->
GoblintCil.Cil.ikind ->
(int_t * int_t) ->
tval of_congruence : GoblintCil.Cil.ikind -> (int_t * int_t) -> tval arbitrary : unit -> t QCheck.arbitraryval invariant : GoblintCil.Cil.exp -> t -> Invariant.t