Auto merge of #89110 - Aaron1011:adjustment-span, r=estebank

Use larger span for adjustment THIR expressions

Currently, we use a relatively 'small' span for THIR
expressions generated by an 'adjustment' (e.g. an autoderef,
autoborrow, unsizing). As a result, if a borrow generated
by an adustment ends up causing a borrowcheck error, for example:

```rust
let mut my_var = String::new();
let my_ref = &my_var
my_var.push('a');
my_ref;
```

then the span for the mutable borrow may end up referring
to only the base expression (e.g. `my_var`), rather than
the method call which triggered the mutable borrow
(e.g. `my_var.push('a')`)

Due to a quirk of the MIR borrowck implementation,
this doesn't always get exposed in migration mode,
but it does in many cases.

This commit makes THIR building consistently use 'larger'
spans for adjustment expressions. These spans are recoded
when we first create the adjustment during typecheck. For
example, an autoref adjustment triggered by a method call
will record the span of the entire method call.

The intent of this change it make it clearer to users
when it's the specific way in which a variable is
used (for example, in a method call) that produdes
a borrowcheck error. For example, an error message
claiming that a 'mutable borrow occurs here' might
be confusing if it just points at a usage of a variable
(e.g. `my_var`), when no `&mut` is in sight. Pointing
at the entire expression should help to emphasize
that the method call itself is responsible for
the mutable borrow.

In several cases, this makes the `#![feature(nll)]` diagnostic
output match up exactly with the default (migration mode) output.
As a result, several `.nll.stderr` files end up getting removed
entirely.
This commit is contained in:
bors 2021-09-30 01:40:30 +00:00
commit 4aa7879b55
170 changed files with 453 additions and 583 deletions

View file

@ -7,7 +7,7 @@ LL | for x in &mut xs {
| first mutable borrow occurs here
| first borrow later used here
LL | xs.push(1)
| ^^ second mutable borrow occurs here
| ^^^^^^^^^^ second mutable borrow occurs here
error: aborting due to previous error

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
LL | pub async fn f(x: Option<usize>) {
| - help: consider changing this to be mutable: `mut x`
LL | x.take();
| ^ cannot borrow as mutable
| ^^^^^^^^ cannot borrow as mutable
error[E0384]: cannot assign twice to immutable variable `x`
--> $DIR/issue-61452.rs:9:5

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `data` as mutable, as it is not declared as mutable
LL | async fn response(data: Vec<u8>) {
| ---- help: consider changing this to be mutable: `mut data`
LL | data.reverse();
| ^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -30,7 +30,7 @@ LL | x
| - value moved here
LL | +
LL | x.clone();
| ^ value borrowed here after move
| ^^^^^^^^^ value borrowed here after move
|
help: consider further restricting this bound
|

View file

@ -7,7 +7,7 @@ LL | let y = x;
| ^ move out of `x` occurs here
LL |
LL | r.use_ref();
| - borrow later used here
| ----------- borrow later used here
error[E0502]: cannot borrow `x.0` as mutable because it is also borrowed as immutable
--> $DIR/borrow-tuple-fields.rs:18:13
@ -17,7 +17,7 @@ LL | let a = &x.0;
LL | let b = &mut x.0;
| ^^^^^^^^ mutable borrow occurs here
LL | a.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error[E0499]: cannot borrow `x.0` as mutable more than once at a time
--> $DIR/borrow-tuple-fields.rs:23:13
@ -27,7 +27,7 @@ LL | let a = &mut x.0;
LL | let b = &mut x.0;
| ^^^^^^^^ second mutable borrow occurs here
LL | a.use_ref();
| - first borrow later used here
| ----------- first borrow later used here
error[E0505]: cannot move out of `x` because it is borrowed
--> $DIR/borrow-tuple-fields.rs:28:13
@ -37,7 +37,7 @@ LL | let r = &x.0;
LL | let y = x;
| ^ move out of `x` occurs here
LL | r.use_ref();
| - borrow later used here
| ----------- borrow later used here
error[E0502]: cannot borrow `x.0` as mutable because it is also borrowed as immutable
--> $DIR/borrow-tuple-fields.rs:33:13
@ -47,7 +47,7 @@ LL | let a = &x.0;
LL | let b = &mut x.0;
| ^^^^^^^^ mutable borrow occurs here
LL | a.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error[E0499]: cannot borrow `x.0` as mutable more than once at a time
--> $DIR/borrow-tuple-fields.rs:38:13
@ -57,7 +57,7 @@ LL | let a = &mut x.0;
LL | let b = &mut x.0;
| ^^^^^^^^ second mutable borrow occurs here
LL | a.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error: aborting due to 6 previous errors

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
LL | fn func(arg: S) {
| --- help: consider changing this to be mutable: `mut arg`
LL | arg.mutate();
| ^^^ cannot borrow as mutable
| ^^^^^^^^^^^^ cannot borrow as mutable
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
--> $DIR/borrowck-argument.rs:15:9
@ -12,7 +12,7 @@ error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
LL | fn method(&self, arg: S) {
| --- help: consider changing this to be mutable: `mut arg`
LL | arg.mutate();
| ^^^ cannot borrow as mutable
| ^^^^^^^^^^^^ cannot borrow as mutable
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
--> $DIR/borrowck-argument.rs:21:9
@ -20,13 +20,13 @@ error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
LL | fn default(&self, arg: S) {
| --- help: consider changing this to be mutable: `mut arg`
LL | arg.mutate();
| ^^^ cannot borrow as mutable
| ^^^^^^^^^^^^ cannot borrow as mutable
error[E0596]: cannot borrow `arg` as mutable, as it is not declared as mutable
--> $DIR/borrowck-argument.rs:32:17
|
LL | (|arg: S| { arg.mutate() })(s);
| --- ^^^ cannot borrow as mutable
| --- ^^^^^^^^^^^^ cannot borrow as mutable
| |
| help: consider changing this to be mutable: `mut arg`

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
LL | let x = Foo { x: 3 };
| - help: consider changing this to be mutable: `mut x`
LL | x.printme();
| ^ cannot borrow as mutable
| ^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `*a` as mutable, as `a` is not declared as mutable
LL | let a: Box<_> = Box::new(A);
| - help: consider changing this to be mutable: `mut a`
LL | a.foo();
| ^ cannot borrow as mutable
| ^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -2,11 +2,11 @@ error[E0499]: cannot borrow `*x` as mutable more than once at a time
--> $DIR/borrowck-borrow-mut-object-twice.rs:13:5
|
LL | let y = x.f1();
| - first mutable borrow occurs here
| ------ first mutable borrow occurs here
LL | x.f2();
| ^ second mutable borrow occurs here
| ^^^^^^ second mutable borrow occurs here
LL | y.use_ref();
| - first borrow later used here
| ----------- first borrow later used here
error: aborting due to previous error

View file

@ -58,7 +58,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:72:5
|
LL | x.set(0, 0);
| ^ cannot borrow as mutable
| ^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`
@ -66,7 +66,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:76:5
|
LL | x.set(0, 0);
| ^ cannot borrow as mutable
| ^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`
@ -74,7 +74,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:84:5
|
LL | x.y_mut()
| ^ cannot borrow as mutable
| ^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`
@ -82,7 +82,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:88:5
|
LL | x.y_mut()
| ^ cannot borrow as mutable
| ^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`
@ -90,7 +90,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:92:6
|
LL | *x.y_mut() = 3;
| ^ cannot borrow as mutable
| ^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`
@ -98,7 +98,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:96:6
|
LL | *x.y_mut() = 3;
| ^ cannot borrow as mutable
| ^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`
@ -106,7 +106,7 @@ error[E0596]: cannot borrow data in an `Rc` as mutable
--> $DIR/borrowck-borrow-overloaded-auto-deref.rs:100:6
|
LL | *x.y_mut() = 3;
| ^ cannot borrow as mutable
| ^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `Rc<Point>`

View file

@ -7,7 +7,7 @@ LL | buggy_map.insert(42, &*Box::new(1));
| creates a temporary which is freed while still in use
...
LL | buggy_map.insert(43, &*tmp);
| --------- borrow later used here
| --------------------------- borrow later used here
|
= note: consider using a `let` binding to create a longer lived value

View file

@ -6,7 +6,7 @@ LL | let p = &this.x;
LL | &mut this.x;
| ^^^^^^^^^^^ mutable borrow occurs here
LL | p.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error: aborting due to previous error

View file

@ -41,7 +41,7 @@ error[E0503]: cannot use `f.x` because it was mutably borrowed
--> $DIR/borrowck-describe-lvalue.rs:37:9
|
LL | let x = f.x();
| - borrow of `f` occurs here
| ----- borrow of `f` occurs here
LL | f.x;
| ^^^ use of borrowed `f`
LL | drop(x);
@ -51,7 +51,7 @@ error[E0503]: cannot use `g.0` because it was mutably borrowed
--> $DIR/borrowck-describe-lvalue.rs:44:9
|
LL | let x = g.x();
| - borrow of `g` occurs here
| ----- borrow of `g` occurs here
LL | g.0;
| ^^^ use of borrowed `g`
LL | drop(x);
@ -71,7 +71,7 @@ error[E0503]: cannot use `e.0` because it was mutably borrowed
--> $DIR/borrowck-describe-lvalue.rs:59:20
|
LL | let x = e.x();
| - borrow of `e` occurs here
| ----- borrow of `e` occurs here
LL | match e {
LL | Baz::X(value) => value
| ^^^^^ use of borrowed `e`
@ -93,7 +93,7 @@ error[E0503]: cannot use `f.x` because it was mutably borrowed
--> $DIR/borrowck-describe-lvalue.rs:74:9
|
LL | let x = f.x();
| - borrow of `*f` occurs here
| ----- borrow of `*f` occurs here
LL | f.x;
| ^^^ use of borrowed `*f`
LL | drop(x);
@ -103,7 +103,7 @@ error[E0503]: cannot use `g.0` because it was mutably borrowed
--> $DIR/borrowck-describe-lvalue.rs:81:9
|
LL | let x = g.x();
| - borrow of `*g` occurs here
| ----- borrow of `*g` occurs here
LL | g.0;
| ^^^ use of borrowed `*g`
LL | drop(x);
@ -123,7 +123,7 @@ error[E0503]: cannot use `e.0` because it was mutably borrowed
--> $DIR/borrowck-describe-lvalue.rs:96:20
|
LL | let x = e.x();
| - borrow of `*e` occurs here
| ----- borrow of `*e` occurs here
LL | match *e {
LL | Baz::X(value) => value
| ^^^^^ use of borrowed `*e`

View file

@ -1,27 +0,0 @@
error[E0502]: cannot borrow `vector` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-for-loop-head-linkage.rs:7:9
|
LL | for &x in &vector {
| -------
| |
| immutable borrow occurs here
| immutable borrow later used here
LL | let cap = vector.capacity();
LL | vector.extend(repeat(0));
| ^^^^^^ mutable borrow occurs here
error[E0502]: cannot borrow `vector` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-for-loop-head-linkage.rs:8:9
|
LL | for &x in &vector {
| -------
| |
| immutable borrow occurs here
| immutable borrow later used here
...
LL | vector[1] = 5;
| ^^^^^^ mutable borrow occurs here
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0502`.

View file

@ -16,15 +16,17 @@ LL | | })
error[E0500]: closure requires unique access to `f` but it is already borrowed
--> $DIR/borrowck-insert-during-each.rs:18:9
|
LL | f.foo(
| - --- first borrow later used by call
| |
| borrow occurs here
LL |
LL | |a| {
| ^^^ closure construction occurs here
LL | f.n.insert(*a);
| --- second borrow occurs due to use of `f` in closure
LL | f.foo(
| - --- first borrow later used by call
| _____|
| |
LL | |
LL | | |a| {
| | ^^^ closure construction occurs here
LL | | f.n.insert(*a);
| | --- second borrow occurs due to use of `f` in closure
LL | | })
| |__________- borrow occurs here
error: aborting due to 2 previous errors

View file

@ -6,7 +6,7 @@ LL | Some(ref _y) => {
LL | let _a = x;
| ^ move out of `x` occurs here
LL | _y.use_ref();
| -- borrow later used here
| ------------ borrow later used here
error: aborting due to previous error

View file

@ -7,7 +7,7 @@ LL | }
LL | borrow_mut(&mut *v);
| ^^^^^^^ mutable borrow occurs here
LL | _w.use_ref();
| -- immutable borrow later used here
| ------------ immutable borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let _w = &v;
LL | borrow_mut(&mut *v);
| ^^^^^^^ mutable borrow occurs here
LL | _w.use_ref();
| -- immutable borrow later used here
| ------------ immutable borrow later used here
error: aborting due to previous error

View file

@ -10,7 +10,7 @@ LL | println!("v={}", *v);
| -- move occurs due to use in closure
LL | });
LL | w.use_ref();
| - borrow later used here
| ----------- borrow later used here
error[E0505]: cannot move out of `v` because it is borrowed
--> $DIR/borrowck-loan-blocks-move-cc.rs:24:19
@ -24,7 +24,7 @@ LL | println!("v={}", *v);
| -- move occurs due to use in closure
LL | });
LL | w.use_ref();
| - borrow later used here
| ----------- borrow later used here
error: aborting due to 2 previous errors

View file

@ -6,7 +6,7 @@ LL | let w = &v;
LL | take(v);
| ^ move out of `v` occurs here
LL | w.use_ref();
| - borrow later used here
| ----------- borrow later used here
error: aborting due to previous error

View file

@ -4,7 +4,7 @@ error[E0382]: borrow of moved value: `x`
LL | let x = Foo(Box::new(3));
| - move occurs because `x` has type `Foo`, which does not implement the `Copy` trait
LL | let _y = {x} + x.clone(); // the `{x}` forces a move to occur
| - ^ value borrowed here after move
| - ^^^^^^^^^ value borrowed here after move
| |
| value moved here

View file

@ -17,7 +17,7 @@ LL | let q = &mut p;
| ------ mutable borrow occurs here
...
LL | p.times(3);
| ^ immutable borrow occurs here
| ^^^^^^^^^^ immutable borrow occurs here
LL |
LL | *q + 3; // OK to use the new alias `q`
| -- mutable borrow later used here

View file

@ -1,13 +1,15 @@
error[E0502]: cannot borrow `p` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-loan-rcvr.rs:23:14
|
LL | p.blockm(|| {
| - ------ ^^ mutable borrow occurs here
| | |
| | immutable borrow later used by call
| immutable borrow occurs here
LL | p.x = 10;
| --- second borrow occurs due to use of `p` in closure
LL | p.blockm(|| {
| - ------ ^^ mutable borrow occurs here
| | |
| _____| immutable borrow later used by call
| |
LL | | p.x = 10;
| | --- second borrow occurs due to use of `p` in closure
LL | | })
| |______- immutable borrow occurs here
error[E0502]: cannot borrow `p` as immutable because it is also borrowed as mutable
--> $DIR/borrowck-loan-rcvr.rs:34:5
@ -15,7 +17,7 @@ error[E0502]: cannot borrow `p` as immutable because it is also borrowed as muta
LL | let l = &mut p;
| ------ mutable borrow occurs here
LL | p.impurem();
| ^ immutable borrow occurs here
| ^^^^^^^^^^^ immutable borrow occurs here
LL |
LL | l.x += 1;
| -------- mutable borrow later used here

View file

@ -7,7 +7,7 @@ LL |
LL | let z = *a;
| ^^ move out of `*a` occurs here
LL | b.use_ref();
| - borrow later used here
| ----------- borrow later used here
error: aborting due to previous error

View file

@ -7,7 +7,7 @@ LL | let t1 = t0;
| ^^ move out of `t0` occurs here
LL | *t1 = 22;
LL | p.use_ref();
| - borrow later used here
| ----------- borrow later used here
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0507]: cannot move out of an `Rc`
--> $DIR/borrowck-move-out-of-overloaded-auto-deref.rs:4:14
|
LL | let _x = Rc::new(vec![1, 2]).into_iter();
| ^^^^^^^^^^^^^^^^^^^ move occurs because value has type `Vec<i32>`, which does not implement the `Copy` trait
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ move occurs because value has type `Vec<i32>`, which does not implement the `Copy` trait
error: aborting due to previous error

View file

@ -5,8 +5,9 @@ LL | 1 => { addr.push(&mut x); }
| ^^^^^^ second mutable borrow occurs here
LL | 2 => { addr.push(&mut x); }
LL | _ => { addr.push(&mut x); }
| ---- ------ first mutable borrow occurs here
| |
| -----------------
| | |
| | first mutable borrow occurs here
| first borrow later used here
error[E0499]: cannot borrow `x` as mutable more than once at a time
@ -15,8 +16,9 @@ error[E0499]: cannot borrow `x` as mutable more than once at a time
LL | 2 => { addr.push(&mut x); }
| ^^^^^^ second mutable borrow occurs here
LL | _ => { addr.push(&mut x); }
| ---- ------ first mutable borrow occurs here
| |
| -----------------
| | |
| | first mutable borrow occurs here
| first borrow later used here
error[E0499]: cannot borrow `x` as mutable more than once at a time

View file

@ -7,7 +7,7 @@ LL | let mut t2 = &mut t0;
| ^^^^^^^ mutable borrow occurs here
LL | **t2 += 1; // Mutates `*t0`
LL | p.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error[E0499]: cannot borrow `t0` as mutable more than once at a time
--> $DIR/borrowck-mut-borrow-of-mut-base-ptr.rs:19:18
@ -18,7 +18,7 @@ LL | let mut t2 = &mut t0;
| ^^^^^^^ second mutable borrow occurs here
LL | **t2 += 1; // Mutates `*t0` but not through `*p`
LL | p.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error: aborting due to 2 previous errors

View file

@ -1,23 +0,0 @@
error[E0502]: cannot borrow `*x` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-object-lifetime.rs:20:13
|
LL | let y = x.borrowed();
| - immutable borrow occurs here
LL | let z = x.mut_borrowed();
| ^ mutable borrow occurs here
LL | y.use_ref();
| - immutable borrow later used here
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-object-lifetime.rs:26:13
|
LL | let y = x.borrowed();
| - immutable borrow occurs here
LL | let z = &mut x;
| ^^^^^^ mutable borrow occurs here
LL | y.use_ref();
| - immutable borrow later used here
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0502`.

View file

@ -2,21 +2,21 @@ error[E0502]: cannot borrow `*x` as mutable because it is also borrowed as immut
--> $DIR/borrowck-object-lifetime.rs:20:13
|
LL | let y = x.borrowed();
| - immutable borrow occurs here
| ------------ immutable borrow occurs here
LL | let z = x.mut_borrowed();
| ^^^^^^^^^^^^^^^^ mutable borrow occurs here
LL | y.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-object-lifetime.rs:26:13
|
LL | let y = x.borrowed();
| - immutable borrow occurs here
| ------------ immutable borrow occurs here
LL | let z = &mut x;
| ^^^^^^ mutable borrow occurs here
LL | y.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error: aborting due to 2 previous errors

View file

@ -6,7 +6,7 @@ LL | let p = &mut f[&s];
LL | let q = &f[&s];
| ^ immutable borrow occurs here
LL | p.use_mut();
| - mutable borrow later used here
| ----------- mutable borrow later used here
error[E0499]: cannot borrow `*f` as mutable more than once at a time
--> $DIR/borrowck-overloaded-index-autoderef.rs:43:18
@ -16,7 +16,7 @@ LL | let p = &mut f[&s];
LL | let q = &mut f[&s];
| ^ second mutable borrow occurs here
LL | p.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error[E0499]: cannot borrow `f.foo` as mutable more than once at a time
--> $DIR/borrowck-overloaded-index-autoderef.rs:53:18
@ -26,7 +26,7 @@ LL | let p = &mut f.foo[&s];
LL | let q = &mut f.foo[&s];
| ^^^^^ second mutable borrow occurs here
LL | p.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error[E0502]: cannot borrow `f.foo` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-overloaded-index-autoderef.rs:65:18
@ -36,7 +36,7 @@ LL | let p = &f.foo[&s];
LL | let q = &mut f.foo[&s];
| ^^^^^ mutable borrow occurs here
LL | p.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error[E0506]: cannot assign to `f.foo` because it is borrowed
--> $DIR/borrowck-overloaded-index-autoderef.rs:71:5
@ -46,7 +46,7 @@ LL | let p = &f.foo[&s];
LL | f.foo = g;
| ^^^^^^^^^ assignment to borrowed `f.foo` occurs here
LL | p.use_ref();
| - borrow later used here
| ----------- borrow later used here
error[E0506]: cannot assign to `*f` because it is borrowed
--> $DIR/borrowck-overloaded-index-autoderef.rs:77:5
@ -56,7 +56,7 @@ LL | let p = &f.foo[&s];
LL | *f = g;
| ^^^^^^ assignment to borrowed `*f` occurs here
LL | p.use_ref();
| - borrow later used here
| ----------- borrow later used here
error[E0506]: cannot assign to `f.foo` because it is borrowed
--> $DIR/borrowck-overloaded-index-autoderef.rs:83:5
@ -66,7 +66,7 @@ LL | let p = &mut f.foo[&s];
LL | f.foo = g;
| ^^^^^^^^^ assignment to borrowed `f.foo` occurs here
LL | p.use_mut();
| - borrow later used here
| ----------- borrow later used here
error[E0506]: cannot assign to `*f` because it is borrowed
--> $DIR/borrowck-overloaded-index-autoderef.rs:89:5
@ -76,7 +76,7 @@ LL | let p = &mut f.foo[&s];
LL | *f = g;
| ^^^^^^ assignment to borrowed `*f` occurs here
LL | p.use_mut();
| - borrow later used here
| ----------- borrow later used here
error: aborting due to 8 previous errors

View file

@ -8,7 +8,7 @@ LL | let z = &x;
| ^^ immutable borrow occurs here
...
LL | y.use_mut();
| - mutable borrow later used here
| ----------- mutable borrow later used here
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
--> $DIR/borrowck-report-with-custom-diagnostic.rs:21:21
@ -20,7 +20,7 @@ LL | let z = &mut x;
| ^^^^^^ mutable borrow occurs here
...
LL | y.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error[E0499]: cannot borrow `x` as mutable more than once at a time
--> $DIR/borrowck-report-with-custom-diagnostic.rs:36:17
@ -32,7 +32,7 @@ LL | let z = &mut x;
| ^^^^^^ second mutable borrow occurs here
...
LL | y.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error: aborting due to 3 previous errors

View file

@ -7,7 +7,7 @@ LL | swap(&mut t0, &mut t1);
| ^^^^^^^ mutable borrow occurs here
LL | *t1 = 22;
LL | p.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let ra = &mut u.s.a;
LL | let b = u.c;
| ^^^ use of borrowed `u.s.a`
LL | ra.use_mut();
| -- borrow later used here
| ------------ borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let w = &mut v;
LL | borrow(&*v);
| ^^^ immutable borrow occurs here
LL | w.use_mut();
| - mutable borrow later used here
| ----------- mutable borrow later used here
error[E0502]: cannot borrow `*v` as immutable because it is also borrowed as mutable
--> $DIR/borrowck-uniq-via-lend.rs:53:12
@ -16,7 +16,7 @@ LL | x = &mut v;
LL | borrow(&*v);
| ^^^ immutable borrow occurs here
LL | x.use_mut();
| - mutable borrow later used here
| ----------- mutable borrow later used here
error: aborting due to 2 previous errors

View file

@ -5,8 +5,9 @@ LL | let vb: &mut [isize] = &mut v;
| ------ first mutable borrow occurs here
...
LL | v.push(tail[0] + tail[1]);
| ^ ------- first borrow later used here
| |
| ^^^^^^^-------^^^^^^^^^^^
| | |
| | first borrow later used here
| second mutable borrow occurs here
error: aborting due to previous error

View file

@ -8,7 +8,7 @@ LL | vec[0] = Box::new(4);
| ^^^^^^ assignment to borrowed `vec[_]` occurs here
LL |
LL | _a.use_ref();
| -- borrow later used here
| ------------ borrow later used here
error[E0506]: cannot assign to `vec[_]` because it is borrowed
--> $DIR/borrowck-vec-pattern-nesting.rs:23:13
@ -20,7 +20,7 @@ LL | vec[0] = Box::new(4);
| ^^^^^^ assignment to borrowed `vec[_]` occurs here
LL |
LL | _b.use_ref();
| -- borrow later used here
| ------------ borrow later used here
error[E0508]: cannot move out of type `[Box<isize>]`, a non-copy slice
--> $DIR/borrowck-vec-pattern-nesting.rs:34:11

View file

@ -2,7 +2,7 @@ error[E0596]: cannot borrow data in a `&` reference as mutable
--> $DIR/index-mut-help-with-impl.rs:9:5
|
LL | Index::index(&v, 1..2).make_ascii_uppercase();
| ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0596]: cannot borrow data in an index of `HashMap<&str, String>` as mutab
--> $DIR/index-mut-help.rs:11:5
|
LL | map["peter"].clear();
| ^^^^^^^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `HashMap<&str, String>`

View file

@ -2,7 +2,7 @@ error[E0596]: cannot borrow `*TAB[_]` as mutable, as `TAB` is an immutable stati
--> $DIR/issue-42344.rs:4:5
|
LL | TAB[0].iter_mut();
| ^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -4,7 +4,7 @@ error[E0499]: cannot borrow `*bar` as mutable more than once at a time
LL | Some(baz) => {
| --- first mutable borrow occurs here
LL | bar.take();
| ^^^ second mutable borrow occurs here
| ^^^^^^^^^^ second mutable borrow occurs here
LL | drop(baz);
| --- first borrow later used here

View file

@ -2,7 +2,7 @@ error[E0506]: cannot assign to `self.container_field` because it is borrowed
--> $DIR/issue-81365-10.rs:21:9
|
LL | let first = &self.deref().target_field;
| ---- borrow of `self.container_field` occurs here
| ------------ borrow of `self.container_field` occurs here
LL | self.container_field = true;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.container_field` occurs here
LL | first;

View file

@ -2,7 +2,7 @@ error[E0506]: cannot assign to `self.container_field` because it is borrowed
--> $DIR/issue-81365-5.rs:28:9
|
LL | let first = self.get();
| ---- borrow of `self.container_field` occurs here
| ---------- borrow of `self.container_field` occurs here
LL | self.container_field = true;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.container_field` occurs here
LL | first;

View file

@ -7,7 +7,7 @@ LL | for v in self.0.values() {
| | help: use mutable method: `values_mut()`
| this iterator yields `&` references
LL | v.flush();
| ^ `v` is a `&` reference, so the data it refers to cannot be borrowed as mutable
| ^^^^^^^^^ `v` is a `&` reference, so the data it refers to cannot be borrowed as mutable
error: aborting due to previous error

View file

@ -1,22 +0,0 @@
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
--> $DIR/issue-82462.rs:18:9
|
LL | for x in DroppingSlice(&*v).iter() {
| ------------------
| | |
| | immutable borrow occurs here
| a temporary with access to the immutable borrow is created here ...
LL | v.push(*x);
| ^ mutable borrow occurs here
LL | break;
LL | }
| - ... and the immutable borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `DroppingSlice`
|
help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
|
LL | };
| +
error: aborting due to previous error
For more information about this error, try `rustc --explain E0502`.

View file

@ -7,7 +7,7 @@ LL | match heap.peek_mut() {
| first mutable borrow occurs here
| a temporary with access to the first borrow is created here ...
LL | Some(_) => { heap.pop(); },
| ^^^^ second mutable borrow occurs here
| ^^^^^^^^^^ second mutable borrow occurs here
...
LL | }
| - ... and the first borrow might be used here, when that temporary is dropped and runs the destructor for type `Option<PeekMut<'_, i32>>`

View file

@ -5,7 +5,7 @@ LL | let rofl: &Vec<Vec<i32>> = &mut test;
| ---- help: consider changing this to be a mutable reference: `&mut Vec<Vec<i32>>`
LL |
LL | rofl.push(Vec::new());
| ^^^^ `rofl` is a `&` reference, so the data it refers to cannot be borrowed as mutable
| ^^^^^^^^^^^^^^^^^^^^^ `rofl` is a `&` reference, so the data it refers to cannot be borrowed as mutable
error[E0594]: cannot assign to `*r`, which is behind a `&` reference
--> $DIR/issue-85765.rs:12:5

View file

@ -53,7 +53,7 @@ error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable
--> $DIR/mut-borrow-of-mut-ref.rs:35:5
|
LL | f.bar();
| ^ cannot borrow as mutable
| ^^^^^^^ cannot borrow as mutable
|
help: consider making the binding mutable
|

View file

@ -6,7 +6,7 @@ LL | let first = &mut void;
LL | let second = &mut void;
| ^^^^^^^^^ second mutable borrow occurs here
LL | first.use_mut();
| ----- first borrow later used here
| --------------- first borrow later used here
error[E0499]: cannot borrow `inner_void` as mutable more than once at a time
--> $DIR/mut-borrow-outside-loop.rs:15:28
@ -17,7 +17,7 @@ LL | let inner_second = &mut inner_void;
| ^^^^^^^^^^^^^^^ second mutable borrow occurs here
LL | inner_second.use_mut();
LL | inner_first.use_mut();
| ----------- first borrow later used here
| --------------------- first borrow later used here
error: aborting due to 2 previous errors

View file

@ -2,7 +2,7 @@ error[E0499]: cannot borrow `foo` as mutable more than once at a time
--> $DIR/two-phase-across-loop.rs:17:22
|
LL | strings.push(foo.get_string());
| ^^^ `foo` was mutably borrowed here in the previous iteration of the loop
| ^^^^^^^^^^^^^^^^ `foo` was mutably borrowed here in the previous iteration of the loop
error: aborting due to previous error

View file

@ -1,13 +1,18 @@
error[E0502]: cannot borrow `vec` as mutable because it is also borrowed as immutable
--> $DIR/two-phase-cannot-nest-mut-self-calls.rs:16:9
|
LL | vec.get({
| --- --- immutable borrow later used by call
| |
| immutable borrow occurs here
LL |
LL | vec.push(2);
| ^^^ mutable borrow occurs here
LL | vec.get({
| - --- immutable borrow later used by call
| _____|
| |
LL | |
LL | | vec.push(2);
| | ^^^^^^^^^^^ mutable borrow occurs here
LL | |
LL | |
LL | | 0
LL | | });
| |______- immutable borrow occurs here
error: aborting due to previous error

View file

@ -12,8 +12,9 @@ error[E0499]: cannot borrow `foo` as mutable more than once at a time
--> $DIR/two-phase-multi-mut.rs:11:16
|
LL | foo.method(&mut foo);
| --- ------ ^^^^^^^^ second mutable borrow occurs here
| | |
| -----------^^^^^^^^-
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here

View file

@ -27,8 +27,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
|
= note: `#[warn(mutable_borrow_reservation_conflict)]` on by default

View file

@ -27,8 +27,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
|
= note: `#[warn(mutable_borrow_reservation_conflict)]` on by default

View file

@ -5,8 +5,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.extend(shared);
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^^^------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
@ -26,8 +27,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error: aborting due to 3 previous errors

View file

@ -5,8 +5,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.extend(shared);
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^^^------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
@ -26,8 +27,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error: aborting due to 3 previous errors

View file

@ -5,8 +5,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
@ -16,8 +17,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
@ -27,8 +29,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
error: aborting due to 3 previous errors

View file

@ -5,8 +5,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
|
note: the lint level is defined here
@ -24,8 +25,9 @@ LL | let shared = &v;
| -- immutable borrow occurs here
LL |
LL | v.push(shared.len());
| ^ ------ immutable borrow later used here
| |
| ^^^^^^^------------^
| | |
| | immutable borrow later used here
| mutable borrow occurs here
|
note: the lint level is defined here

View file

@ -7,7 +7,7 @@ LL | v[0].push_str({
| first mutable borrow occurs here
LL |
LL | v.push(format!("foo"));
| ^ second mutable borrow occurs here
| ^^^^^^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
error: aborting due to previous error

View file

@ -13,7 +13,7 @@ error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as im
--> $DIR/two-phase-surprise-no-conflict.rs:57:17
|
LL | self.hash_expr(&self.cx_mut.body(eid).value);
| ^^^^^---------^^-----------^^^^^^^^^^^^^^^^^
| ^^^^^---------^^---------------------^^^^^^^
| | | |
| | | immutable borrow occurs here
| | immutable borrow later used by call
@ -23,8 +23,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:119:51
|
LL | reg.register_static(Box::new(TrivialPass::new(&mut reg.sess_mut)));
| --- --------------- ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| ----------------------------------------------^^^^^^^^^^^^^^^^^---
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here
@ -32,8 +33,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:122:54
|
LL | reg.register_bound(Box::new(TrivialPass::new_mut(&mut reg.sess_mut)));
| --- -------------- ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| -------------------------------------------------^^^^^^^^^^^^^^^^^---
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here
@ -41,8 +43,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:125:53
|
LL | reg.register_univ(Box::new(TrivialPass::new_mut(&mut reg.sess_mut)));
| --- ------------- ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| ------------------------------------------------^^^^^^^^^^^^^^^^^---
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here
@ -50,8 +53,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:128:44
|
LL | reg.register_ref(&TrivialPass::new_mut(&mut reg.sess_mut));
| --- ------------ ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| ---------------------------------------^^^^^^^^^^^^^^^^^--
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here
@ -102,8 +106,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:154:54
|
LL | reg.register_bound(Box::new(CapturePass::new_mut(&mut reg.sess_mut)));
| --- -------------- ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| -------------------------------------------------^^^^^^^^^^^^^^^^^---
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here
@ -124,8 +129,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:158:53
|
LL | reg.register_univ(Box::new(CapturePass::new_mut(&mut reg.sess_mut)));
| --- ------------- ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| ------------------------------------------------^^^^^^^^^^^^^^^^^---
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here
@ -143,8 +149,9 @@ error[E0499]: cannot borrow `reg.sess_mut` as mutable more than once at a time
--> $DIR/two-phase-surprise-no-conflict.rs:162:44
|
LL | reg.register_ref(&CapturePass::new_mut(&mut reg.sess_mut));
| --- ------------ ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| ---------------------------------------^^^^^^^^^^^^^^^^^--
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here

View file

@ -2,7 +2,7 @@ error[E0505]: cannot move out of `alloc` because it is borrowed
--> $DIR/leak-alloc.rs:26:10
|
LL | let boxed = Box::new_in(10, alloc.by_ref());
| ----- borrow of `alloc` occurs here
| -------------- borrow of `alloc` occurs here
LL | let theref = Box::leak(boxed);
LL | drop(alloc);
| ^^^^^ move out of `alloc` occurs here

View file

@ -12,7 +12,7 @@ error[E0596]: cannot borrow `s` as mutable, as it is not declared as mutable
LL | let s = std::io::stdin();
| - help: consider changing this to be mutable: `mut s`
LL | to_fn_once(move|| { s.read_to_end(&mut Vec::new()); });
| ^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to 2 previous errors

View file

@ -7,7 +7,7 @@ LL | let z = &mut x;
| ^^^^^^ second mutable borrow occurs here
LL | z.use_mut();
LL | y.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error: aborting due to previous error

View file

@ -2,8 +2,9 @@ error[E0499]: cannot borrow `v` as mutable more than once at a time
--> $DIR/one_line.rs:3:12
|
LL | v.push(v.pop().unwrap());
| - ---- ^ second mutable borrow occurs here
| | |
| -------^^^^^^^----------
| | | |
| | | second mutable borrow occurs here
| | first borrow later used by call
| first mutable borrow occurs here

View file

@ -2,7 +2,7 @@ error: overly complex generic constant
--> $DIR/issue-67375.rs:7:17
|
LL | inner: [(); { [|_: &T| {}; 0].len() }],
| ^^---------------^^^^^^^^
| ^^---------------------^^
| |
| unsupported operation in generic constant
|

View file

@ -11,7 +11,7 @@ error[E0658]: mutable references are not allowed in constants
--> $DIR/const_let_assign3.rs:14:5
|
LL | s.foo(3);
| ^
| ^^^^^^^^
|
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable

View file

@ -19,8 +19,9 @@ error[E0502]: cannot borrow `self` as mutable because it is also borrowed as imm
--> $DIR/issue-34126.rs:6:18
|
LL | self.run(&mut self);
| ---- --- ^^^^^^^^^ mutable borrow occurs here
| | |
| ---------^^^^^^^^^-
| | | |
| | | mutable borrow occurs here
| | immutable borrow later used by call
| immutable borrow occurs here

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `f.v` as mutable, as `f` is not declared as mutable
LL | let f = Foo { v: Vec::new() };
| - help: consider changing this to be mutable: `mut f`
LL | f.v.push("cat".to_string());
| ^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
error[E0594]: cannot assign to `s.x`, as `s` is not declared as mutable
--> $DIR/issue-35937.rs:16:5

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `*self.s` as mutable, as it is behind a `&` referenc
LL | fn f(&self) {
| ----- help: consider changing this to be a mutable reference: `&mut self`
LL | self.s.push('x');
| ^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
| ^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
error: aborting due to previous error

View file

@ -5,7 +5,7 @@ LL | s: &'a String
| ---------- help: consider changing this to be mutable: `&'a mut String`
...
LL | self.s.push('x');
| ^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -5,7 +5,7 @@ LL | s: &'a String
| ---------- help: consider changing this to be mutable: `&'a mut String`
...
LL | self.s.push('x');
| ^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^ cannot borrow as mutable
error: aborting due to previous error

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `*f.s` as mutable, as it is behind a `&` reference
LL | fn f(x: usize, f: &Foo) {
| ---- help: consider changing this to be a mutable reference: `&mut Foo<'_>`
LL | f.s.push('x');
| ^^^ `f` is a `&` reference, so the data it refers to cannot be borrowed as mutable
| ^^^^^^^^^^^^^ `f` is a `&` reference, so the data it refers to cannot be borrowed as mutable
error: aborting due to previous error

View file

@ -4,7 +4,7 @@ error[E0596]: cannot borrow `*buf` as mutable, as it is behind a `&` reference
LL | let mut buf = &[1, 2, 3, 4];
| ------------- help: consider changing this to be a mutable reference: `&mut [1, 2, 3, 4]`
LL | buf.iter_mut();
| ^^^ `buf` is a `&` reference, so the data it refers to cannot be borrowed as mutable
| ^^^^^^^^^^^^^^ `buf` is a `&` reference, so the data it refers to cannot be borrowed as mutable
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0505]: cannot move out of `a` because it is borrowed
--> $DIR/drop-with-active-borrows-1.rs:4:10
|
LL | let b: Vec<&str> = a.lines().collect();
| - borrow of `a` occurs here
| --------- borrow of `a` occurs here
LL | drop(a);
| ^ move out of `a` occurs here
LL | for s in &b {

View file

@ -2,7 +2,7 @@ error[E0515]: cannot return value referencing local variable `raw_lines`
--> $DIR/drop-with-active-borrows-2.rs:3:5
|
LL | raw_lines.iter().map(|l| l.trim()).collect()
| ---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| ----------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| `raw_lines` is borrowed here

View file

@ -2,7 +2,7 @@ error[E0161]: cannot move a value of type dyn Bar: the size of dyn Bar cannot be
--> $DIR/E0161.rs:29:5
|
LL | x.f();
| ^
| ^^^^^
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0161]: cannot move a value of type dyn Bar: the size of dyn Bar cannot be
--> $DIR/E0161.rs:29:5
|
LL | x.f();
| ^
| ^^^^^
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0161]: cannot move a value of type dyn Bar: the size of dyn Bar cannot be
--> $DIR/E0161.rs:29:5
|
LL | x.f();
| ^
| ^^^^^
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0161]: cannot move a value of type dyn Bar: the size of dyn Bar cannot be
--> $DIR/E0161.rs:29:5
|
LL | x.f();
| ^
| ^^^^^
error: aborting due to previous error

View file

@ -7,7 +7,7 @@ LL | let mut a = &mut i;
| ^^^^^^ second mutable borrow occurs here
LL | a.use_mut();
LL | x.use_mut();
| - first borrow later used here
| ----------- first borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let ref y = a;
LL | bar(a);
| ^ mutable borrow occurs here
LL | y.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let ref y = a;
LL | bar(a);
| ^^^^^^ mutable borrow occurs here
LL | y.use_ref();
| - immutable borrow later used here
| ----------- immutable borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let _borrow = &mut value;
LL | let _sum = value + 1;
| ^^^^^ use of borrowed `value`
LL | _borrow.use_mut();
| ------- borrow later used here
| ----------------- borrow later used here
error: aborting due to previous error

View file

@ -6,7 +6,7 @@ LL | let _ref_to_val: &Value = &x;
LL | eat(x);
| ^ move out of `x` occurs here
LL | _ref_to_val.use_ref();
| ----------- borrow later used here
| --------------------- borrow later used here
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0507]: cannot move out of dereference of `Ref<'_, TheDarkKnight>`
--> $DIR/E0507.rs:12:5
|
LL | x.borrow().nothing_is_true();
| ^^^^^^^^^^ move occurs because value has type `TheDarkKnight`, which does not implement the `Copy` trait
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ move occurs because value has type `TheDarkKnight`, which does not implement the `Copy` trait
error: aborting due to previous error

View file

@ -5,7 +5,7 @@ LL | let z = &mut y;
| ------ mutable borrow occurs here
...
LL | r = y.as_ref().unwrap();
| ^ immutable borrow occurs here
| ^^^^^^^^^^ immutable borrow occurs here
LL |
LL | }
| - mutable borrow might be used here, when `g` is dropped and runs the destructor for generator

View file

@ -2,7 +2,7 @@ error[E0597]: `*cell` does not live long enough
--> $DIR/dropck.rs:10:40
|
LL | let ref_ = Box::leak(Box::new(Some(cell.borrow_mut())));
| ^^^^ borrowed value does not live long enough
| ^^^^^^^^^^^^^^^^^ borrowed value does not live long enough
...
LL | }
| -

View file

@ -1,15 +0,0 @@
error[E0502]: cannot borrow `my_stuff` as mutable because it is also borrowed as immutable
--> $DIR/hashmap-iter-value-lifetime.rs:7:5
|
LL | let (_, thing) = my_stuff.iter().next().unwrap();
| -------- immutable borrow occurs here
LL |
LL | my_stuff.clear();
| ^^^^^^^^ mutable borrow occurs here
LL |
LL | println!("{}", *thing);
| ------ immutable borrow later used here
error: aborting due to previous error
For more information about this error, try `rustc --explain E0502`.

View file

@ -2,7 +2,7 @@ error[E0502]: cannot borrow `my_stuff` as mutable because it is also borrowed as
--> $DIR/hashmap-iter-value-lifetime.rs:7:5
|
LL | let (_, thing) = my_stuff.iter().next().unwrap();
| -------- immutable borrow occurs here
| --------------- immutable borrow occurs here
LL |
LL | my_stuff.clear();
| ^^^^^^^^^^^^^^^^ mutable borrow occurs here

View file

@ -1,13 +0,0 @@
error[E0502]: cannot borrow `my_stuff` as mutable because it is also borrowed as immutable
--> $DIR/hashmap-lifetimes.rs:6:5
|
LL | let mut it = my_stuff.iter();
| -------- immutable borrow occurs here
LL | my_stuff.insert(1, 43);
| ^^^^^^^^ mutable borrow occurs here
LL | it;
| -- immutable borrow later used here
error: aborting due to previous error
For more information about this error, try `rustc --explain E0502`.

View file

@ -2,7 +2,7 @@ error[E0502]: cannot borrow `my_stuff` as mutable because it is also borrowed as
--> $DIR/hashmap-lifetimes.rs:6:5
|
LL | let mut it = my_stuff.iter();
| -------- immutable borrow occurs here
| --------------- immutable borrow occurs here
LL | my_stuff.insert(1, 43);
| ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
LL | it;

View file

@ -2,9 +2,9 @@ error[E0499]: cannot borrow `foo` as mutable more than once at a time
--> $DIR/hrtb-debruijn-in-receiver.rs:17:5
|
LL | foo.insert();
| --- first mutable borrow occurs here
| ------------ first mutable borrow occurs here
LL | foo.insert();
| ^^^
| ^^^^^^^^^^^^
| |
| second mutable borrow occurs here
| first borrow later used here

View file

@ -7,7 +7,7 @@ LL | let S { 0: ref mut borrow2 } = s;
| ^^^^^^^^^^^^^^^ second mutable borrow occurs here
...
LL | borrow1.use_mut();
| ------- first borrow later used here
| ----------------- first borrow later used here
error: aborting due to previous error

View file

@ -1,13 +1,14 @@
error[E0515]: cannot return value referencing local variable `rawLines`
--> $DIR/issue-13497-2.rs:3:5
|
LL | rawLines
| ^-------
| |
| _____`rawLines` is borrowed here
| |
LL | | .iter().map(|l| l.trim()).collect()
| |___________________________________________^ returns a value referencing data owned by the current function
LL | rawLines
| _____^
| |_____|
| ||
LL | || .iter().map(|l| l.trim()).collect()
| ||_______________-___________________________^ returns a value referencing data owned by the current function
| |________________|
| `rawLines` is borrowed here
error: aborting due to previous error

View file

@ -1,8 +1,10 @@
error[E0596]: cannot borrow data in a `&` reference as mutable
--> $DIR/issue-19163.rs:9:14
--> $DIR/issue-19163.rs:9:5
|
LL | mywrite!(&v, "Hello world");
| ^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= note: this error originates in the macro `mywrite` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error

View file

@ -5,7 +5,7 @@ LL | fn call_it<F>(f: F) where F: Fn() { f(); }
| - change this to accept `FnMut` instead of `Fn`
...
LL | call_it(|| x.gen_mut());
| ------- ^ cannot borrow as mutable
| ------- ^^^^^^^^^^^ cannot borrow as mutable
| |
| expects `Fn` instead of `FnMut`

View file

@ -2,7 +2,7 @@ error[E0596]: cannot borrow data in an index of `HashMap<String, Vec<String>>` a
--> $DIR/issue-41726.rs:5:9
|
LL | things[src.as_str()].sort();
| ^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `HashMap<String, Vec<String>>`

View file

@ -4,9 +4,9 @@ error[E0502]: cannot borrow `*collection` as mutable because it is also borrowed
LL | let _a = &collection;
| ----------- immutable borrow occurs here
LL | collection.swap(1, 2);
| ^^^^^^^^^^ mutable borrow occurs here
| ^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
LL | _a.use_ref();
| -- immutable borrow later used here
| ------------ immutable borrow later used here
error: aborting due to previous error

View file

@ -2,7 +2,7 @@ error[E0596]: cannot borrow data in an index of `Container` as mutable
--> $DIR/issue-44405.rs:21:5
|
LL | container[&mut val].test();
| ^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `Container`

View file

@ -2,7 +2,7 @@ error[E0502]: cannot borrow `heap` as immutable because it is also borrowed as m
--> $DIR/issue-47646.rs:9:30
|
LL | let borrow = heap.peek_mut();
| ---- mutable borrow occurs here
| --------------- mutable borrow occurs here
LL |
LL | match (borrow, ()) {
| ------------ a temporary with access to the mutable borrow is created here ...

Some files were not shown because too many files have changed in this diff Show more