pub struct BorrowckErrors<'tcx> {
    tcx: TyCtxt<'tcx>,
    buffered_move_errors: BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, DiagnosticBuilder<'tcx, ErrorGuaranteed>)>,
    buffered_mut_errors: FxIndexMap<Span, (DiagnosticBuilder<'tcx, ErrorGuaranteed>, usize)>,
    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_mut_errors: FxIndexMap<Span, (DiagnosticBuilder<'tcx, ErrorGuaranteed>, usize)>§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>

source

pub fn new(tcx: TyCtxt<'tcx>) -> Self

source

pub fn buffer_error(&mut self, t: DiagnosticBuilder<'_, ErrorGuaranteed>)

source

pub fn buffer_non_error_diag(&mut self, t: DiagnosticBuilder<'_, ()>)

source

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§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

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: 120 bytes