Auto merge of #53088 - matthewjasper:closure-region-spans, r=nikomatsakis
[NLL] Use span of the closure args in free region errors Also adds a note when one of the free regions is BrEnv. In a future PR I'll change these messages to say "return requires", which should improve them a bit more. r? @nikomatsakis
This commit is contained in:
commit
63fe441db8
6 changed files with 112 additions and 63 deletions
|
|
@ -8,11 +8,10 @@ error: unsatisfied lifetime constraints
|
|||
--> $DIR/E0621-does-not-trigger-for-closures.rs:25:26
|
||||
|
|
||||
LL | invoke(&x, |a, b| if a > b { a } else { b }); //~ ERROR E0495
|
||||
| ----------^^^^^-----------------
|
||||
| | | |
|
||||
| | | requires that `'1` must outlive `'2`
|
||||
| | has type `&'1 i32`
|
||||
| lifetime `'2` appears in return type
|
||||
| -- ^^^^^ requires that `'1` must outlive `'2`
|
||||
| ||
|
||||
| |return type of closure is &'2 i32
|
||||
| has type `&'1 i32`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,15 @@
|
|||
error: unsatisfied lifetime constraints
|
||||
--> $DIR/issue-40510-1.rs:18:9
|
||||
|
|
||||
LL | || {
|
||||
| _____-
|
||||
| |_____|
|
||||
| ||
|
||||
LL | || &mut x
|
||||
| || ^^^^^^ return requires that `'1` must outlive `'2`
|
||||
LL | || };
|
||||
| || -
|
||||
| ||_____|
|
||||
| |______lifetime `'1` represents the closure body
|
||||
| lifetime `'2` appears in return type
|
||||
LL | || {
|
||||
| --
|
||||
| ||
|
||||
| |return type of closure is &'2 mut std::boxed::Box<()>
|
||||
| lifetime `'1` represents this closure's body
|
||||
LL | &mut x
|
||||
| ^^^^^^ return requires that `'1` must outlive `'2`
|
||||
|
|
||||
= note: closure implements `FnMut`, so references to captured variables can't escape the closure
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,17 @@
|
|||
error: unsatisfied lifetime constraints
|
||||
--> $DIR/issue-40510-3.rs:18:9
|
||||
|
|
||||
LL | || {
|
||||
| _____-
|
||||
| |_____|
|
||||
| ||
|
||||
LL | || || {
|
||||
| ||_________^
|
||||
LL | ||| x.push(())
|
||||
LL | ||| }
|
||||
| |||_________^ requires that `'1` must outlive `'2`
|
||||
LL | || };
|
||||
| || -
|
||||
| ||_____|
|
||||
| |______lifetime `'1` represents the closure body
|
||||
| lifetime `'2` appears in return type
|
||||
LL | || {
|
||||
| --
|
||||
| ||
|
||||
| |return type of closure is [closure@$DIR/issue-40510-3.rs:18:9: 20:10 x:&'2 mut std::vec::Vec<()>]
|
||||
| lifetime `'1` represents this closure's body
|
||||
LL | / || {
|
||||
LL | | x.push(())
|
||||
LL | | }
|
||||
| |_________^ requires that `'1` must outlive `'2`
|
||||
|
|
||||
= note: closure implements `FnMut`, so references to captured variables can't escape the closure
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,17 @@
|
|||
error: unsatisfied lifetime constraints
|
||||
--> $DIR/issue-49824.rs:22:9
|
||||
|
|
||||
LL | || {
|
||||
| _____-
|
||||
| |_____|
|
||||
| ||
|
||||
LL | || || {
|
||||
| ||_________^
|
||||
LL | ||| let _y = &mut x;
|
||||
LL | ||| }
|
||||
| |||_________^ requires that `'1` must outlive `'2`
|
||||
LL | || };
|
||||
| || -
|
||||
| ||_____|
|
||||
| |______lifetime `'1` represents the closure body
|
||||
| lifetime `'2` appears in return type
|
||||
LL | || {
|
||||
| --
|
||||
| ||
|
||||
| |return type of closure is [closure@$DIR/issue-49824.rs:22:9: 24:10 x:&'2 mut i32]
|
||||
| lifetime `'1` represents this closure's body
|
||||
LL | / || {
|
||||
LL | | let _y = &mut x;
|
||||
LL | | }
|
||||
| |_________^ requires that `'1` must outlive `'2`
|
||||
|
|
||||
= note: closure implements `FnMut`, so references to captured variables can't escape the closure
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -2,11 +2,12 @@ error: unsatisfied lifetime constraints
|
|||
--> $DIR/issue-48238.rs:21:13
|
||||
|
|
||||
LL | move || use_val(&orig); //~ ERROR
|
||||
| --------^^^^^^^^^^^^^^
|
||||
| | |
|
||||
| | argument requires that `'1` must outlive `'2`
|
||||
| lifetime `'1` represents the closure body
|
||||
| lifetime `'2` appears in return type
|
||||
| ------- ^^^^^^^^^^^^^^ argument requires that `'1` must outlive `'2`
|
||||
| | |
|
||||
| | return type of closure is &'2 u8
|
||||
| lifetime `'1` represents this closure's body
|
||||
|
|
||||
= note: closure implements `Fn`, so references to captured variables can't escape the closure
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue