Struct rustc_borrowck::error::BorrowckErrors
source · pub struct BorrowckErrors<'tcx> {
tcx: TyCtxt<'tcx>,
buffered_move_errors: BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, DiagnosticBuilder<'tcx, ErrorGuaranteed>)>,
buffered: Vec<Diagnostic>,
tainted_by_errors: Option<ErrorGuaranteed>,
}
Fields§
§tcx: TyCtxt<'tcx>
§buffered_move_errors: BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, DiagnosticBuilder<'tcx, ErrorGuaranteed>)>
This field keeps track of move errors that are to be reported for given move indices.
There are situations where many errors can be reported for a single move out (see #53807) and we want only the best of those errors.
The report_use_of_moved_or_uninitialized
function checks this map and replaces the
diagnostic (if there is one) if the Place
of the error being reported is a prefix of the
Place
of the previous most diagnostic. This happens instead of buffering the error. Once
all move errors have been reported, any diagnostics in this map are added to the buffer
to be emitted.
BTreeMap
is used to preserve the order of insertions when iterating. This is necessary
when errors in the map are being re-added to the error buffer so that errors with the
same primary span come out in a consistent order.
buffered: Vec<Diagnostic>
Diagnostics to be reported buffer.
tainted_by_errors: Option<ErrorGuaranteed>
Set to Some if we emit an error during borrowck
Implementations§
source§impl<'tcx> BorrowckErrors<'tcx>
impl<'tcx> BorrowckErrors<'tcx>
pub fn new(tcx: TyCtxt<'tcx>) -> Self
pub fn buffer_error(&mut self, t: DiagnosticBuilder<'_, ErrorGuaranteed>)
pub fn buffer_non_error_diag(&mut self, t: DiagnosticBuilder<'_, ()>)
pub fn set_tainted_by_errors(&mut self, e: ErrorGuaranteed)
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for BorrowckErrors<'tcx>
impl<'tcx> !Send for BorrowckErrors<'tcx>
impl<'tcx> !Sync for BorrowckErrors<'tcx>
impl<'tcx> Unpin for BorrowckErrors<'tcx>
impl<'tcx> !UnwindSafe for BorrowckErrors<'tcx>
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 64 bytes