From 7d590b533ea93ef916cc82498506a373db1843b6 Mon Sep 17 00:00:00 2001 From: gaurikholkar Date: Wed, 14 Feb 2018 08:53:10 +0530 Subject: [PATCH] changes for new compile-fail/E0389 message --- src/librustc_mir/borrow_check/mod.rs | 59 +++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs index e51b16a37361..e5e8ffdc2f38 100644 --- a/src/librustc_mir/borrow_check/mod.rs +++ b/src/librustc_mir/borrow_check/mod.rs @@ -1551,12 +1551,46 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { self.is_mutable(place, is_local_mutation_allowed) { error_reported = true; - let item_msg = match self.describe_place(place) { Some(name) => format!("immutable item `{}`", name), None => "immutable item".to_owned(), }; + // let item_msg = match place{ + // Place::Projection(ref proj) => { + // let Projection { ref base, ref elem } = **proj; + // match *elem { + // ProjectionElem::Deref => { + // if let Err(place_err) = self.is_mutable(place, is_local_mutation_allowed) { + // debug!("place_err = {:?} and base={:?}", place_err, base); + // format!("`&`-reference {:?}", place_err) + + + // }else{ + // match self.describe_place(place) { + // Some(name) => format!("immutable item `{}`", name), + // None => "immutable item".to_owned(), + // } + // } + // } + // _ => { + // match self.describe_place(place) { + // Some(name) => format!("immutable item `{}`", name), + // None => "immutable item".to_owned(), + // } + + // } + // } + // }, + + // _=> { + // match self.describe_place(place) { + // Some(name) => format!("immutable item `{}`", name), + // None => "immutable item".to_owned(), + // } + // } + // }; + let mut err = self.tcx .cannot_borrow_path_as_mutable(span, &item_msg, Origin::Mir); err.span_label(span, "cannot borrow as mutable"); @@ -1573,20 +1607,27 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { if let Err(place_err) = self.is_mutable(place, is_local_mutation_allowed) { error_reported = true; - let item_msg = match self.describe_place(place) { - Some(name) => format!("immutable item `{}`", name), - None => "immutable item".to_owned(), + let item_msg = if error_reported{ + if let Some(name) = self.describe_place(place_err) { + format!("`&`-reference {}", name) + }else{ + match self.describe_place(place) { + Some(name) => {format!("immutable item `{}`", name)} + None => {"immutable item".to_owned()} + } + } + }else{ + match self.describe_place(place) { + Some(name) => {format!("immutable item `{}`", name)} + None => {"immutable item".to_owned()} + } }; let mut err = self.tcx.cannot_assign(span, &item_msg, Origin::Mir); - err.span_label(span, "cannot mutate"); if place != place_err { - if let Some(name) = self.describe_place(place_err) { - err.note(&format!("Value not mutable causing this error: `{}`", name)); - } + err.span_label(span, "cannot assign through `&`-reference"); } - err.emit(); } }