borrowck-migrate-to-nll: use #38899 for testing.
This commit is contained in:
parent
513852f68b
commit
a421e51266
3 changed files with 32 additions and 30 deletions
|
|
@ -1,14 +1,14 @@
|
|||
warning[E0507]: cannot move out of `foo` in pattern guard
|
||||
--> $DIR/borrowck-migrate-to-nll.rs:26:18
|
||||
warning[E0502]: cannot borrow `*block.current` as immutable because it is also borrowed as mutable
|
||||
--> $DIR/borrowck-migrate-to-nll.rs:28:21
|
||||
|
|
||||
LL | (|| { let bar = foo; bar.take() })();
|
||||
| ^^ ---
|
||||
| | |
|
||||
| | move occurs because `foo` has type `&mut std::option::Option<&i32>`, which does not implement the `Copy` trait
|
||||
| | move occurs due to use in closure
|
||||
| move out of `foo` occurs here
|
||||
LL | let x = &mut block;
|
||||
| ---------- mutable borrow occurs here
|
||||
LL | let p: &'a u8 = &*block.current;
|
||||
| ^^^^^^^^^^^^^^^ immutable borrow occurs here
|
||||
LL | // (use `x` and `p` so enabling NLL doesn't assign overly short lifetimes)
|
||||
LL | drop(x);
|
||||
| - mutable borrow later used here
|
||||
|
|
||||
= note: variables bound in patterns cannot be moved from until after the end of the pattern guard
|
||||
= warning: this error has been downgraded to a warning for backwards compatibility with previous releases
|
||||
= warning: this represents potential undefined behavior in your code and this warning will become a hard error in the future
|
||||
= note: for more information, try `rustc --explain E0729`
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// This is a test of the borrowck migrate mode. It leverages #27282, a
|
||||
// This is a test of the borrowck migrate mode. It leverages #38899, a
|
||||
// bug that is fixed by NLL: this code is (unsoundly) accepted by
|
||||
// AST-borrowck, but is correctly rejected by the NLL borrowck.
|
||||
//
|
||||
|
|
@ -18,15 +18,17 @@
|
|||
//[zflag] run-pass
|
||||
//[edition] run-pass
|
||||
|
||||
fn main() {
|
||||
match Some(&4) {
|
||||
None => {},
|
||||
ref mut foo
|
||||
if {
|
||||
(|| { let bar = foo; bar.take() })();
|
||||
false
|
||||
} => {},
|
||||
Some(ref _s) => println!("Note this arm is bogus; the `Some` became `None` in the guard."),
|
||||
_ => println!("Here is some supposedly unreachable code."),
|
||||
}
|
||||
pub struct Block<'a> {
|
||||
current: &'a u8,
|
||||
unrelated: &'a u8,
|
||||
}
|
||||
|
||||
fn bump<'a>(mut block: &mut Block<'a>) {
|
||||
let x = &mut block;
|
||||
let p: &'a u8 = &*block.current;
|
||||
// (use `x` and `p` so enabling NLL doesn't assign overly short lifetimes)
|
||||
drop(x);
|
||||
drop(p);
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
warning[E0507]: cannot move out of `foo` in pattern guard
|
||||
--> $DIR/borrowck-migrate-to-nll.rs:26:18
|
||||
warning[E0502]: cannot borrow `*block.current` as immutable because it is also borrowed as mutable
|
||||
--> $DIR/borrowck-migrate-to-nll.rs:28:21
|
||||
|
|
||||
LL | (|| { let bar = foo; bar.take() })();
|
||||
| ^^ ---
|
||||
| | |
|
||||
| | move occurs because `foo` has type `&mut std::option::Option<&i32>`, which does not implement the `Copy` trait
|
||||
| | move occurs due to use in closure
|
||||
| move out of `foo` occurs here
|
||||
LL | let x = &mut block;
|
||||
| ---------- mutable borrow occurs here
|
||||
LL | let p: &'a u8 = &*block.current;
|
||||
| ^^^^^^^^^^^^^^^ immutable borrow occurs here
|
||||
LL | // (use `x` and `p` so enabling NLL doesn't assign overly short lifetimes)
|
||||
LL | drop(x);
|
||||
| - mutable borrow later used here
|
||||
|
|
||||
= note: variables bound in patterns cannot be moved from until after the end of the pattern guard
|
||||
= warning: this error has been downgraded to a warning for backwards compatibility with previous releases
|
||||
= warning: this represents potential undefined behavior in your code and this warning will become a hard error in the future
|
||||
= note: for more information, try `rustc --explain E0729`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue