Use revisions for NLL in closures
This commit is contained in:
parent
eb222bf943
commit
f1a7f9ab40
6 changed files with 36 additions and 18 deletions
|
@ -1,22 +1,24 @@
|
||||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:9
|
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:9:9
|
||||||
|
|
|
|
||||||
LL | fn foo(x: &()) {
|
LL | fn foo(x: &()) {
|
||||||
| --- this data with an anonymous lifetime `'_`...
|
| --- this data with an anonymous lifetime `'_`...
|
||||||
LL | bar(|| {
|
LL | bar(|| {
|
||||||
| _________^
|
| _________^
|
||||||
LL | |
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
LL | | let _ = x;
|
LL | | let _ = x;
|
||||||
LL | | })
|
LL | | })
|
||||||
| |_____^ ...is used here...
|
| |_____^ ...is used here...
|
||||||
|
|
|
|
||||||
note: ...and is required to live as long as `'static` here
|
note: ...and is required to live as long as `'static` here
|
||||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:5
|
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:9:5
|
||||||
|
|
|
|
||||||
LL | bar(|| {
|
LL | bar(|| {
|
||||||
| ^^^
|
| ^^^
|
||||||
note: `'static` lifetime requirement introduced by this bound
|
note: `'static` lifetime requirement introduced by this bound
|
||||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:1:39
|
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:39
|
||||||
|
|
|
|
||||||
LL | fn bar<F>(blk: F) where F: FnOnce() + 'static {
|
LL | fn bar<F>(blk: F) where F: FnOnce() + 'static {
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0521]: borrowed data escapes outside of function
|
error[E0521]: borrowed data escapes outside of function
|
||||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:5
|
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:9:5
|
||||||
|
|
|
|
||||||
LL | fn foo(x: &()) {
|
LL | fn foo(x: &()) {
|
||||||
| - - let's call the lifetime of this reference `'1`
|
| - - let's call the lifetime of this reference `'1`
|
||||||
|
@ -7,6 +7,8 @@ LL | fn foo(x: &()) {
|
||||||
| `x` is a reference that is only valid in the function body
|
| `x` is a reference that is only valid in the function body
|
||||||
LL | / bar(|| {
|
LL | / bar(|| {
|
||||||
LL | |
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
LL | | let _ = x;
|
LL | | let _ = x;
|
||||||
LL | | })
|
LL | | })
|
||||||
| | ^
|
| | ^
|
||||||
|
@ -15,19 +17,21 @@ LL | | })
|
||||||
| argument requires that `'1` must outlive `'static`
|
| argument requires that `'1` must outlive `'static`
|
||||||
|
|
||||||
error[E0373]: closure may outlive the current function, but it borrows `x`, which is owned by the current function
|
error[E0373]: closure may outlive the current function, but it borrows `x`, which is owned by the current function
|
||||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:9
|
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:9:9
|
||||||
|
|
|
|
||||||
LL | bar(|| {
|
LL | bar(|| {
|
||||||
| ^^ may outlive borrowed value `x`
|
| ^^ may outlive borrowed value `x`
|
||||||
LL |
|
...
|
||||||
LL | let _ = x;
|
LL | let _ = x;
|
||||||
| - `x` is borrowed here
|
| - `x` is borrowed here
|
||||||
|
|
|
|
||||||
note: function requires argument type to outlive `'static`
|
note: function requires argument type to outlive `'static`
|
||||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:5
|
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:9:5
|
||||||
|
|
|
|
||||||
LL | / bar(|| {
|
LL | / bar(|| {
|
||||||
LL | |
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
LL | | let _ = x;
|
LL | | let _ = x;
|
||||||
LL | | })
|
LL | | })
|
||||||
| |______^
|
| |______^
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
|
// ignore-compare-mode-nll
|
||||||
|
// revisions: base nll
|
||||||
|
// [nll]compile-flags: -Zborrowck=mir
|
||||||
|
|
||||||
fn bar<F>(blk: F) where F: FnOnce() + 'static {
|
fn bar<F>(blk: F) where F: FnOnce() + 'static {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn foo(x: &()) {
|
fn foo(x: &()) {
|
||||||
bar(|| {
|
bar(|| {
|
||||||
//~^ ERROR `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement [E0759]
|
//[base]~^ ERROR `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement [E0759]
|
||||||
|
//[nll]~^^ ERROR borrowed data escapes
|
||||||
|
//[nll]~| ERROR closure may outlive
|
||||||
let _ = x;
|
let _ = x;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/expect-region-supply-region-2.rs:14:33
|
--> $DIR/expect-region-supply-region-2.rs:18:33
|
||||||
|
|
|
|
||||||
LL | closure_expecting_bound(|x: &'x u32| {
|
LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
| ^^^^^^^ lifetime mismatch
|
| ^^^^^^^ lifetime mismatch
|
||||||
|
@ -7,7 +7,7 @@ LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
= note: expected reference `&u32`
|
= note: expected reference `&u32`
|
||||||
found reference `&'x u32`
|
found reference `&'x u32`
|
||||||
note: the anonymous lifetime #1 defined here...
|
note: the anonymous lifetime #1 defined here...
|
||||||
--> $DIR/expect-region-supply-region-2.rs:14:29
|
--> $DIR/expect-region-supply-region-2.rs:18:29
|
||||||
|
|
|
|
||||||
LL | closure_expecting_bound(|x: &'x u32| {
|
LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
| _____________________________^
|
| _____________________________^
|
||||||
|
@ -19,13 +19,13 @@ LL | | f = Some(x);
|
||||||
LL | | });
|
LL | | });
|
||||||
| |_____^
|
| |_____^
|
||||||
note: ...does not necessarily outlive the lifetime `'x` as defined here
|
note: ...does not necessarily outlive the lifetime `'x` as defined here
|
||||||
--> $DIR/expect-region-supply-region-2.rs:9:30
|
--> $DIR/expect-region-supply-region-2.rs:13:30
|
||||||
|
|
|
|
||||||
LL | fn expect_bound_supply_named<'x>() {
|
LL | fn expect_bound_supply_named<'x>() {
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/expect-region-supply-region-2.rs:14:33
|
--> $DIR/expect-region-supply-region-2.rs:18:33
|
||||||
|
|
|
|
||||||
LL | closure_expecting_bound(|x: &'x u32| {
|
LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
| ^^^^^^^ lifetime mismatch
|
| ^^^^^^^ lifetime mismatch
|
||||||
|
@ -33,12 +33,12 @@ LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
= note: expected reference `&u32`
|
= note: expected reference `&u32`
|
||||||
found reference `&'x u32`
|
found reference `&'x u32`
|
||||||
note: the lifetime `'x` as defined here...
|
note: the lifetime `'x` as defined here...
|
||||||
--> $DIR/expect-region-supply-region-2.rs:9:30
|
--> $DIR/expect-region-supply-region-2.rs:13:30
|
||||||
|
|
|
|
||||||
LL | fn expect_bound_supply_named<'x>() {
|
LL | fn expect_bound_supply_named<'x>() {
|
||||||
| ^^
|
| ^^
|
||||||
note: ...does not necessarily outlive the anonymous lifetime #1 defined here
|
note: ...does not necessarily outlive the anonymous lifetime #1 defined here
|
||||||
--> $DIR/expect-region-supply-region-2.rs:14:29
|
--> $DIR/expect-region-supply-region-2.rs:18:29
|
||||||
|
|
|
|
||||||
LL | closure_expecting_bound(|x: &'x u32| {
|
LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
| _____________________________^
|
| _____________________________^
|
|
@ -1,5 +1,5 @@
|
||||||
error: lifetime may not live long enough
|
error: lifetime may not live long enough
|
||||||
--> $DIR/expect-region-supply-region-2.rs:14:30
|
--> $DIR/expect-region-supply-region-2.rs:18:30
|
||||||
|
|
|
|
||||||
LL | fn expect_bound_supply_named<'x>() {
|
LL | fn expect_bound_supply_named<'x>() {
|
||||||
| -- lifetime `'x` defined here
|
| -- lifetime `'x` defined here
|
||||||
|
@ -10,7 +10,7 @@ LL | closure_expecting_bound(|x: &'x u32| {
|
||||||
| requires that `'1` must outlive `'x`
|
| requires that `'1` must outlive `'x`
|
||||||
|
|
||||||
error: lifetime may not live long enough
|
error: lifetime may not live long enough
|
||||||
--> $DIR/expect-region-supply-region-2.rs:14:30
|
--> $DIR/expect-region-supply-region-2.rs:18:30
|
||||||
|
|
|
|
||||||
LL | fn expect_bound_supply_named<'x>() {
|
LL | fn expect_bound_supply_named<'x>() {
|
||||||
| -- lifetime `'x` defined here
|
| -- lifetime `'x` defined here
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// ignore-compare-mode-nll
|
||||||
|
// revisions: base nll
|
||||||
|
// [nll]compile-flags: -Zborrowck=mir
|
||||||
|
|
||||||
#![allow(warnings)]
|
#![allow(warnings)]
|
||||||
|
|
||||||
fn closure_expecting_bound<F>(_: F)
|
fn closure_expecting_bound<F>(_: F)
|
||||||
|
@ -12,8 +16,10 @@ fn expect_bound_supply_named<'x>() {
|
||||||
// Here we give a type annotation that `x` should be free. We get
|
// Here we give a type annotation that `x` should be free. We get
|
||||||
// an error because of that.
|
// an error because of that.
|
||||||
closure_expecting_bound(|x: &'x u32| {
|
closure_expecting_bound(|x: &'x u32| {
|
||||||
//~^ ERROR mismatched types
|
//[base]~^ ERROR mismatched types
|
||||||
//~| ERROR mismatched types
|
//[base]~| ERROR mismatched types
|
||||||
|
//[nll]~^^^ ERROR lifetime may not live long enough
|
||||||
|
//[nll]~| ERROR lifetime may not live long enough
|
||||||
|
|
||||||
// Borrowck doesn't get a chance to run, but if it did it should error
|
// Borrowck doesn't get a chance to run, but if it did it should error
|
||||||
// here.
|
// here.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue