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

must_be_valid_reason : Invalidation.must_be_valid_reason option;
}
val compare_access_to_invalid_address : access_to_invalid_address -> access_to_invalid_address -> int
val equal_access_to_invalid_address : access_to_invalid_address -> access_to_invalid_address -> bool
val yojson_of_access_to_invalid_address : access_to_invalid_address -> Ppx_yojson_conv_lib.Yojson.Safe.t
type read_uninitialized_value = {
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

trace : Trace.t;

assuming we are in the calling context, the trace leads to read of the uninitialized value

}
val compare_read_uninitialized_value : read_uninitialized_value -> read_uninitialized_value -> int
val equal_read_uninitialized_value : read_uninitialized_value -> read_uninitialized_value -> bool
val yojson_of_read_uninitialized_value : read_uninitialized_value -> Ppx_yojson_conv_lib.Yojson.Safe.t
type t =
| AccessToInvalidAddress of access_to_invalid_address
| MemoryLeak of {
procname : IR.Procname.t;
allocation_trace : Trace.t;
location : IBase.Location.t;
}
| ReadUninitializedValue of read_uninitialized_value
| 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