From 4becbf3a7936d25de06265d934378996eea2f857 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 9 Jul 2019 11:56:01 +0200 Subject: [PATCH] Regression test for issue 42574. --- ...ssue-42574-diagnostic-in-nested-closure.rs | 13 ++++++++++ ...-42574-diagnostic-in-nested-closure.stderr | 26 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs create mode 100644 src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr diff --git a/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs b/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs new file mode 100644 index 0000000000000..f45370e5c2e5b --- /dev/null +++ b/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs @@ -0,0 +1,13 @@ +// This test illustrates a case where full NLL (enabled by the feature +// switch below) produces superior diagnostics to the NLL-migrate +// mode. + +#![feature(nll)] + +fn doit(data: &'static mut ()) { + || doit(data); + //~^ ERROR lifetime may not live long enough + //~| ERROR `data` does not live long enough +} + +fn main() { } diff --git a/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr b/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr new file mode 100644 index 0000000000000..4c70a8475f24f --- /dev/null +++ b/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr @@ -0,0 +1,26 @@ +error: lifetime may not live long enough + --> $DIR/issue-42574-diagnostic-in-nested-closure.rs:8:8 + | +LL | || doit(data); + | -- ^^^^^^^^^^ argument requires that `'1` must outlive `'static` + | | + | lifetime `'1` represents this closure's body + | + = note: closure implements `FnMut`, so references to captured variables can't escape the closure + +error[E0597]: `data` does not live long enough + --> $DIR/issue-42574-diagnostic-in-nested-closure.rs:8:13 + | +LL | || doit(data); + | -- -----^^^^- + | | | | + | | | borrowed value does not live long enough + | | argument requires that `data` is borrowed for `'static` + | value captured here +... +LL | } + | - `data` dropped here while still borrowed + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0597`.