package goblint
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=452d8491527aea21f2cbb11defcc14ba0daf9fdb6bdb9fc0af73e56eac57b916
sha512=1993cd45c4c7fe124ca6e157f07d17ec50fab5611b270a434ed1b7fb2910aa85a8e6eaaa77dad770430710aafb2f6d676c774dd33942d921f23e2f9854486551
doc/goblint_cdomain_value/AddressDomain/AddressLattice/index.html
Module AddressDomain.AddressLattice
Address lattice.
Actually a disjoint union of lattices without top or bottom. Addresses are grouped as follows:
- Each
Addr
, modulo precise index expressions in the offset, is a sublattice with ordering induced byMval
. NullPtr
is a singleton sublattice.UnknownPtr
is a singleton sublattice.- If
ana.base.strings.domain
is disjoint, then eachStrPtr
is a singleton sublattice. Otherwise, allStrPtr
are together in one sublattice with flat ordering.
Parameters
module Mval : Mval.Lattice
Signature
include sig ... end
type t = AddressBase(Mval).t =
| Addr of Mval.t
(*Pointer to mvalue.
*)| NullPtr
(*NULL pointer.
*)| UnknownPtr
(*Unknown pointer. Could point to globals, heap and escaped variables.
*)| StrPtr of StringDomain.t
(*String literal pointer.
*)StrPtr None
abstracts any string pointer
val to_n_c_string : int -> t -> string option
Convert StrPtr
to C string of given maximum length if possible.
val to_string_length : t -> int option
Find length of C string if possible.
val is_definite : t -> bool
Whether address is a NULL
pointer or an mvalue that has only definite integer indexing (and fields).
val of_var : GoblintCil.varinfo -> t
Convert from variable (without offset).
val to_var : t -> GoblintCil.varinfo option
Convert to variable if possible.
val to_var_may : t -> GoblintCil.varinfo option
Convert to variable with any offset if possible.
val to_var_must : t -> GoblintCil.varinfo option
Convert to variable without offset if possible.
val to_exp : t -> GoblintCil.exp
Convert to CIL expression.
val type_of : t -> GoblintCil.typ
Type of address.
include Lattice.S with type t := t
include Lattice.PO with type t := t
include Printable.S with type t := t
val hash : t -> int
val show : t -> string
val pretty : unit -> t -> Printable.Pretty.doc
val printXml : 'a BatInnerIO.output -> t -> unit
val to_yojson : t -> Yojson.Safe.t
val tag : t -> int
Unique ID, given by HConsed, for context identification in witness
val arbitrary : unit -> t QCheck.arbitrary
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.doc
If leq x y = false
, then pretty_diff () (x, y)
should explain why.
val bot : unit -> t
val is_bot : t -> bool
val top : unit -> t
val is_top : t -> bool