module Ival: sig
.. end
inject
creates an abstract float interval.
Does not handle infinites.
Does not enlarge subnormals to handle flush-to-zero modes
exception Can_not_subdiv
module F: sig
.. end
module Float_abstract: sig
.. end
module O: sig
.. end
type
tt =
| |
Set of O.t |
| |
Float of Float_abstract.t |
| |
Top of Abstract_interp.Int.t option * Abstract_interp.Int.t option * Abstract_interp.Int.t * Abstract_interp.Int.t |
module Widen_Hints: sig
.. end
exception Error_Top
exception Error_Bottom
include Datatype.S
type
widen_hint = Widen_Hints.t
val join : t -> t -> t
val link : t -> t -> t
val meet : t -> t -> t
val narrow : t -> t -> t
val bottom : t
val top : t
val is_included : t -> t -> bool
val is_included_exn : t -> t -> unit
val intersects : t -> t -> bool
val widen : widen_hint -> t -> t -> t
val fold_enum : split_non_enumerable:int -> (t -> 'a -> 'a) -> t -> 'a -> 'a
val diff : t -> t -> t
val diff_if_one : t -> t -> t
val add : t -> t -> t
val neg : t -> t
val sub : t -> t -> t
val min_int : t -> Abstract_interp.Int.t option
A None
result means the argument is unbounded.
val max_int : t -> Abstract_interp.Int.t option
A None
result means the argument is unbounded.
val min_max_r_mod : t ->
Abstract_interp.Int.t option * Abstract_interp.Int.t option *
Abstract_interp.Int.t * Abstract_interp.Int.t
val min_and_max : t -> Abstract_interp.Int.t option * Abstract_interp.Int.t option
val bitwise_and : size:int -> signed:bool -> t -> t -> t
val bitwise_or : size:int -> t -> t -> t
val inject_range : Abstract_interp.Int.t option -> Abstract_interp.Int.t option -> t
None
means unbounded. The interval is inclusive.
val all_positives : Abstract_interp.Int.t option -> bool
val all_negatives : Abstract_interp.Int.t option -> bool
val cardinal_zero_or_one : t -> bool
val is_singleton_int : t -> bool
val inject_singleton : Abstract_interp.Int.t -> t
val zero : t
val one : t
val compare_min_float : t -> t -> int
val compare_max_float : t -> t -> int
val compare_min_int : t -> t -> int
val compare_max_int : t -> t -> int
val is_zero : t -> bool
val is_one : t -> bool
val inject_float : Float_abstract.t -> t
val top_float : t
val top_single_precision_float : t
val project_float : t -> Float_abstract.t
Raises F.Nan_or_infinite
when the float is Nan or infinite.
val in_interval : Abstract_interp.Int.t ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t -> Abstract_interp.Int.t -> bool
val contains_zero : t -> bool
exception Not_Singleton_Int
val project_int : t -> Abstract_interp.Int.t
Raises Not_Singleton_Int
when the cardinal of the argument is not 1.
val cardinal_less_than : t -> int -> int
cardinal_less_than t n
returns the cardinal of t
is this cardinal
is at most n
.
Raises Abstract_interp.Not_less_than
is the cardinal of t
is more than n
val splitting_cardinal_less_than : split_non_enumerable:int -> t -> int -> int
val inject_top : Abstract_interp.Int.t option ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t -> Abstract_interp.Int.t -> t
inject_top min max r m
returns the smallest lattice element that
contains all integers equal to r
modulo m
between min
and
max
. None
means unbounded.
val fold : (Abstract_interp.Int.t -> 'a -> 'a) -> t -> 'a -> 'a
exception Apply_Set_Exn of exn
val apply_set : string ->
(Abstract_interp.Int.t -> Abstract_interp.Int.t -> Abstract_interp.Int.t) ->
t -> t -> t
val apply_set_unary : 'a -> (Abstract_interp.Int.t -> Abstract_interp.Int.t) -> t -> t
val singleton_zero : t
The lattice element that contains only the integer zero.
val singleton_one : t
The lattice element that contains only the integer one.
val zero_or_one : t
The lattice element that contains only the integers zero and one.
val contains_non_zero : t -> bool
val subdiv_float_interval : t -> t * t
val scale : Abstract_interp.Int.t -> t -> t
val scale_div : pos:bool -> Abstract_interp.Int.t -> t -> t
val negative : t
val div : t -> t -> t
val scale_rem : pos:bool -> Abstract_interp.Int.t -> t -> t
val c_rem : t -> t -> t
val mul : t -> t -> t
val shift_left : size:Abstract_interp.Int.t -> t -> t -> t
val shift_right : size:Abstract_interp.Int.t -> t -> t -> t
val interp_boolean : contains_zero:bool -> contains_non_zero:bool -> t
val filter_set : (int -> bool) -> Abstract_interp.Int.t -> O.t -> t
return the smallest lattice element that contains the elements of s
that are in relation f
(<=
,>=
,...) to bound
: start:Abstract_interp.Int.t -> stop:Abstract_interp.Int.t -> t -> t
val create_all_values : modu:Abstract_interp.Int.t -> signed:bool -> size:int -> t
val all_values : size:Abstract_interp.Int.t -> t -> bool
val filter_le_int : Abstract_interp.Int.t option -> t -> t
val filter_ge_int : Abstract_interp.Int.t option -> t -> t
val filter_lt_int : Abstract_interp.Int.t option -> t -> t
val filter_gt_int : Abstract_interp.Int.t option -> t -> t
val filter_le : t -> t -> t
val filter_ge : t -> t -> t
val filter_lt : t -> t -> t
val filter_gt : t -> t -> t
val filter_le_float : t -> t -> t
val filter_ge_float : t -> t -> t
val filter_lt_float : bool -> typ_loc:Cil_types.typ -> t -> t -> t
val filter_gt_float : bool -> typ_loc:Cil_types.typ -> t -> t -> t
val compare_C : (Abstract_interp.Int.t option ->
Abstract_interp.Int.t option ->
Abstract_interp.Int.t option -> Abstract_interp.Int.t option -> 'a) ->
t -> t -> 'a
val max_max : Abstract_interp.Int.t option ->
Abstract_interp.Int.t option -> Abstract_interp.Int.t option
val scale_int64base : Int_Base.tt -> t -> t
val cast_float_to_int : signed:bool -> size:int -> t -> bool * bool * t
val of_int : int -> t
val of_int64 : int64 -> t
val cast_int_to_float : Float_abstract.rounding_mode -> t -> bool * t
val cast : size:Abstract_interp.Int.t -> signed:bool -> value:t -> t
val cast_float : t -> bool * t
val tag : t -> int
val pretty_debug : Format.formatter -> t -> unit