From 6dd2a857aa60925e42e3d319534bee46f0664caf Mon Sep 17 00:00:00 2001 From: Giles Cope Date: Mon, 4 Mar 2019 18:53:12 +0000 Subject: [PATCH 1/4] Regression test added for an async ICE. --- .../issues/issue-57084-async-await.rs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/test/run-pass/issues/issue-57084-async-await.rs diff --git a/src/test/run-pass/issues/issue-57084-async-await.rs b/src/test/run-pass/issues/issue-57084-async-await.rs new file mode 100644 index 0000000000000..feed68b5db101 --- /dev/null +++ b/src/test/run-pass/issues/issue-57084-async-await.rs @@ -0,0 +1,27 @@ +// This issue reproduces an ICE on compile (E.g. fails on 2018-12-19 nightly). +// run-pass +// edition:2018 +#![feature(async_await,futures_api,await_macro,generators)] + +pub struct Foo; + +impl Foo { + async fn with<'a, F, R>(&'a self, f: F) -> R + where F: Fn() -> R + 'a, + { + loop { + match f() { + _ => yield, + } + } + } + + pub async fn run<'a>(&'a self, data: &'a [u8]) + { + await!(self.with(move || { + println!("{:p}", data); + })) + } +} + +fn main() {} From 33a64699b1f630640a7281be6493643904e5daa4 Mon Sep 17 00:00:00 2001 From: Giles Cope Date: Tue, 5 Mar 2019 09:06:24 +0000 Subject: [PATCH 2/4] Unrolled await macro. Was then able to the minimise the reproduction a little further. --- .../issue-57084.rs} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename src/test/run-pass/{issues/issue-57084-async-await.rs => generator/issue-57084.rs} (62%) diff --git a/src/test/run-pass/issues/issue-57084-async-await.rs b/src/test/run-pass/generator/issue-57084.rs similarity index 62% rename from src/test/run-pass/issues/issue-57084-async-await.rs rename to src/test/run-pass/generator/issue-57084.rs index feed68b5db101..38c86dccb8087 100644 --- a/src/test/run-pass/issues/issue-57084-async-await.rs +++ b/src/test/run-pass/generator/issue-57084.rs @@ -1,7 +1,7 @@ // This issue reproduces an ICE on compile (E.g. fails on 2018-12-19 nightly). // run-pass // edition:2018 -#![feature(async_await,futures_api,await_macro,generators)] +#![feature(async_await,futures_api,generators)] pub struct Foo; @@ -16,12 +16,12 @@ impl Foo { } } - pub async fn run<'a>(&'a self, data: &'a [u8]) + pub async fn run<'a>(&'a self, data: &'a [u8]) { - await!(self.with(move || { - println!("{:p}", data); - })) + let _to_pin = self.with(move || println!("{:p}", data)); + loop { + yield + } } } - fn main() {} From fcec51d1efb9f2c445d503d0e7f8837088190d09 Mon Sep 17 00:00:00 2001 From: Giles Cope Date: Tue, 5 Mar 2019 17:47:23 +0000 Subject: [PATCH 3/4] Removed whitespace --- src/test/run-pass/generator/issue-57084.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/run-pass/generator/issue-57084.rs b/src/test/run-pass/generator/issue-57084.rs index 38c86dccb8087..f6bc93cd9375f 100644 --- a/src/test/run-pass/generator/issue-57084.rs +++ b/src/test/run-pass/generator/issue-57084.rs @@ -16,7 +16,7 @@ impl Foo { } } - pub async fn run<'a>(&'a self, data: &'a [u8]) + pub async fn run<'a>(&'a self, data: &'a [u8]) { let _to_pin = self.with(move || println!("{:p}", data)); loop { From 143e7d57321babc6fe993df370e0b54861443c11 Mon Sep 17 00:00:00 2001 From: Giles Cope Date: Wed, 6 Mar 2019 08:45:18 +0000 Subject: [PATCH 4/4] Desugared asyncs into generators and minimised. --- src/test/run-pass/generator/issue-57084.rs | 25 +++++++++++----------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/test/run-pass/generator/issue-57084.rs b/src/test/run-pass/generator/issue-57084.rs index f6bc93cd9375f..8aaa6a0e427d1 100644 --- a/src/test/run-pass/generator/issue-57084.rs +++ b/src/test/run-pass/generator/issue-57084.rs @@ -1,27 +1,28 @@ // This issue reproduces an ICE on compile (E.g. fails on 2018-12-19 nightly). +// "cannot relate bound region: ReLateBound(DebruijnIndex(1), BrAnon(1)) <= '_#1r" // run-pass // edition:2018 -#![feature(async_await,futures_api,generators)] +#![feature(generators,generator_trait)] +use std::ops::Generator; -pub struct Foo; - -impl Foo { - async fn with<'a, F, R>(&'a self, f: F) -> R - where F: Fn() -> R + 'a, - { +fn with(f: F) -> impl Generator +where F: Fn() -> () +{ + move || { loop { match f() { _ => yield, } } } +} - pub async fn run<'a>(&'a self, data: &'a [u8]) - { - let _to_pin = self.with(move || println!("{:p}", data)); +fn main() { + let data = &vec![1]; + || { + let _to_pin = with(move || println!("{:p}", data)); loop { yield } - } + }; } -fn main() {}