Pulselib.PulseExecutionDomainmodule AbductiveDomain = PulseAbductiveDomainmodule DecompilerExpr = PulseDecompilerExprmodule LatentIssue = PulseLatentIssuetype 'abductive_domain_t base_t = | ContinueProgram of 'abductive_domain_trepresents the state at the program point
*)| ExceptionRaised of 'abductive_domain_tstate after an exception has been thrown
*)| ExitProgram of AbductiveDomain.Summary.trepresents the state originating at exit/divergence.
*)| AbortProgram of AbductiveDomain.Summary.trepresents the state at the program point that caused an error
*)| LatentAbortProgram of {astate : AbductiveDomain.Summary.t;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.t;address : DecompilerExpr.t;must_be_valid : Pulselib.PulseBasicInterface.Trace.t
* Pulselib.PulseBasicInterface.Invalidation.must_be_valid_reason
option;calling_context : (Pulselib.PulseBasicInterface.CallEvent.t * IBase.Location.t)
list;}if address is ever observed to be invalid then there is an invalid access because it must_be_valid
| LatentSpecializedTypeIssue of {astate : AbductiveDomain.Summary.t;specialized_type : IR.Typ.Name.t;trace : Pulselib.PulseBasicInterface.Trace.t;}this path leads to an error but we need to know where type specialization happened to report it
*)type t = AbductiveDomain.t base_tinclude Absint.AbstractDomain.Disjunct with type t := tinclude Absint.AbstractDomain.Comparable with type t := tinclude IStdlib.PrettyPrintable.PrintableType with type t := tequal_fast x y must imply x <=> y; it's a good idea for this function to be "fast", e.g. not depend on the size of its input
val is_normal : t -> booltest if the abstract state represents exactly concrete states
val is_exceptional : t -> booltest if the abstract state represents exactly exceptional concrete states
val is_executable : t -> booltest if the abstract state represents executable states, e.g. ContinueProgram or ExceptionRaised.
val pp_with_kind :
IStdlib.Pp.print_kind ->
PulsePathContext.t option ->
F.formatter ->
t ->
unitval pp : F.formatter -> t -> unitval continue : AbductiveDomain.t -> ttype summary = AbductiveDomain.Summary.t base_tval yojson_of_summary : summary -> Ppx_yojson_conv_lib.Yojson.Safe.tval pp_summary : F.formatter -> summary -> unitval to_name : 'a base_t -> string