Module Pulselib__PulseInterproc

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