Reviewed By: skcho Differential Revision: D7255738 fbshipit-source-id: cef7878master
parent
484480f72f
commit
2e8cb343d4
@ -0,0 +1,208 @@
|
|||||||
|
(*
|
||||||
|
* Copyright (c) 2018 - present Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*)
|
||||||
|
|
||||||
|
open! IStd
|
||||||
|
open! AbstractDomain.Types
|
||||||
|
module F = Format
|
||||||
|
|
||||||
|
module Symbol : sig
|
||||||
|
type t
|
||||||
|
end
|
||||||
|
|
||||||
|
module SubstMap : Caml.Map.S with type key = Symbol.t
|
||||||
|
|
||||||
|
module Bound : sig
|
||||||
|
type t [@@deriving compare]
|
||||||
|
|
||||||
|
val pp : F.formatter -> t -> unit
|
||||||
|
|
||||||
|
val zero : t
|
||||||
|
|
||||||
|
val is_const : t -> int option
|
||||||
|
|
||||||
|
val is_not_infty : t -> bool
|
||||||
|
|
||||||
|
val is_symbolic : t -> bool
|
||||||
|
|
||||||
|
val get_one_symbol : t -> Symbol.t
|
||||||
|
|
||||||
|
val gt : t -> t -> bool
|
||||||
|
|
||||||
|
val le : t -> t -> bool
|
||||||
|
|
||||||
|
val lt : t -> t -> bool
|
||||||
|
end
|
||||||
|
|
||||||
|
module ItvPure : sig
|
||||||
|
type astate [@@deriving compare]
|
||||||
|
|
||||||
|
type t = astate
|
||||||
|
|
||||||
|
val pp : F.formatter -> t -> unit
|
||||||
|
|
||||||
|
val mone : t
|
||||||
|
|
||||||
|
val zero : t
|
||||||
|
|
||||||
|
val of_int : int -> t
|
||||||
|
|
||||||
|
val lb : t -> Bound.t
|
||||||
|
|
||||||
|
val ub : t -> Bound.t
|
||||||
|
|
||||||
|
val is_false : t -> bool
|
||||||
|
|
||||||
|
val is_finite : t -> bool
|
||||||
|
|
||||||
|
val is_invalid : t -> bool
|
||||||
|
|
||||||
|
val is_lb_infty : t -> bool
|
||||||
|
|
||||||
|
val is_nat : t -> bool
|
||||||
|
|
||||||
|
val is_one : t -> bool
|
||||||
|
|
||||||
|
val is_symbolic : t -> bool
|
||||||
|
|
||||||
|
val is_top : t -> bool
|
||||||
|
|
||||||
|
val is_true : t -> bool
|
||||||
|
|
||||||
|
val is_zero : t -> bool
|
||||||
|
|
||||||
|
val ( <= ) : lhs:t -> rhs:t -> bool
|
||||||
|
|
||||||
|
val equal : t -> t -> bool
|
||||||
|
|
||||||
|
val have_similar_bounds : t -> t -> bool
|
||||||
|
|
||||||
|
val make_positive : t -> t
|
||||||
|
|
||||||
|
val join : t -> t -> t
|
||||||
|
|
||||||
|
val le_sem : t -> t -> t
|
||||||
|
|
||||||
|
val lt_sem : t -> t -> t
|
||||||
|
|
||||||
|
val widen : prev:t -> next:t -> num_iters:int -> t
|
||||||
|
|
||||||
|
val xcompare :
|
||||||
|
lhs:t -> rhs:t
|
||||||
|
-> [ `Equal
|
||||||
|
| `LeftSmallerThanRight
|
||||||
|
| `RightSmallerThanLeft
|
||||||
|
| `NotComparable
|
||||||
|
| `LeftSubsumesRight
|
||||||
|
| `RightSubsumesLeft ]
|
||||||
|
|
||||||
|
val get_symbols : t -> Symbol.t list
|
||||||
|
|
||||||
|
val subst : t -> Bound.t bottom_lifted SubstMap.t -> t bottom_lifted
|
||||||
|
end
|
||||||
|
|
||||||
|
include module type of AbstractDomain.BottomLifted (ItvPure)
|
||||||
|
|
||||||
|
type t = astate [@@deriving compare]
|
||||||
|
|
||||||
|
val bot : t
|
||||||
|
(** _|_ *)
|
||||||
|
|
||||||
|
val false_sem : t
|
||||||
|
(** 0 *)
|
||||||
|
|
||||||
|
val m1_255 : t
|
||||||
|
(** [-1, 255] *)
|
||||||
|
|
||||||
|
val nat : t
|
||||||
|
(** [0, +oo] *)
|
||||||
|
|
||||||
|
val one : t
|
||||||
|
(** 1 *)
|
||||||
|
|
||||||
|
val pos : t
|
||||||
|
(** [1, +oo] *)
|
||||||
|
|
||||||
|
val top : t
|
||||||
|
(** [-oo, +oo] *)
|
||||||
|
|
||||||
|
val unknown_bool : t
|
||||||
|
(** [0, 1] *)
|
||||||
|
|
||||||
|
val zero : t
|
||||||
|
(** 0 *)
|
||||||
|
|
||||||
|
val of_int : int -> t
|
||||||
|
|
||||||
|
val of_int_lit : IntLit.t -> t
|
||||||
|
|
||||||
|
val of_int64 : Int64.t -> t
|
||||||
|
|
||||||
|
val make_sym : ?unsigned:bool -> Typ.Procname.t -> (unit -> int) -> t
|
||||||
|
|
||||||
|
val lb : t -> Bound.t
|
||||||
|
|
||||||
|
val ub : t -> Bound.t
|
||||||
|
|
||||||
|
val is_false : t -> bool
|
||||||
|
|
||||||
|
val lnot : t -> t
|
||||||
|
|
||||||
|
val neg : t -> t
|
||||||
|
|
||||||
|
val normalize : t -> t
|
||||||
|
|
||||||
|
val get_symbols : t -> Symbol.t list
|
||||||
|
|
||||||
|
val eq : t -> t -> bool
|
||||||
|
|
||||||
|
val le : lhs:t -> rhs:t -> bool
|
||||||
|
|
||||||
|
val _range : t -> Bound.t
|
||||||
|
|
||||||
|
val div : t -> t -> t
|
||||||
|
|
||||||
|
val minus : t -> t -> t
|
||||||
|
|
||||||
|
val mult : t -> t -> t
|
||||||
|
|
||||||
|
val plus : t -> t -> t
|
||||||
|
|
||||||
|
val shiftlt : t -> t -> t
|
||||||
|
|
||||||
|
val shiftrt : t -> t -> t
|
||||||
|
|
||||||
|
val eq_sem : t -> t -> t
|
||||||
|
|
||||||
|
val ge_sem : t -> t -> t
|
||||||
|
|
||||||
|
val gt_sem : t -> t -> t
|
||||||
|
|
||||||
|
val land_sem : t -> t -> t
|
||||||
|
|
||||||
|
val le_sem : t -> t -> t
|
||||||
|
|
||||||
|
val lor_sem : t -> t -> t
|
||||||
|
|
||||||
|
val lt_sem : t -> t -> t
|
||||||
|
|
||||||
|
val min_sem : t -> t -> t
|
||||||
|
|
||||||
|
val mod_sem : t -> t -> t
|
||||||
|
|
||||||
|
val ne_sem : t -> t -> t
|
||||||
|
|
||||||
|
val prune_zero : t -> t
|
||||||
|
|
||||||
|
val prune_comp : Binop.t -> t -> t -> t
|
||||||
|
|
||||||
|
val prune_eq : t -> t -> t
|
||||||
|
|
||||||
|
val prune_ne : t -> t -> t
|
||||||
|
|
||||||
|
val subst : t -> Bound.t bottom_lifted SubstMap.t -> t
|
Loading…
Reference in new issue