From 5eb83f4ec3761b69e839f364e127b8c307f6e196 Mon Sep 17 00:00:00 2001 From: Fabian Wolff Date: Fri, 2 Jul 2021 18:29:49 +0200 Subject: [PATCH] Improve error reporting for modifications behind `&` references --- .../diagnostics/mutability_errors.rs | 24 +++++++++++++++---- ...k-assign-to-andmut-in-aliasable-loc.stderr | 4 ++-- ...orrow-mut-base-ptr-in-aliasable-loc.stderr | 2 +- .../ui/borrowck/borrowck-issue-14498.stderr | 2 +- ...issue-69789-iterator-mut-suggestion.stderr | 2 +- .../issue-83309-ice-immut-in-for-loop.rs | 2 +- .../issue-83309-ice-immut-in-for-loop.stderr | 2 +- src/test/ui/borrowck/issue-85765.rs | 7 ++++++ src/test/ui/borrowck/issue-85765.stderr | 14 +++++++++-- src/test/ui/borrowck/mutability-errors.stderr | 8 +++---- src/test/ui/did_you_mean/issue-39544.rs | 2 +- src/test/ui/did_you_mean/issue-39544.stderr | 2 +- src/test/ui/error-codes/E0389.rs | 2 +- src/test/ui/error-codes/E0389.stderr | 2 +- src/test/ui/issues/issue-51244.rs | 2 +- src/test/ui/issues/issue-51244.stderr | 2 +- src/test/ui/issues/issue-51515.rs | 4 ++-- src/test/ui/issues/issue-51515.stderr | 4 ++-- src/test/ui/mut/mutable-class-fields-2.stderr | 2 +- src/test/ui/nll/issue-47388.stderr | 2 +- src/test/ui/nll/issue-51244.rs | 2 +- src/test/ui/nll/issue-51244.stderr | 2 +- src/test/ui/nll/issue-57989.rs | 2 +- src/test/ui/nll/issue-57989.stderr | 2 +- .../borrowck-move-ref-pattern.rs | 4 ++-- .../borrowck-move-ref-pattern.stderr | 4 ++-- .../ui/rfc-2005-default-binding-mode/enum.rs | 6 ++--- .../rfc-2005-default-binding-mode/enum.stderr | 6 ++--- .../explicit-mut.rs | 6 ++--- .../explicit-mut.stderr | 6 ++--- src/test/ui/suggestions/issue-68049-1.stderr | 2 +- src/test/ui/suggestions/issue-68049-2.stderr | 4 ++-- .../suggest-mut-method-for-loop.stderr | 2 +- .../ui/suggestions/suggest-ref-mut.stderr | 8 +++---- 34 files changed, 90 insertions(+), 57 deletions(-) diff --git a/compiler/rustc_mir/src/borrow_check/diagnostics/mutability_errors.rs b/compiler/rustc_mir/src/borrow_check/diagnostics/mutability_errors.rs index bf5f2c0eec2..671d947d1b1 100644 --- a/compiler/rustc_mir/src/borrow_check/diagnostics/mutability_errors.rs +++ b/compiler/rustc_mir/src/borrow_check/diagnostics/mutability_errors.rs @@ -147,7 +147,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { if let Some(desc) = access_place_desc { item_msg = format!("`{}`", desc); reason = match error_access { - AccessKind::Mutate => format!(" which is behind {}", pointer_type), + AccessKind::Mutate => format!(", which is behind {}", pointer_type), AccessKind::MutableBorrow => { format!(", as it is behind {}", pointer_type) } @@ -897,16 +897,32 @@ fn suggest_ampmut<'tcx>( ) -> (Span, String) { if let Some(assignment_rhs_span) = opt_assignment_rhs_span { if let Ok(src) = tcx.sess.source_map().span_to_snippet(assignment_rhs_span) { + let is_mutbl = |ty: &str| -> bool { + if ty.starts_with("mut") { + let rest = &ty[3..]; + match rest.chars().next() { + // e.g. `&mut x` + Some(c) if c.is_whitespace() => true, + // e.g. `&mut(x)` + Some('(') => true, + // e.g. `&mutablevar` + _ => false, + } + } else { + false + } + }; if let (true, Some(ws_pos)) = (src.starts_with("&'"), src.find(|c: char| -> bool { c.is_whitespace() })) { let lt_name = &src[1..ws_pos]; - let ty = &src[ws_pos..]; - if !ty.trim_start().starts_with("mut") { + let ty = src[ws_pos..].trim_start(); + if !is_mutbl(ty) { return (assignment_rhs_span, format!("&{} mut {}", lt_name, ty)); } } else if let Some(stripped) = src.strip_prefix('&') { - if !stripped.trim_start().starts_with("mut") { + let stripped = stripped.trim_start(); + if !is_mutbl(stripped) { return (assignment_rhs_span, format!("&mut {}", stripped)); } } diff --git a/src/test/ui/borrowck/borrowck-assign-to-andmut-in-aliasable-loc.stderr b/src/test/ui/borrowck/borrowck-assign-to-andmut-in-aliasable-loc.stderr index d8ccf36852a..0475df44744 100644 --- a/src/test/ui/borrowck/borrowck-assign-to-andmut-in-aliasable-loc.stderr +++ b/src/test/ui/borrowck/borrowck-assign-to-andmut-in-aliasable-loc.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*s.pointer` which is behind a `&` reference +error[E0594]: cannot assign to `*s.pointer`, which is behind a `&` reference --> $DIR/borrowck-assign-to-andmut-in-aliasable-loc.rs:9:5 | LL | fn a(s: &S) { @@ -6,7 +6,7 @@ LL | fn a(s: &S) { LL | *s.pointer += 1; | ^^^^^^^^^^^^^^^ `s` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*s.pointer` which is behind a `&` reference +error[E0594]: cannot assign to `*s.pointer`, which is behind a `&` reference --> $DIR/borrowck-assign-to-andmut-in-aliasable-loc.rs:17:5 | LL | fn c(s: & &mut S) { diff --git a/src/test/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.stderr b/src/test/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.stderr index 1fdeb812bf8..0866f54b9fa 100644 --- a/src/test/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.stderr +++ b/src/test/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `**t1` which is behind a `&` reference +error[E0594]: cannot assign to `**t1`, which is behind a `&` reference --> $DIR/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs:9:5 | LL | let t1 = t0; diff --git a/src/test/ui/borrowck/borrowck-issue-14498.stderr b/src/test/ui/borrowck/borrowck-issue-14498.stderr index ae9167757a0..4c0e46d4531 100644 --- a/src/test/ui/borrowck/borrowck-issue-14498.stderr +++ b/src/test/ui/borrowck/borrowck-issue-14498.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `***p` which is behind a `&` reference +error[E0594]: cannot assign to `***p`, which is behind a `&` reference --> $DIR/borrowck-issue-14498.rs:16:5 | LL | let p = &y; diff --git a/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr b/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr index d2865ffd196..369a8c61d2c 100644 --- a/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr +++ b/src/test/ui/borrowck/issue-69789-iterator-mut-suggestion.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*item` which is behind a `&` reference +error[E0594]: cannot assign to `*item`, which is behind a `&` reference --> $DIR/issue-69789-iterator-mut-suggestion.rs:7:9 | LL | for item in &mut std::iter::empty::<&'static ()>() { diff --git a/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.rs b/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.rs index 6da88bed2c6..d301e7b3524 100644 --- a/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.rs +++ b/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.rs @@ -9,7 +9,7 @@ fn main() { for v in Query.iter_mut() { //~^ NOTE this iterator yields `&` references *v -= 1; - //~^ ERROR cannot assign to `*v` which is behind a `&` reference + //~^ ERROR cannot assign to `*v`, which is behind a `&` reference //~| NOTE `v` is a `&` reference, so the data it refers to cannot be written } } diff --git a/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.stderr b/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.stderr index 143b74c39ba..26ce007dd34 100644 --- a/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.stderr +++ b/src/test/ui/borrowck/issue-83309-ice-immut-in-for-loop.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*v` which is behind a `&` reference +error[E0594]: cannot assign to `*v`, which is behind a `&` reference --> $DIR/issue-83309-ice-immut-in-for-loop.rs:11:9 | LL | for v in Query.iter_mut() { diff --git a/src/test/ui/borrowck/issue-85765.rs b/src/test/ui/borrowck/issue-85765.rs index b82e0298158..1a5f7434fe2 100644 --- a/src/test/ui/borrowck/issue-85765.rs +++ b/src/test/ui/borrowck/issue-85765.rs @@ -5,4 +5,11 @@ fn main() { rofl.push(Vec::new()); //~^ ERROR cannot borrow `*rofl` as mutable, as it is behind a `&` reference //~| NOTE `rofl` is a `&` reference, so the data it refers to cannot be borrowed as mutable + + let mut mutvar = 42; + let r = &mutvar; + //~^ HELP consider changing this to be a mutable reference + *r = 0; + //~^ ERROR cannot assign to `*r`, which is behind a `&` reference + //~| NOTE `r` is a `&` reference, so the data it refers to cannot be written } diff --git a/src/test/ui/borrowck/issue-85765.stderr b/src/test/ui/borrowck/issue-85765.stderr index 863c2e8eccc..4da4c8f5946 100644 --- a/src/test/ui/borrowck/issue-85765.stderr +++ b/src/test/ui/borrowck/issue-85765.stderr @@ -7,6 +7,16 @@ LL | LL | rofl.push(Vec::new()); | ^^^^ `rofl` is a `&` reference, so the data it refers to cannot be borrowed as mutable -error: aborting due to previous error +error[E0594]: cannot assign to `*r`, which is behind a `&` reference + --> $DIR/issue-85765.rs:12:5 + | +LL | let r = &mutvar; + | ------- help: consider changing this to be a mutable reference: `&mut mutvar` +LL | +LL | *r = 0; + | ^^^^^^ `r` is a `&` reference, so the data it refers to cannot be written -For more information about this error, try `rustc --explain E0596`. +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0594, E0596. +For more information about an error, try `rustc --explain E0594`. diff --git a/src/test/ui/borrowck/mutability-errors.stderr b/src/test/ui/borrowck/mutability-errors.stderr index 5361ebe3916..edab22569b3 100644 --- a/src/test/ui/borrowck/mutability-errors.stderr +++ b/src/test/ui/borrowck/mutability-errors.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*x` which is behind a `&` reference +error[E0594]: cannot assign to `*x`, which is behind a `&` reference --> $DIR/mutability-errors.rs:9:5 | LL | fn named_ref(x: &(i32,)) { @@ -6,7 +6,7 @@ LL | fn named_ref(x: &(i32,)) { LL | *x = (1,); | ^^^^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `x.0` which is behind a `&` reference +error[E0594]: cannot assign to `x.0`, which is behind a `&` reference --> $DIR/mutability-errors.rs:10:5 | LL | fn named_ref(x: &(i32,)) { @@ -57,7 +57,7 @@ error[E0596]: cannot borrow data in a `&` reference as mutable LL | &mut f().0; | ^^^^^^^^^^ cannot borrow as mutable -error[E0594]: cannot assign to `*x` which is behind a `*const` pointer +error[E0594]: cannot assign to `*x`, which is behind a `*const` pointer --> $DIR/mutability-errors.rs:23:5 | LL | unsafe fn named_ptr(x: *const (i32,)) { @@ -65,7 +65,7 @@ LL | unsafe fn named_ptr(x: *const (i32,)) { LL | *x = (1,); | ^^^^^^^^^ `x` is a `*const` pointer, so the data it refers to cannot be written -error[E0594]: cannot assign to `x.0` which is behind a `*const` pointer +error[E0594]: cannot assign to `x.0`, which is behind a `*const` pointer --> $DIR/mutability-errors.rs:24:5 | LL | unsafe fn named_ptr(x: *const (i32,)) { diff --git a/src/test/ui/did_you_mean/issue-39544.rs b/src/test/ui/did_you_mean/issue-39544.rs index 3c86f29a89c..a19d3f7047c 100644 --- a/src/test/ui/did_you_mean/issue-39544.rs +++ b/src/test/ui/did_you_mean/issue-39544.rs @@ -46,5 +46,5 @@ pub fn with_tuple() { let mut y = 0; let x = (&y,); *x.0 = 1; - //~^ ERROR cannot assign to `*x.0` which is behind a `&` reference + //~^ ERROR cannot assign to `*x.0`, which is behind a `&` reference } diff --git a/src/test/ui/did_you_mean/issue-39544.stderr b/src/test/ui/did_you_mean/issue-39544.stderr index ce0d697238c..68180eaee03 100644 --- a/src/test/ui/did_you_mean/issue-39544.stderr +++ b/src/test/ui/did_you_mean/issue-39544.stderr @@ -90,7 +90,7 @@ LL | let _ = &mut z.x; LL | let _ = &mut w.x; | ^^^^^^^^ `w` is a `&` reference, so the data it refers to cannot be borrowed as mutable -error[E0594]: cannot assign to `*x.0` which is behind a `&` reference +error[E0594]: cannot assign to `*x.0`, which is behind a `&` reference --> $DIR/issue-39544.rs:48:5 | LL | *x.0 = 1; diff --git a/src/test/ui/error-codes/E0389.rs b/src/test/ui/error-codes/E0389.rs index 9dab2c30924..41172b362f4 100644 --- a/src/test/ui/error-codes/E0389.rs +++ b/src/test/ui/error-codes/E0389.rs @@ -5,6 +5,6 @@ struct FancyNum { fn main() { let mut fancy = FancyNum{ num: 5 }; let fancy_ref = &(&mut fancy); - fancy_ref.num = 6; //~ ERROR cannot assign to `fancy_ref.num` which is behind a `&` reference + fancy_ref.num = 6; //~ ERROR cannot assign to `fancy_ref.num`, which is behind a `&` reference println!("{}", fancy_ref.num); } diff --git a/src/test/ui/error-codes/E0389.stderr b/src/test/ui/error-codes/E0389.stderr index c47750b6f4e..3d615bd932f 100644 --- a/src/test/ui/error-codes/E0389.stderr +++ b/src/test/ui/error-codes/E0389.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `fancy_ref.num` which is behind a `&` reference +error[E0594]: cannot assign to `fancy_ref.num`, which is behind a `&` reference --> $DIR/E0389.rs:8:5 | LL | let fancy_ref = &(&mut fancy); diff --git a/src/test/ui/issues/issue-51244.rs b/src/test/ui/issues/issue-51244.rs index 509060e1ad8..d634b8bf800 100644 --- a/src/test/ui/issues/issue-51244.rs +++ b/src/test/ui/issues/issue-51244.rs @@ -1,4 +1,4 @@ fn main() { let ref my_ref @ _ = 0; - *my_ref = 0; //~ ERROR cannot assign to `*my_ref` which is behind a `&` reference [E0594] + *my_ref = 0; //~ ERROR cannot assign to `*my_ref`, which is behind a `&` reference [E0594] } diff --git a/src/test/ui/issues/issue-51244.stderr b/src/test/ui/issues/issue-51244.stderr index c91083955b8..19f0223a357 100644 --- a/src/test/ui/issues/issue-51244.stderr +++ b/src/test/ui/issues/issue-51244.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*my_ref` which is behind a `&` reference +error[E0594]: cannot assign to `*my_ref`, which is behind a `&` reference --> $DIR/issue-51244.rs:3:5 | LL | let ref my_ref @ _ = 0; diff --git a/src/test/ui/issues/issue-51515.rs b/src/test/ui/issues/issue-51515.rs index 8eab7b2fa3a..54fd176de75 100644 --- a/src/test/ui/issues/issue-51515.rs +++ b/src/test/ui/issues/issue-51515.rs @@ -3,10 +3,10 @@ fn main() { //~^ HELP consider changing this to be a mutable reference //~| SUGGESTION &mut 16 *foo = 32; - //~^ ERROR cannot assign to `*foo` which is behind a `&` reference + //~^ ERROR cannot assign to `*foo`, which is behind a `&` reference let bar = foo; //~^ HELP consider changing this to be a mutable reference //~| SUGGESTION &mut i32 *bar = 64; - //~^ ERROR cannot assign to `*bar` which is behind a `&` reference + //~^ ERROR cannot assign to `*bar`, which is behind a `&` reference } diff --git a/src/test/ui/issues/issue-51515.stderr b/src/test/ui/issues/issue-51515.stderr index 3c208935f31..62bb462faa2 100644 --- a/src/test/ui/issues/issue-51515.stderr +++ b/src/test/ui/issues/issue-51515.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*foo` which is behind a `&` reference +error[E0594]: cannot assign to `*foo`, which is behind a `&` reference --> $DIR/issue-51515.rs:5:5 | LL | let foo = &16; @@ -7,7 +7,7 @@ LL | let foo = &16; LL | *foo = 32; | ^^^^^^^^^ `foo` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*bar` which is behind a `&` reference +error[E0594]: cannot assign to `*bar`, which is behind a `&` reference --> $DIR/issue-51515.rs:10:5 | LL | let bar = foo; diff --git a/src/test/ui/mut/mutable-class-fields-2.stderr b/src/test/ui/mut/mutable-class-fields-2.stderr index 15323ce9a97..5a4e31947f2 100644 --- a/src/test/ui/mut/mutable-class-fields-2.stderr +++ b/src/test/ui/mut/mutable-class-fields-2.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `self.how_hungry` which is behind a `&` reference +error[E0594]: cannot assign to `self.how_hungry`, which is behind a `&` reference --> $DIR/mutable-class-fields-2.rs:9:5 | LL | pub fn eat(&self) { diff --git a/src/test/ui/nll/issue-47388.stderr b/src/test/ui/nll/issue-47388.stderr index 8d48b00f8d1..a4ee7781753 100644 --- a/src/test/ui/nll/issue-47388.stderr +++ b/src/test/ui/nll/issue-47388.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `fancy_ref.num` which is behind a `&` reference +error[E0594]: cannot assign to `fancy_ref.num`, which is behind a `&` reference --> $DIR/issue-47388.rs:8:5 | LL | let fancy_ref = &(&mut fancy); diff --git a/src/test/ui/nll/issue-51244.rs b/src/test/ui/nll/issue-51244.rs index 743415d58af..c4cbee6754c 100644 --- a/src/test/ui/nll/issue-51244.rs +++ b/src/test/ui/nll/issue-51244.rs @@ -1,5 +1,5 @@ fn main() { let ref my_ref @ _ = 0; *my_ref = 0; - //~^ ERROR cannot assign to `*my_ref` which is behind a `&` reference [E0594] + //~^ ERROR cannot assign to `*my_ref`, which is behind a `&` reference [E0594] } diff --git a/src/test/ui/nll/issue-51244.stderr b/src/test/ui/nll/issue-51244.stderr index c91083955b8..19f0223a357 100644 --- a/src/test/ui/nll/issue-51244.stderr +++ b/src/test/ui/nll/issue-51244.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*my_ref` which is behind a `&` reference +error[E0594]: cannot assign to `*my_ref`, which is behind a `&` reference --> $DIR/issue-51244.rs:3:5 | LL | let ref my_ref @ _ = 0; diff --git a/src/test/ui/nll/issue-57989.rs b/src/test/ui/nll/issue-57989.rs index c410f0b0bfb..8f3dec454d5 100644 --- a/src/test/ui/nll/issue-57989.rs +++ b/src/test/ui/nll/issue-57989.rs @@ -2,7 +2,7 @@ fn f(x: &i32) { let g = &x; - *x = 0; //~ ERROR cannot assign to `*x` which is behind a `&` reference + *x = 0; //~ ERROR cannot assign to `*x`, which is behind a `&` reference //~| ERROR cannot assign to `*x` because it is borrowed g; } diff --git a/src/test/ui/nll/issue-57989.stderr b/src/test/ui/nll/issue-57989.stderr index 4c416105035..e85e63e52ec 100644 --- a/src/test/ui/nll/issue-57989.stderr +++ b/src/test/ui/nll/issue-57989.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*x` which is behind a `&` reference +error[E0594]: cannot assign to `*x`, which is behind a `&` reference --> $DIR/issue-57989.rs:5:5 | LL | fn f(x: &i32) { diff --git a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs index 9c320edc4dc..a6144c9497d 100644 --- a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs +++ b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs @@ -23,8 +23,8 @@ fn tuple() { _x1 = U; //~ ERROR cannot assign twice to immutable variable let _x0_hold = &mut tup.0; //~ ERROR cannot borrow `tup.0` as mutable because it is also let (ref mut _x0_hold, ..) = tup; //~ ERROR cannot borrow `tup.0` as mutable because it is also - *_x0 = U; //~ ERROR cannot assign to `*_x0` which is behind a `&` reference - *_x2 = U; //~ ERROR cannot assign to `*_x2` which is behind a `&` reference + *_x0 = U; //~ ERROR cannot assign to `*_x0`, which is behind a `&` reference + *_x2 = U; //~ ERROR cannot assign to `*_x2`, which is behind a `&` reference drop(tup.1); //~ ERROR use of moved value: `tup.1` let _x1_hold = &tup.1; //~ ERROR borrow of moved value: `tup.1` let (.., ref mut _x3) = tup; diff --git a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr index d0726f05cc3..5beca04d285 100644 --- a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr +++ b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr @@ -101,7 +101,7 @@ LL | let (ref mut _x0_hold, ..) = tup; LL | *_x0 = U; | -------- immutable borrow later used here -error[E0594]: cannot assign to `*_x0` which is behind a `&` reference +error[E0594]: cannot assign to `*_x0`, which is behind a `&` reference --> $DIR/borrowck-move-ref-pattern.rs:26:5 | LL | let (ref _x0, _x1, ref _x2, ..) = tup; @@ -110,7 +110,7 @@ LL | let (ref _x0, _x1, ref _x2, ..) = tup; LL | *_x0 = U; | ^^^^^^^^ `_x0` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*_x2` which is behind a `&` reference +error[E0594]: cannot assign to `*_x2`, which is behind a `&` reference --> $DIR/borrowck-move-ref-pattern.rs:27:5 | LL | let (ref _x0, _x1, ref _x2, ..) = tup; diff --git a/src/test/ui/rfc-2005-default-binding-mode/enum.rs b/src/test/ui/rfc-2005-default-binding-mode/enum.rs index af82d36f87e..4e57769d6e2 100644 --- a/src/test/ui/rfc-2005-default-binding-mode/enum.rs +++ b/src/test/ui/rfc-2005-default-binding-mode/enum.rs @@ -6,17 +6,17 @@ use Wrapper::Wrap; pub fn main() { let Wrap(x) = &Wrap(3); - *x += 1; //~ ERROR cannot assign to `*x` which is behind a `&` reference + *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference if let Some(x) = &Some(3) { - *x += 1; //~ ERROR cannot assign to `*x` which is behind a `&` reference + *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference } else { panic!(); } while let Some(x) = &Some(3) { - *x += 1; //~ ERROR cannot assign to `*x` which is behind a `&` reference + *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference break; } } diff --git a/src/test/ui/rfc-2005-default-binding-mode/enum.stderr b/src/test/ui/rfc-2005-default-binding-mode/enum.stderr index d6a89006bc0..21e3d3d273d 100644 --- a/src/test/ui/rfc-2005-default-binding-mode/enum.stderr +++ b/src/test/ui/rfc-2005-default-binding-mode/enum.stderr @@ -1,16 +1,16 @@ -error[E0594]: cannot assign to `*x` which is behind a `&` reference +error[E0594]: cannot assign to `*x`, which is behind a `&` reference --> $DIR/enum.rs:9:5 | LL | *x += 1; | ^^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*x` which is behind a `&` reference +error[E0594]: cannot assign to `*x`, which is behind a `&` reference --> $DIR/enum.rs:13:9 | LL | *x += 1; | ^^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*x` which is behind a `&` reference +error[E0594]: cannot assign to `*x`, which is behind a `&` reference --> $DIR/enum.rs:19:9 | LL | *x += 1; diff --git a/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.rs b/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.rs index 212fd94ded3..b8fde2208ac 100644 --- a/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.rs +++ b/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.rs @@ -4,7 +4,7 @@ fn main() { match &&Some(5i32) { Some(n) => { - *n += 1; //~ ERROR cannot assign to `*n` which is behind a `&` reference + *n += 1; //~ ERROR cannot assign to `*n`, which is behind a `&` reference let _ = n; } None => {}, @@ -12,7 +12,7 @@ fn main() { match &mut &Some(5i32) { Some(n) => { - *n += 1; //~ ERROR cannot assign to `*n` which is behind a `&` reference + *n += 1; //~ ERROR cannot assign to `*n`, which is behind a `&` reference let _ = n; } None => {}, @@ -20,7 +20,7 @@ fn main() { match &&mut Some(5i32) { Some(n) => { - *n += 1; //~ ERROR cannot assign to `*n` which is behind a `&` reference + *n += 1; //~ ERROR cannot assign to `*n`, which is behind a `&` reference let _ = n; } None => {}, diff --git a/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.stderr b/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.stderr index a6f2f3ec309..c3f64f65a41 100644 --- a/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.stderr +++ b/src/test/ui/rfc-2005-default-binding-mode/explicit-mut.stderr @@ -1,16 +1,16 @@ -error[E0594]: cannot assign to `*n` which is behind a `&` reference +error[E0594]: cannot assign to `*n`, which is behind a `&` reference --> $DIR/explicit-mut.rs:7:13 | LL | *n += 1; | ^^^^^^^ `n` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*n` which is behind a `&` reference +error[E0594]: cannot assign to `*n`, which is behind a `&` reference --> $DIR/explicit-mut.rs:15:13 | LL | *n += 1; | ^^^^^^^ `n` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*n` which is behind a `&` reference +error[E0594]: cannot assign to `*n`, which is behind a `&` reference --> $DIR/explicit-mut.rs:23:13 | LL | *n += 1; diff --git a/src/test/ui/suggestions/issue-68049-1.stderr b/src/test/ui/suggestions/issue-68049-1.stderr index 32367d2d0cf..7f931f0cdc9 100644 --- a/src/test/ui/suggestions/issue-68049-1.stderr +++ b/src/test/ui/suggestions/issue-68049-1.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `self.0` which is behind a `&` reference +error[E0594]: cannot assign to `self.0`, which is behind a `&` reference --> $DIR/issue-68049-1.rs:7:9 | LL | self.0 += 1; diff --git a/src/test/ui/suggestions/issue-68049-2.stderr b/src/test/ui/suggestions/issue-68049-2.stderr index f10a83c68a8..2f31193e4a4 100644 --- a/src/test/ui/suggestions/issue-68049-2.stderr +++ b/src/test/ui/suggestions/issue-68049-2.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `*input` which is behind a `&` reference +error[E0594]: cannot assign to `*input`, which is behind a `&` reference --> $DIR/issue-68049-2.rs:9:7 | LL | fn example(&self, input: &i32); // should suggest here @@ -7,7 +7,7 @@ LL | fn example(&self, input: &i32); // should suggest here LL | *input = self.0; | ^^^^^^^^^^^^^^^ `input` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `self.0` which is behind a `&` reference +error[E0594]: cannot assign to `self.0`, which is behind a `&` reference --> $DIR/issue-68049-2.rs:17:5 | LL | fn example(&self, input: &i32); // should suggest here diff --git a/src/test/ui/suggestions/suggest-mut-method-for-loop.stderr b/src/test/ui/suggestions/suggest-mut-method-for-loop.stderr index 6ab08197441..3eb9e1031d7 100644 --- a/src/test/ui/suggestions/suggest-mut-method-for-loop.stderr +++ b/src/test/ui/suggestions/suggest-mut-method-for-loop.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `t.v` which is behind a `&` reference +error[E0594]: cannot assign to `t.v`, which is behind a `&` reference --> $DIR/suggest-mut-method-for-loop.rs:14:9 | LL | for mut t in buzz.values() { diff --git a/src/test/ui/suggestions/suggest-ref-mut.stderr b/src/test/ui/suggestions/suggest-ref-mut.stderr index b4981279a23..9fd2658ec70 100644 --- a/src/test/ui/suggestions/suggest-ref-mut.stderr +++ b/src/test/ui/suggestions/suggest-ref-mut.stderr @@ -1,4 +1,4 @@ -error[E0594]: cannot assign to `self.0` which is behind a `&` reference +error[E0594]: cannot assign to `self.0`, which is behind a `&` reference --> $DIR/suggest-ref-mut.rs:7:9 | LL | fn zap(&self) { @@ -7,7 +7,7 @@ LL | fn zap(&self) { LL | self.0 = 32; | ^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*foo` which is behind a `&` reference +error[E0594]: cannot assign to `*foo`, which is behind a `&` reference --> $DIR/suggest-ref-mut.rs:16:5 | LL | let ref foo = 16; @@ -16,7 +16,7 @@ LL | let ref foo = 16; LL | *foo = 32; | ^^^^^^^^^ `foo` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*bar` which is behind a `&` reference +error[E0594]: cannot assign to `*bar`, which is behind a `&` reference --> $DIR/suggest-ref-mut.rs:21:9 | LL | if let Some(ref bar) = Some(16) { @@ -25,7 +25,7 @@ LL | if let Some(ref bar) = Some(16) { LL | *bar = 32; | ^^^^^^^^^ `bar` is a `&` reference, so the data it refers to cannot be written -error[E0594]: cannot assign to `*quo` which is behind a `&` reference +error[E0594]: cannot assign to `*quo`, which is behind a `&` reference --> $DIR/suggest-ref-mut.rs:25:22 | LL | ref quo => { *quo = 32; },