Skip to content

Commit a3ead62

Browse files
author
Saleem Jaffer
committed
1 parent 54479c6 commit a3ead62

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/librustc_mir/borrow_check/mutability_errors.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -383,13 +383,13 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> {
383383
binding_mode: ty::BindingMode::BindByValue(_),
384384
opt_ty_info,
385385
..
386-
})) => Some(suggest_ampmut(
386+
})) => suggest_ampmut(
387387
self.infcx.tcx,
388388
self.mir,
389389
*local,
390390
local_decl,
391391
*opt_ty_info,
392-
)),
392+
),
393393

394394
ClearCrossCrate::Set(mir::BindingForm::Var(mir::VarBindingForm {
395395
binding_mode: ty::BindingMode::BindByReference(_),
@@ -563,21 +563,24 @@ fn suggest_ampmut<'cx, 'gcx, 'tcx>(
563563
local: Local,
564564
local_decl: &mir::LocalDecl<'tcx>,
565565
opt_ty_info: Option<Span>,
566-
) -> (Span, String) {
566+
) -> Option<(Span, String)> {
567567
let locations = mir.find_assignments(local);
568568
if !locations.is_empty() {
569569
let assignment_rhs_span = mir.source_info(locations[0]).span;
570570
if let Ok(src) = tcx.sess.source_map().span_to_snippet(assignment_rhs_span) {
571+
if src.contains("&mut") {
572+
return None;
573+
}
571574
if let (true, Some(ws_pos)) = (
572575
src.starts_with("&'"),
573576
src.find(|c: char| -> bool { c.is_whitespace() }),
574577
) {
575578
let lt_name = &src[1..ws_pos];
576579
let ty = &src[ws_pos..];
577-
return (assignment_rhs_span, format!("&{} mut {}", lt_name, ty));
580+
return Some((assignment_rhs_span, format!("&{} mut {}", lt_name, ty)));
578581
} else if src.starts_with('&') {
579582
let borrowed_expr = &src[1..];
580-
return (assignment_rhs_span, format!("&mut {}", borrowed_expr));
583+
return Some((assignment_rhs_span, format!("&mut {}", borrowed_expr)));
581584
}
582585
}
583586
}
@@ -599,18 +602,18 @@ fn suggest_ampmut<'cx, 'gcx, 'tcx>(
599602
) {
600603
let lt_name = &src[1..ws_pos];
601604
let ty = &src[ws_pos..];
602-
return (highlight_span, format!("&{} mut{}", lt_name, ty));
605+
return Some((highlight_span, format!("&{} mut{}", lt_name, ty)));
603606
}
604607
}
605608

606609
let ty_mut = local_decl.ty.builtin_deref(true).unwrap();
607610
assert_eq!(ty_mut.mutbl, hir::MutImmutable);
608-
(highlight_span,
611+
Some((highlight_span,
609612
if local_decl.ty.is_region_ptr() {
610613
format!("&mut {}", ty_mut.ty)
611614
} else {
612615
format!("*mut {}", ty_mut.ty)
613-
})
616+
}))
614617
}
615618

616619
fn is_closure_or_generator(ty: ty::Ty<'_>) -> bool {

0 commit comments

Comments
 (0)