From 9eebe77a86cb07e7444f07b7b7dac879f5878269 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Fri, 28 Sep 2018 12:23:40 +0200 Subject: [PATCH] Have `add_explanation_to_diagnostic` also take `Mir` as parameter. This is preparation for allowing the `BorrowExplanation` carry things like `mir::Location` or `mir::Local` and still be able to generate usable diagnostic text. --- src/librustc_mir/borrow_check/error_reporting.rs | 16 ++++++++-------- .../borrow_check/nll/explain_borrow/mod.rs | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/librustc_mir/borrow_check/error_reporting.rs b/src/librustc_mir/borrow_check/error_reporting.rs index 45435c64749e..5dcab038baeb 100644 --- a/src/librustc_mir/borrow_check/error_reporting.rs +++ b/src/librustc_mir/borrow_check/error_reporting.rs @@ -262,7 +262,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { move_spans.var_span_label(&mut err, "move occurs due to use in closure"); self.explain_why_borrow_contains_point(context, borrow, None) - .add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + .add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); err.buffer(&mut self.errors_buffer); } @@ -299,7 +299,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { }); self.explain_why_borrow_contains_point(context, borrow, None) - .add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + .add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); err.buffer(&mut self.errors_buffer); } @@ -483,7 +483,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { } self.explain_why_borrow_contains_point(context, issued_borrow, None) - .add_explanation_to_diagnostic(self.infcx.tcx, &mut err, first_borrow_desc.to_string()); + .add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, first_borrow_desc.to_string()); err.buffer(&mut self.errors_buffer); } @@ -638,7 +638,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { if let BorrowExplanation::MustBeValidFor(..) = explanation { } else { - explanation.add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + explanation.add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); } } else { err.span_label(borrow_span, "borrowed value does not live long enough"); @@ -649,7 +649,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { borrow_spans.args_span_label(&mut err, "value captured here"); - explanation.add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + explanation.add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); } err @@ -709,7 +709,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { _ => {} } - explanation.add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + explanation.add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); err.buffer(&mut self.errors_buffer); } @@ -776,7 +776,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { } _ => {} } - explanation.add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + explanation.add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); borrow_spans.args_span_label(&mut err, "value captured here"); @@ -913,7 +913,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { loan_spans.var_span_label(&mut err, "borrow occurs due to use in closure"); self.explain_why_borrow_contains_point(context, loan, None) - .add_explanation_to_diagnostic(self.infcx.tcx, &mut err, String::new()); + .add_explanation_to_diagnostic(self.infcx.tcx, self.mir, &mut err, String::new()); err.buffer(&mut self.errors_buffer); } diff --git a/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs b/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs index d2f707ed2e8e..3319113aec07 100644 --- a/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs +++ b/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs @@ -13,7 +13,7 @@ use borrow_check::error_reporting::UseSpans; use borrow_check::nll::region_infer::Cause; use borrow_check::{Context, MirBorrowckCtxt, WriteKind}; use rustc::ty::{Region, TyCtxt}; -use rustc::mir::{FakeReadCause, Location, Operand, Place, StatementKind, TerminatorKind}; +use rustc::mir::{FakeReadCause, Location, Mir, Operand, Place, StatementKind, TerminatorKind}; use rustc_errors::DiagnosticBuilder; use syntax_pos::Span; use syntax_pos::symbol::Symbol; @@ -40,6 +40,7 @@ impl<'tcx> BorrowExplanation<'tcx> { pub(in borrow_check) fn add_explanation_to_diagnostic<'cx, 'gcx>( &self, tcx: TyCtxt<'cx, 'gcx, 'tcx>, + _mir: &Mir<'tcx>, err: &mut DiagnosticBuilder<'_>, borrow_desc: String, ) {