module Origin:sig
..end
The datastructures of this module can be used to track the origin of a major imprecision in the values of an abstract domain.
This module is generic, although currently used only by the plugin Value. Within Value, values that have an imprecision origin are "garbled mix", ie. a numeric value that contains bits extracted from at least one pointer, and that are not the result of a translation
module LocationLattice:sig
..end
Lattice of source locations.
type
origin =
| |
Misalign_read of |
(* | Read of not all the bits of a pointer, typically through a pointer cast | *) |
| |
Leaf of |
(* | Result of a function without a body | *) |
| |
Merge of |
(* | Join between two control-flows | *) |
| |
Arith of |
(* | Arithmetic operation that cannot be
represented, eg. | *) |
| |
Well |
(* | Imprecise variables of the initial state | *) |
| |
Unknown |
List of possible origins. Most of them also include the set of source locations where the operation took place.
include Datatype.S
type
kind =
| |
K_Misalign_read |
| |
K_Leaf |
| |
K_Merge |
| |
K_Arith |
val current : kind -> origin
This is automatically extracted from Cil.CurrentLoc
val pretty_as_reason : Format.formatter -> t -> unit
Pretty-print because of <origin>
if the origin is not Unknown
, or
nothing otherwise
val top : t
val is_top : t -> bool
val bottom : t
val join : t -> t -> t
val link : t -> t -> t
val meet : t -> t -> t
val narrow : t -> t -> t
val is_included : t -> t -> bool