Module Pulselib.PulseDiagnostic

module CallEvent = PulseCallEvent
module Invalidation = PulseInvalidation
module Trace = PulseTrace
module ValueHistory = PulseValueHistory
type access_to_invalid_address = {
calling_context : (CallEvent.t * IBase.Location.t) list;

the list of function calls leading to the issue being realised, which is an additional common prefix to the traces in the record

invalidation : Invalidation.t;
invalidation_trace : Trace.t;

assuming we are in the calling context, the trace leads to invalidation without further assumptions

access_trace : Trace.t;

assuming we are in the calling context, the trace leads to an access to the value invalidated in invalidation_trace without further assumptions

}
val equal_access_to_invalid_address : access_to_invalid_address -> access_to_invalid_address -> bool
type t =
| AccessToInvalidAddress of access_to_invalid_address
| MemoryLeak of {
procname : IR.Procname.t;
allocation_trace : Trace.t;
location : IBase.Location.t;
}
| StackVariableAddressEscape of {
variable : IR.Var.t;
history : ValueHistory.t;
location : IBase.Location.t;
}

an error to report to the user

val equal : t -> t -> bool
val get_message : t -> string
val get_location : t -> IBase.Location.t
val get_issue_type : t -> IBase.IssueType.t
val get_trace : t -> Absint.Errlog.loc_trace