Module Pulselib.PulseExecutionDomain
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 : PulseBasicInterface.AbstractValue.t;
must_be_valid : PulseBasicInterface.Trace.t * PulseBasicInterface.Invalidation.must_be_valid_reason option;
calling_context : (PulseBasicInterface.CallEvent.t * IBase.Location.t) list;
}
if
address
is ever observed to be invalid then there is an invalid access because itmust_be_valid
|
ISLLatentMemoryError of AbductiveDomain.summary
represents the state at the program point that might cause an error; used for
Config
.pulse_isltype t
= AbductiveDomain.t base_t
include Absint.AbstractDomain.NoJoin with type t := t
include IStdlib.PrettyPrintable.PrintableType
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val continue : AbductiveDomain.t -> t
val mk_initial : IR.Tenv.t -> IR.Procdesc.t -> t
val is_unsat_cheap : t -> bool
type summary
= AbductiveDomain.summary base_t