about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-07-09 21:01:53 +0200
committerGitHub <noreply@github.com>2019-07-09 21:01:53 +0200
commite6f68a93b3041f65d36c6c708d8a451cc29ef560 (patch)
tree955d1205a058e62d52cb4f3e144f40a89658e817
parent8e793439a4e5eb45b48a76313b9d58d446c7805e (diff)
parent4becbf3a7936d25de06265d934378996eea2f857 (diff)
downloadrust-e6f68a93b3041f65d36c6c708d8a451cc29ef560.tar.gz
rust-e6f68a93b3041f65d36c6c708d8a451cc29ef560.zip
Rollup merge of #62520 - pnkfelix:add-test-for-42574, r=alexcrichton
Regression test for issue 42574.

Cc #42574.

I'm not going to say this *closes* that issue yet, for two reasons:

 1. I am still confused about some aspects of the behavior we are observing that bug

 2. The "fix" to the diagnostic relies on full NLL (`#![feature(nll)]`); migration mode still has a subpar diagnostic.
-rw-r--r--src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs13
-rw-r--r--src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr26
2 files changed, 39 insertions, 0 deletions
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 00000000000..f45370e5c2e
--- /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 00000000000..4c70a8475f2
--- /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`.