Module Origin

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 LocationSetLattice: sig .. end
Sets of source locations
type origin = 
| Misalign_read of LocationSetLattice.t (*
Read of not all the bits of a pointer, typicaller through a pointer cast
*)
| Leaf of LocationSetLattice.t (*
Result of a function without a body
*)
| Merge of LocationSetLattice.t (*
Join between two control-flows
*)
| Arith of LocationSetLattice.t (*
Arithmetic operation that cannot be represented, eg. '&x * 2'
*)
| Well (*
Imprecise variables of the intial 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 meet : t -> t -> t
val narrow : t -> t -> t
val is_included : t -> t -> bool