diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-13 04:21:30 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-13 04:21:30 +0100 |
| commit | 98df677c3f13ab7dadde39e3eaf837766af3a7a2 (patch) | |
| tree | dec6adff1de29439fe36ab7b5d16cf0231808061 /src/librustc_mir | |
| parent | 87f3b16e0b7ebc8d83dc8d57a2013646cb6ebb7b (diff) | |
| parent | fa199c5f27cf09fa02ff7632a713ea613f731944 (diff) | |
| download | rust-98df677c3f13ab7dadde39e3eaf837766af3a7a2.tar.gz rust-98df677c3f13ab7dadde39e3eaf837766af3a7a2.zip | |
Rollup merge of #67247 - JohnTitor:fix-sugg, r=estebank
Don't suggest wrong snippet in closure Fixes #67190 r? @estebank
Diffstat (limited to 'src/librustc_mir')
| -rw-r--r-- | src/librustc_mir/borrow_check/diagnostics/move_errors.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/librustc_mir/borrow_check/diagnostics/move_errors.rs b/src/librustc_mir/borrow_check/diagnostics/move_errors.rs index 938836db9ae..cc634101f0a 100644 --- a/src/librustc_mir/borrow_check/diagnostics/move_errors.rs +++ b/src/librustc_mir/borrow_check/diagnostics/move_errors.rs @@ -223,18 +223,24 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { fn report(&mut self, error: GroupedMoveError<'tcx>) { let (mut err, err_span) = { - let (span, original_path, kind): (Span, &Place<'tcx>, &IllegalMoveOriginKind<'_>) = + let (span, use_spans, original_path, kind,): + ( + Span, + Option<UseSpans>, + &Place<'tcx>, + &IllegalMoveOriginKind<'_>, + ) = match error { GroupedMoveError::MovesFromPlace { span, ref original_path, ref kind, .. } | GroupedMoveError::MovesFromValue { span, ref original_path, ref kind, .. } => { - (span, original_path, kind) + (span, None, original_path, kind) } GroupedMoveError::OtherIllegalMove { use_spans, ref original_path, ref kind } => { - (use_spans.args_or_use(), original_path, kind) + (use_spans.args_or_use(), Some(use_spans), original_path, kind) }, }; debug!("report: original_path={:?} span={:?}, kind={:?} \ @@ -250,6 +256,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { original_path, target_place, span, + use_spans, ) } IllegalMoveOriginKind::InteriorOfTypeWithDestructor { container_ty: ty } => { @@ -296,6 +303,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { move_place: &Place<'tcx>, deref_target_place: &Place<'tcx>, span: Span, + use_spans: Option<UseSpans>, ) -> DiagnosticBuilder<'a> { // Inspect the type of the content behind the // borrow to provide feedback about why this @@ -416,7 +424,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { if let Ok(snippet) = self.infcx.tcx.sess.source_map().span_to_snippet(span) { let is_option = move_ty.starts_with("std::option::Option"); let is_result = move_ty.starts_with("std::result::Result"); - if is_option || is_result { + if (is_option || is_result) && use_spans.map_or(true, |v| !v.for_closure()) { err.span_suggestion( span, &format!("consider borrowing the `{}`'s content", if is_option { |
