struct error E0505
This commit is contained in:
parent
abf259cc54
commit
057d8e5c43
@ -8,9 +8,18 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
pub(crate) fn cannot_move_when_borrowed(
|
pub(crate) fn cannot_move_when_borrowed(
|
||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
desc: &str,
|
borrow_span: Span,
|
||||||
|
place: &str,
|
||||||
|
borrow_place: &str,
|
||||||
|
value_place: &str,
|
||||||
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
|
||||||
struct_span_err!(self, span, E0505, "cannot move out of {} because it is borrowed", desc,)
|
self.infcx.tcx.sess.create_err(crate::session_diagnostics::MoveBorrow {
|
||||||
|
place,
|
||||||
|
span,
|
||||||
|
borrow_place,
|
||||||
|
value_place,
|
||||||
|
borrow_span,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn cannot_use_when_mutably_borrowed(
|
pub(crate) fn cannot_use_when_mutably_borrowed(
|
||||||
|
@ -667,10 +667,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
|||||||
let move_spans = self.move_spans(place.as_ref(), location);
|
let move_spans = self.move_spans(place.as_ref(), location);
|
||||||
let span = move_spans.args_or_use();
|
let span = move_spans.args_or_use();
|
||||||
|
|
||||||
let mut err =
|
let mut err = self.cannot_move_when_borrowed(
|
||||||
self.cannot_move_when_borrowed(span, &self.describe_any_place(place.as_ref()));
|
span,
|
||||||
err.span_label(borrow_span, format!("borrow of {} occurs here", borrow_msg));
|
borrow_span,
|
||||||
err.span_label(span, format!("move out of {} occurs here", value_msg));
|
&self.describe_any_place(place.as_ref()),
|
||||||
|
&borrow_msg,
|
||||||
|
&value_msg,
|
||||||
|
);
|
||||||
|
|
||||||
borrow_spans.var_path_only_subdiag(&mut err, crate::InitializationRequiringAction::Borrow);
|
borrow_spans.var_path_only_subdiag(&mut err, crate::InitializationRequiringAction::Borrow);
|
||||||
|
|
||||||
|
@ -227,3 +227,16 @@ pub(crate) enum CaptureVarCause {
|
|||||||
var_span: Span,
|
var_span: Span,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(borrowck_cannot_move_when_borrowed, code = "E0505")]
|
||||||
|
pub(crate) struct MoveBorrow<'a> {
|
||||||
|
pub place: &'a str,
|
||||||
|
pub borrow_place: &'a str,
|
||||||
|
pub value_place: &'a str,
|
||||||
|
#[primary_span]
|
||||||
|
#[label(move_label)]
|
||||||
|
pub span: Span,
|
||||||
|
#[label]
|
||||||
|
pub borrow_span: Span,
|
||||||
|
}
|
||||||
|
@ -109,3 +109,17 @@ borrowck_var_move_by_use_place_in_generator =
|
|||||||
|
|
||||||
borrowck_var_move_by_use_place_in_closure =
|
borrowck_var_move_by_use_place_in_closure =
|
||||||
move occurs due to use of {$place} in closure
|
move occurs due to use of {$place} in closure
|
||||||
|
|
||||||
|
borrowck_cannot_move_when_borrowed =
|
||||||
|
cannot move out of {$place ->
|
||||||
|
[value] value
|
||||||
|
*[other] {$place}
|
||||||
|
} because it is borrowed
|
||||||
|
.label = borrow of {$borrow_place ->
|
||||||
|
[value] value
|
||||||
|
*[other] {$borrow_place}
|
||||||
|
} occurs here
|
||||||
|
.move_label = move out of {$value_place ->
|
||||||
|
[value] value
|
||||||
|
*[other] {$value_place}
|
||||||
|
} occurs here
|
||||||
|
Loading…
x
Reference in New Issue
Block a user