diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2018-10-22 09:19:33 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2018-10-22 10:04:47 -0400 |
| commit | 2921fbaaa8f85c0306d5592973f924a74d356f9a (patch) | |
| tree | 5431dca31a953b267da7885f866cdd1e6fe1f712 /src/test | |
| parent | 0afccbb654cfe98ac426b32ccd19ce069e7138a7 (diff) | |
| download | rust-2921fbaaa8f85c0306d5592973f924a74d356f9a.tar.gz rust-2921fbaaa8f85c0306d5592973f924a74d356f9a.zip | |
flesh out closure-substs test
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/nll/user-annotations/closure-substs.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/nll/user-annotations/closure-substs.stderr | 54 |
2 files changed, 66 insertions, 8 deletions
diff --git a/src/test/ui/nll/user-annotations/closure-substs.rs b/src/test/ui/nll/user-annotations/closure-substs.rs index 0a22390fc71..7dd2d4113bb 100644 --- a/src/test/ui/nll/user-annotations/closure-substs.rs +++ b/src/test/ui/nll/user-annotations/closure-substs.rs @@ -13,12 +13,30 @@ // Test that we enforce user-provided type annotations on closures. fn foo<'a>() { + // Here `x` is free in the closure sig: |x: &'a i32| -> &'static i32 { - return x; //~ ERROR + return x; //~ ERROR unsatisfied lifetime constraints + }; +} + +fn foo1() { + // Here `x` is bound in the closure sig: + |x: &i32| -> &'static i32 { + return x; //~ ERROR unsatisfied lifetime constraints + //~^ ERROR unsatisfied lifetime constraints + //~| ERROR unsatisfied lifetime constraints }; } fn bar<'a>() { + // Here `x` is free in the closure sig: + |x: &'a i32, b: fn(&'static i32)| { + b(x); //~ ERROR unsatisfied lifetime constraints + }; +} + +fn bar1() { + // Here `x` is bound in the closure sig: |x: &i32, b: fn(&'static i32)| { b(x); //~ ERROR //~^ ERROR borrowed data escapes outside of closure diff --git a/src/test/ui/nll/user-annotations/closure-substs.stderr b/src/test/ui/nll/user-annotations/closure-substs.stderr index 97f6e594de5..126a66b8059 100644 --- a/src/test/ui/nll/user-annotations/closure-substs.stderr +++ b/src/test/ui/nll/user-annotations/closure-substs.stderr @@ -1,14 +1,54 @@ error: unsatisfied lifetime constraints - --> $DIR/closure-substs.rs:17:16 + --> $DIR/closure-substs.rs:18:16 | LL | fn foo<'a>() { | -- lifetime `'a` defined here -LL | |x: &'a i32| -> &'static i32 { -LL | return x; //~ ERROR +... +LL | return x; //~ ERROR unsatisfied lifetime constraints | ^ returning this value requires that `'a` must outlive `'static` +error: unsatisfied lifetime constraints + --> $DIR/closure-substs.rs:25:16 + | +LL | |x: &i32| -> &'static i32 { + | - let's call the lifetime of this reference `'1` +LL | return x; //~ ERROR unsatisfied lifetime constraints + | ^ returning this value requires that `'1` must outlive `'static` + +error: unsatisfied lifetime constraints + --> $DIR/closure-substs.rs:25:16 + | +LL | |x: &i32| -> &'static i32 { + | - - return type of closure is &'2 i32 + | | + | let's call the lifetime of this reference `'1` +LL | return x; //~ ERROR unsatisfied lifetime constraints + | ^ returning this value requires that `'1` must outlive `'2` + +error: unsatisfied lifetime constraints + --> $DIR/closure-substs.rs:25:16 + | +LL | |x: &i32| -> &'static i32 { + | ------------------------- + | | | + | | let's call the lifetime of this reference `'1` + | lifetime `'2` represents this closure's body +LL | return x; //~ ERROR unsatisfied lifetime constraints + | ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1` + | + = note: closure implements `Fn`, so references to captured variables can't escape the closure + +error: unsatisfied lifetime constraints + --> $DIR/closure-substs.rs:34:9 + | +LL | fn bar<'a>() { + | -- lifetime `'a` defined here +... +LL | b(x); //~ ERROR unsatisfied lifetime constraints + | ^^^^ argument requires that `'a` must outlive `'static` + error: borrowed data escapes outside of closure - --> $DIR/closure-substs.rs:23:9 + --> $DIR/closure-substs.rs:41:9 | LL | |x: &i32, b: fn(&'static i32)| { | - `x` is a reference that is only valid in the closure body @@ -16,7 +56,7 @@ LL | b(x); //~ ERROR | ^^^^ `x` escapes the closure body here error: borrowed data escapes outside of closure - --> $DIR/closure-substs.rs:23:9 + --> $DIR/closure-substs.rs:41:9 | LL | |x: &i32, b: fn(&'static i32)| { | - - `b` is declared here, outside of the closure body @@ -26,7 +66,7 @@ LL | b(x); //~ ERROR | ^^^^ `x` escapes the closure body here error: unsatisfied lifetime constraints - --> $DIR/closure-substs.rs:23:9 + --> $DIR/closure-substs.rs:41:9 | LL | |x: &i32, b: fn(&'static i32)| { | ------------------------------ @@ -38,5 +78,5 @@ LL | b(x); //~ ERROR | = note: closure implements `Fn`, so references to captured variables can't escape the closure -error: aborting due to 4 previous errors +error: aborting due to 8 previous errors |
