You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

(*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
open PulseBasicInterface
module AbductiveDomain = PulseAbductiveDomain
module LatentIssue = PulseLatentIssue
type 'abductive_domain_t base_t =
| ContinueProgram of 'abductive_domain_t (** represents the state at the program point *)
| ExitProgram of AbductiveDomain.summary
(** represents the state originating at exit/divergence. *)
| AbortProgram of AbductiveDomain.summary
(** represents the state at the program point that caused an error *)
| LatentAbortProgram of {astate: AbductiveDomain.summary; latent_issue: LatentIssue.t}
(** this path leads to an error but we don't have conclusive enough data to report it yet *)
| LatentInvalidAccess of
{ astate: AbductiveDomain.summary
; address: AbstractValue.t
; must_be_valid: Trace.t
; calling_context: (CallEvent.t * Location.t) list }
(** if [address] is ever observed to be invalid then there is an invalid access because it
[must_be_valid] *)
| ISLLatentMemoryError of AbductiveDomain.summary
(** represents the state at the program point that might cause an error; used for
{!Config.pulse_isl} *)
type t = AbductiveDomain.t base_t
include AbstractDomain.NoJoin with type t := t
val continue : AbductiveDomain.t -> t
val mk_initial : Tenv.t -> Procdesc.t -> t
val is_unsat_cheap : t -> bool
(** see {!PulsePathCondition.is_unsat_cheap} *)
type summary = AbductiveDomain.summary base_t [@@deriving compare, equal, yojson_of]