Frama_c_kernel.OriginThe 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 ... endLattice of source locations.
type origin = | Misalign_read of LocationLattice.tRead of not all the bits of a pointer, typically through a pointer cast
*)| Leaf of LocationLattice.tResult of a function without a body
*)| Merge of LocationLattice.tJoin between two control-flows
*)| Arith of LocationLattice.tArithmetic operation that cannot be represented, eg. '&x * 2'
| WellImprecise variables of the initial state
*)| UnknownList of possible origins. Most of them also include the set of source locations where the operation took place.
include Datatype.S with type t = origininclude Datatype.S_no_copy with type t = originval packed_descr : Structural_descr.packPacked version of the descriptor.
val reprs : t listList of representants of the descriptor.
val hash : t -> intHash function: same spec than Hashtbl.hash.
val pretty : Format.formatter -> t -> unitPretty print each value in an user-friendly way.
val mem_project : (Project_skeleton.t -> bool) -> t -> boolmem_project f x must return true iff there is a value p of type Project.t in x such that f p returns true.
val pretty_as_reason : Format.formatter -> t -> unitPretty-print because of <origin> if the origin is not Unknown, or nothing otherwise
val top : tval is_top : t -> boolval bottom : t