From 9e78ce068bb649738d489bf3cc9d701aa9a47b1e Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 10 Feb 2020 11:31:55 -0500 Subject: [PATCH 1/3] handle TerminatorKind::Yield by returning Err(Unpromotable) --- src/librustc_mir/transform/promote_consts.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index 9a7f3f86a6fcd..a5d59860c3d16 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -463,6 +463,7 @@ impl<'tcx> Validator<'_, 'tcx> { let terminator = self.body[loc.block].terminator(); match &terminator.kind { TerminatorKind::Call { func, args, .. } => self.validate_call(func, args), + TerminatorKind::Yield { .. } => Err(Unpromotable), kind => { span_bug!(terminator.source_info.span, "{:?} not promotable", kind); } From fc3ecb22b9b7131ab0150672b4117ba9b53306fa Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 10 Feb 2020 12:03:49 -0500 Subject: [PATCH 2/3] add issue 69017 test --- src/test/ui/generator/issue-69017.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/test/ui/generator/issue-69017.rs diff --git a/src/test/ui/generator/issue-69017.rs b/src/test/ui/generator/issue-69017.rs new file mode 100644 index 0000000000000..7b1d87efc9443 --- /dev/null +++ b/src/test/ui/generator/issue-69017.rs @@ -0,0 +1,16 @@ +// This issue reproduces an ICE on compile +// Fails on 2020-02-08 nightly +// regressed commit: https://github.com/rust-lang/rust/commit/f8fd4624474a68bd26694eff3536b9f3a127b2d3 +// +// check-pass + +#![feature(generator_trait)] +#![feature(generators)] + +use std::ops::Generator; + +fn gen() -> impl Generator { + |_: usize| { + println!("-> {}", yield); + } +} From 53b16fb5f2dad5571dc242c3671c1d0588183cb3 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 10 Feb 2020 13:47:52 -0500 Subject: [PATCH 3/3] add main function to issue-69017 test --- src/test/ui/generator/issue-69017.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/ui/generator/issue-69017.rs b/src/test/ui/generator/issue-69017.rs index 7b1d87efc9443..511deb60e4553 100644 --- a/src/test/ui/generator/issue-69017.rs +++ b/src/test/ui/generator/issue-69017.rs @@ -14,3 +14,5 @@ fn gen() -> impl Generator { println!("-> {}", yield); } } + +fn main() {}