Module Pulselib.PulseInterproc

val apply_prepost : is_isl_error_prepost:bool -> IR.Procname.t -> IBase.Location.t -> callee_prepost:PulseDomainInterface.AbductiveDomain.t -> captured_vars_with_actuals:(IR.Var.t * ((PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) * IR.Typ.t)) list -> formals:IR.Var.t list -> actuals:((PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) * IR.Typ.t) list -> PulseDomainInterface.AbductiveDomain.t -> (PulseDomainInterface.AbductiveDomain.t * (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) option * (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t) Pulselib.PulseBasicInterface.AbstractValue.Map.t) PulseDomainInterface.AccessResult.t PulseBasicInterface.SatUnsat.t

result of applying one pre/post pair of a callee's summary:

  • SatUnsat.Unsat if that path in the callee is infeasible
  • otherwise, there can be an error detected
  • otherwise, the result is a new abstract state, an optional return value, and a substitution callee_abstract_value -> caller_abstract_value mapping callee's abstract values to what they became in the new (caller) state