Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Collect move errors before reporting
This commit changes the way move errors are reported when some value is captured by a PatIdent. First, we collect all of the "cannot move out of" errors before reporting them, and those errors with the same "move source" are reported together. If the move is caused by a PatIdent (that binds by value), we add a note indicating where it is and suggest the user to put `ref` if they don't want the value to move. This makes the "cannot move out of" error in match expression nicer (though the extra note may not feel that helpful in other places :P). For example, with the following code snippet, ```rust enum Foo { Foo1(~u32, ~u32), Foo2(~u32), Foo3, } fn main() { let f = &Foo1(~1u32, ~2u32); match *f { Foo1(num1, num2) => (), Foo2(num) => (), Foo3 => () } } ``` Errors before the change: ```rust test.rs:10:9: 10:25 error: cannot move out of dereference of `&`-pointer test.rs:10 Foo1(num1, num2) => (), ^~~~~~~~~~~~~~~~ test.rs:10:9: 10:25 error: cannot move out of dereference of `&`-pointer test.rs:10 Foo1(num1, num2) => (), ^~~~~~~~~~~~~~~~ test.rs:11:9: 11:18 error: cannot move out of dereference of `&`-pointer test.rs:11 Foo2(num) => (), ^~~~~~~~~ ``` After: ```rust test.rs:9:11: 9:13 error: cannot move out of dereference of `&`-pointer test.rs:9 match *f { ^~ test.rs:10:14: 10:18 note: attempting to move value to here (to prevent the move, you can use `ref num1` to capture value by reference) test.rs:10 Foo1(num1, num2) => (), ^~~~ test.rs:10:20: 10:24 note: and here (use `ref num2`) test.rs:10 Foo1(num1, num2) => (), ^~~~ test.rs:11:14: 11:17 note: and here (use `ref num`) test.rs:11 Foo2(num) => (), ^~~ ``` Close #8064
- Loading branch information
Showing
7 changed files
with
323 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
13d6c35
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
saw approval from brson
at ktt3ja@13d6c35
13d6c35
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
merging ktt3ja/rust/move-out-of = 13d6c35 into auto
13d6c35
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ktt3ja/rust/move-out-of = 13d6c35 merged ok, testing candidate = b8d6214
13d6c35
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
all tests pass:
success: http://buildbot.rust-lang.org/builders/auto-mac-32-opt/builds/5277
success: http://buildbot.rust-lang.org/builders/auto-mac-64-opt/builds/5273
success: http://buildbot.rust-lang.org/builders/auto-mac-64-nopt-c/builds/4366
success: http://buildbot.rust-lang.org/builders/auto-mac-64-nopt-t/builds/4379
success: http://buildbot.rust-lang.org/builders/auto-linux-32-opt/builds/5375
success: http://buildbot.rust-lang.org/builders/auto-linux-32-nopt-c/builds/4462
success: http://buildbot.rust-lang.org/builders/auto-linux-32-nopt-t/builds/4470
success: http://buildbot.rust-lang.org/builders/auto-linux-64-opt/builds/5377
success: http://buildbot.rust-lang.org/builders/auto-linux-64-nopt-c/builds/4462
success: http://buildbot.rust-lang.org/builders/auto-linux-64-nopt-t/builds/4468
success: http://buildbot.rust-lang.org/builders/auto-linux-64-x-android/builds/4532
success: http://buildbot.rust-lang.org/builders/auto-linux-64-x-android-t/builds/2262
success: http://buildbot.rust-lang.org/builders/auto-win-32-opt/builds/5372
success: http://buildbot.rust-lang.org/builders/auto-win-32-nopt-c/builds/4469
success: http://buildbot.rust-lang.org/builders/auto-win-32-nopt-t/builds/4482
13d6c35
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fast-forwarding master to auto = b8d6214