Skip to content

Commit 7d590b5

Browse files
committed
changes for new compile-fail/E0389 message
1 parent 87344aa commit 7d590b5

File tree

1 file changed

+50
-9
lines changed
  • src/librustc_mir/borrow_check

1 file changed

+50
-9
lines changed

src/librustc_mir/borrow_check/mod.rs

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,12 +1551,46 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
15511551
self.is_mutable(place, is_local_mutation_allowed)
15521552
{
15531553
error_reported = true;
1554-
15551554
let item_msg = match self.describe_place(place) {
15561555
Some(name) => format!("immutable item `{}`", name),
15571556
None => "immutable item".to_owned(),
15581557
};
15591558

1559+
// let item_msg = match place{
1560+
// Place::Projection(ref proj) => {
1561+
// let Projection { ref base, ref elem } = **proj;
1562+
// match *elem {
1563+
// ProjectionElem::Deref => {
1564+
// if let Err(place_err) = self.is_mutable(place, is_local_mutation_allowed) {
1565+
// debug!("place_err = {:?} and base={:?}", place_err, base);
1566+
// format!("`&`-reference {:?}", place_err)
1567+
1568+
1569+
// }else{
1570+
// match self.describe_place(place) {
1571+
// Some(name) => format!("immutable item `{}`", name),
1572+
// None => "immutable item".to_owned(),
1573+
// }
1574+
// }
1575+
// }
1576+
// _ => {
1577+
// match self.describe_place(place) {
1578+
// Some(name) => format!("immutable item `{}`", name),
1579+
// None => "immutable item".to_owned(),
1580+
// }
1581+
1582+
// }
1583+
// }
1584+
// },
1585+
1586+
// _=> {
1587+
// match self.describe_place(place) {
1588+
// Some(name) => format!("immutable item `{}`", name),
1589+
// None => "immutable item".to_owned(),
1590+
// }
1591+
// }
1592+
// };
1593+
15601594
let mut err = self.tcx
15611595
.cannot_borrow_path_as_mutable(span, &item_msg, Origin::Mir);
15621596
err.span_label(span, "cannot borrow as mutable");
@@ -1573,20 +1607,27 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
15731607
if let Err(place_err) = self.is_mutable(place, is_local_mutation_allowed) {
15741608
error_reported = true;
15751609

1576-
let item_msg = match self.describe_place(place) {
1577-
Some(name) => format!("immutable item `{}`", name),
1578-
None => "immutable item".to_owned(),
1610+
let item_msg = if error_reported{
1611+
if let Some(name) = self.describe_place(place_err) {
1612+
format!("`&`-reference {}", name)
1613+
}else{
1614+
match self.describe_place(place) {
1615+
Some(name) => {format!("immutable item `{}`", name)}
1616+
None => {"immutable item".to_owned()}
1617+
}
1618+
}
1619+
}else{
1620+
match self.describe_place(place) {
1621+
Some(name) => {format!("immutable item `{}`", name)}
1622+
None => {"immutable item".to_owned()}
1623+
}
15791624
};
15801625

15811626
let mut err = self.tcx.cannot_assign(span, &item_msg, Origin::Mir);
1582-
err.span_label(span, "cannot mutate");
15831627

15841628
if place != place_err {
1585-
if let Some(name) = self.describe_place(place_err) {
1586-
err.note(&format!("Value not mutable causing this error: `{}`", name));
1587-
}
1629+
err.span_label(span, "cannot assign through `&`-reference");
15881630
}
1589-
15901631
err.emit();
15911632
}
15921633
}

0 commit comments

Comments
 (0)