diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2016-05-19 21:21:05 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2016-05-19 21:21:05 +0530 |
| commit | c9ca735a7b34cbe38e8ccc58d89d7a49c5b68ee2 (patch) | |
| tree | 7d3cfedc52244d3e48b6e1514773bfe9690f2191 | |
| parent | d0ca0ca0631eb7105c51b1dc4153594d4b9dfbfd (diff) | |
| parent | acfe199c02a3cbc0d500678ea30426daf392f0d3 (diff) | |
Rollup merge of #33353 - timothy-mcroy:E0502, r=sanxiyn
Add error explanation for E0502 I am questioning the order of presentation on the suggested code fixes, but I'm not sure what would be best. Thoughts? r? @GuillaumeGomez
| -rw-r--r-- | src/librustc_borrowck/diagnostics.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/librustc_borrowck/diagnostics.rs b/src/librustc_borrowck/diagnostics.rs index b5d8192b4dd..116e3476897 100644 --- a/src/librustc_borrowck/diagnostics.rs +++ b/src/librustc_borrowck/diagnostics.rs @@ -502,6 +502,33 @@ fn foo(a: &mut i32) { ``` "##, +E0502: r##" +This error indicates that you are trying to borrow a variable as mutable when it +has already been borrowed as immutable. + +Example of erroneous code: + +```compile_fail +fn bar(x: &mut i32) {} +fn foo(a: &mut i32) { + let ref y = a; // a is borrowed as immutable. + bar(a); // error: cannot borrow `*a` as mutable because `a` is also borrowed + // as immutable +} +``` +To fix this error, ensure that you don't have any other references to the +variable before trying to access it mutably: +``` +fn bar(x: &mut i32) {} +fn foo(a: &mut i32) { + bar(a); + let ref y = a; // ok! +} +``` +For more information on the rust ownership system, take a look at +https://doc.rust-lang.org/stable/book/references-and-borrowing.html. +"##, + E0504: r##" This error occurs when an attempt is made to move a borrowed variable into a closure. @@ -984,7 +1011,6 @@ fn main() { register_diagnostics! { E0385, // {} in an aliasable location E0388, // {} in a static location - E0502, // cannot borrow `..`.. as .. because .. is also borrowed as ... E0503, // cannot use `..` because it was mutably borrowed E0508, // cannot move out of type `..`, a non-copy fixed-size array E0524, // two closures require unique access to `..` at the same time |
