add hint to fix error for immutable ref in arg
This commit is contained in:
parent
0b399e5e99
commit
67a24c2e18
15 changed files with 342 additions and 46 deletions
|
|
@ -0,0 +1,86 @@
|
|||
error: cannot borrow immutable argument `x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:63:24
|
||||
|
|
||||
62 | fn deref_mut_field1(x: Own<Point>) {
|
||||
| - use `mut x` here to make mutable
|
||||
63 | let __isize = &mut x.y; //~ ERROR cannot borrow
|
||||
| ^ cannot borrow mutably
|
||||
|
||||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:75:10
|
||||
|
|
||||
74 | fn deref_extend_mut_field1(x: &Own<Point>) -> &mut isize {
|
||||
| ----------- use `&mut Own<Point>` here to make mutable
|
||||
75 | &mut x.y //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error[E0499]: cannot borrow `*x` as mutable more than once at a time
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:88:19
|
||||
|
|
||||
87 | let _x = &mut x.x;
|
||||
| - first mutable borrow occurs here
|
||||
88 | let _y = &mut x.y; //~ ERROR cannot borrow
|
||||
| ^ second mutable borrow occurs here
|
||||
89 | }
|
||||
| - first borrow ends here
|
||||
|
||||
error: cannot borrow immutable argument `x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:98:5
|
||||
|
|
||||
97 | fn assign_field1<'a>(x: Own<Point>) {
|
||||
| - use `mut x` here to make mutable
|
||||
98 | x.y = 3; //~ ERROR cannot borrow
|
||||
| ^ cannot borrow mutably
|
||||
|
||||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:102:5
|
||||
|
|
||||
101 | fn assign_field2<'a>(x: &'a Own<Point>) {
|
||||
| -------------- use `&'a mut Own<Point>` here to make mutable
|
||||
102 | x.y = 3; //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error[E0499]: cannot borrow `*x` as mutable more than once at a time
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:111:5
|
||||
|
|
||||
110 | let _p: &mut Point = &mut **x;
|
||||
| -- first mutable borrow occurs here
|
||||
111 | x.y = 3; //~ ERROR cannot borrow
|
||||
| ^ second mutable borrow occurs here
|
||||
112 | }
|
||||
| - first borrow ends here
|
||||
|
||||
error: cannot borrow immutable argument `x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:119:5
|
||||
|
|
||||
118 | fn deref_mut_method1(x: Own<Point>) {
|
||||
| - use `mut x` here to make mutable
|
||||
119 | x.set(0, 0); //~ ERROR cannot borrow
|
||||
| ^ cannot borrow mutably
|
||||
|
||||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:131:5
|
||||
|
|
||||
130 | fn deref_extend_mut_method1(x: &Own<Point>) -> &mut isize {
|
||||
| ----------- use `&mut Own<Point>` here to make mutable
|
||||
131 | x.y_mut() //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error: cannot borrow immutable argument `x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:139:6
|
||||
|
|
||||
138 | fn assign_method1<'a>(x: Own<Point>) {
|
||||
| - use `mut x` here to make mutable
|
||||
139 | *x.y_mut() = 3; //~ ERROR cannot borrow
|
||||
| ^ cannot borrow mutably
|
||||
|
||||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:143:6
|
||||
|
|
||||
142 | fn assign_method2<'a>(x: &'a Own<Point>) {
|
||||
| -------------- use `&'a mut Own<Point>` here to make mutable
|
||||
143 | *x.y_mut() = 3; //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
34
src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr
Normal file
34
src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
error: cannot borrow immutable argument `x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:39:25
|
||||
|
|
||||
38 | fn deref_mut1(x: Own<isize>) {
|
||||
| - use `mut x` here to make mutable
|
||||
39 | let __isize = &mut *x; //~ ERROR cannot borrow
|
||||
| ^ cannot borrow mutably
|
||||
|
||||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:51:11
|
||||
|
|
||||
50 | fn deref_extend_mut1<'a>(x: &'a Own<isize>) -> &'a mut isize {
|
||||
| -------------- use `&'a mut Own<isize>` here to make mutable
|
||||
51 | &mut **x //~ ERROR cannot borrow
|
||||
| ^^
|
||||
|
||||
error: cannot borrow immutable argument `x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:59:6
|
||||
|
|
||||
58 | fn assign1<'a>(x: Own<isize>) {
|
||||
| - use `mut x` here to make mutable
|
||||
59 | *x = 3; //~ ERROR cannot borrow
|
||||
| ^ cannot borrow mutably
|
||||
|
||||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-borrow-overloaded-deref-mut.rs:63:6
|
||||
|
|
||||
62 | fn assign2<'a>(x: &'a Own<isize>) {
|
||||
| -------------- use `&'a mut Own<isize>` here to make mutable
|
||||
63 | **x = 3; //~ ERROR cannot borrow
|
||||
| ^^
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
43
src/test/ui/span/borrowck-call-is-borrow-issue-12224.stderr
Normal file
43
src/test/ui/span/borrowck-call-is-borrow-issue-12224.stderr
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
error[E0499]: cannot borrow `f` as mutable more than once at a time
|
||||
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:23:16
|
||||
|
|
||||
23 | f(Box::new(|| {
|
||||
| - ^^ second mutable borrow occurs here
|
||||
| |
|
||||
| first mutable borrow occurs here
|
||||
24 | //~^ ERROR: cannot borrow `f` as mutable more than once
|
||||
25 | f((Box::new(|| {})))
|
||||
| - borrow occurs due to use of `f` in closure
|
||||
26 | }));
|
||||
| - first borrow ends here
|
||||
|
||||
error: cannot borrow immutable borrowed content `*f` as mutable
|
||||
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:36:5
|
||||
|
|
||||
35 | fn test2<F>(f: &F) where F: FnMut() {
|
||||
| -- use `&mut F` here to make mutable
|
||||
36 | (*f)(); //~ ERROR: cannot borrow immutable borrowed content `*f` as mutable
|
||||
| ^^^^
|
||||
|
||||
error: cannot borrow immutable `Box` content `*f.f` as mutable
|
||||
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:44:5
|
||||
|
|
||||
44 | f.f.call_mut(()) //~ ERROR: cannot borrow immutable `Box` content `*f.f` as mutable
|
||||
| ^^^
|
||||
|
||||
error[E0504]: cannot move `f` into closure because it is borrowed
|
||||
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:63:13
|
||||
|
|
||||
62 | f(Box::new(|a| {
|
||||
| - borrow of `f` occurs here
|
||||
63 | foo(f);
|
||||
| ^ move into closure occurs here
|
||||
|
||||
error[E0507]: cannot move out of captured outer variable in an `FnMut` closure
|
||||
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:63:13
|
||||
|
|
||||
63 | foo(f);
|
||||
| ^ cannot move out of captured outer variable in an `FnMut` closure
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-call-method-from-mut-aliasable.rs:27:5
|
||||
|
|
||||
25 | fn b(x: &Foo) {
|
||||
| ---- use `&mut Foo` here to make mutable
|
||||
26 | x.f();
|
||||
27 | x.h(); //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
10
src/test/ui/span/borrowck-fn-in-const-b.stderr
Normal file
10
src/test/ui/span/borrowck-fn-in-const-b.stderr
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-fn-in-const-b.rs:17:9
|
||||
|
|
||||
16 | fn broken(x: &Vec<String>) {
|
||||
| ------------ use `&mut Vec<String>` here to make mutable
|
||||
17 | x.push(format!("this is broken"));
|
||||
| ^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
17
src/test/ui/span/borrowck-object-mutability.stderr
Normal file
17
src/test/ui/span/borrowck-object-mutability.stderr
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
error: cannot borrow immutable borrowed content `*x` as mutable
|
||||
--> $DIR/borrowck-object-mutability.rs:19:5
|
||||
|
|
||||
17 | fn borrowed_receiver(x: &Foo) {
|
||||
| ---- use `&mut Foo` here to make mutable
|
||||
18 | x.borrowed();
|
||||
19 | x.borrowed_mut(); //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error: cannot borrow immutable `Box` content `*x` as mutable
|
||||
--> $DIR/borrowck-object-mutability.rs:29:5
|
||||
|
|
||||
29 | x.borrowed_mut(); //~ ERROR cannot borrow
|
||||
| ^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
32
src/test/ui/span/mut-arg-hint.rs
Normal file
32
src/test/ui/span/mut-arg-hint.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
trait B {
|
||||
fn foo(mut a: &String) {
|
||||
a.push_str("bar");
|
||||
}
|
||||
}
|
||||
|
||||
pub fn foo<'a>(mut a: &'a String) {
|
||||
a.push_str("foo");
|
||||
}
|
||||
|
||||
struct A {}
|
||||
|
||||
impl A {
|
||||
pub fn foo(mut a: &String) {
|
||||
a.push_str("foo");
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
foo(&"a".to_string());
|
||||
A::foo(&"a".to_string());
|
||||
}
|
||||
26
src/test/ui/span/mut-arg-hint.stderr
Normal file
26
src/test/ui/span/mut-arg-hint.stderr
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
error: cannot borrow immutable borrowed content `*a` as mutable
|
||||
--> $DIR/mut-arg-hint.rs:13:9
|
||||
|
|
||||
12 | fn foo(mut a: &String) {
|
||||
| ------- use `&mut String` here to make mutable
|
||||
13 | a.push_str("bar");
|
||||
| ^
|
||||
|
||||
error: cannot borrow immutable borrowed content `*a` as mutable
|
||||
--> $DIR/mut-arg-hint.rs:18:5
|
||||
|
|
||||
17 | pub fn foo<'a>(mut a: &'a String) {
|
||||
| ---------- use `&'a mut String` here to make mutable
|
||||
18 | a.push_str("foo");
|
||||
| ^
|
||||
|
||||
error: cannot borrow immutable borrowed content `*a` as mutable
|
||||
--> $DIR/mut-arg-hint.rs:25:9
|
||||
|
|
||||
24 | pub fn foo(mut a: &String) {
|
||||
| ------- use `&mut String` here to make mutable
|
||||
25 | a.push_str("foo");
|
||||
| ^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue