@@ -1551,12 +1551,46 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
1551
1551
self . is_mutable ( place, is_local_mutation_allowed)
1552
1552
{
1553
1553
error_reported = true ;
1554
-
1555
1554
let item_msg = match self . describe_place ( place) {
1556
1555
Some ( name) => format ! ( "immutable item `{}`" , name) ,
1557
1556
None => "immutable item" . to_owned ( ) ,
1558
1557
} ;
1559
1558
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
+
1560
1594
let mut err = self . tcx
1561
1595
. cannot_borrow_path_as_mutable ( span, & item_msg, Origin :: Mir ) ;
1562
1596
err. span_label ( span, "cannot borrow as mutable" ) ;
@@ -1573,20 +1607,27 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
1573
1607
if let Err ( place_err) = self . is_mutable ( place, is_local_mutation_allowed) {
1574
1608
error_reported = true ;
1575
1609
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
+ }
1579
1624
} ;
1580
1625
1581
1626
let mut err = self . tcx . cannot_assign ( span, & item_msg, Origin :: Mir ) ;
1582
- err. span_label ( span, "cannot mutate" ) ;
1583
1627
1584
1628
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" ) ;
1588
1630
}
1589
-
1590
1631
err. emit ( ) ;
1591
1632
}
1592
1633
}
0 commit comments