From d5294a5bf3457c7565f1fce4ce804682a2f8fa10 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 9 Aug 2019 10:32:53 +0200 Subject: [PATCH] test generator that yields during initialization of struct with uninhabited field --- tests/run-pass/generator.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/run-pass/generator.rs b/tests/run-pass/generator.rs index 5064d8daf0f..c31b5b9ed3b 100644 --- a/tests/run-pass/generator.rs +++ b/tests/run-pass/generator.rs @@ -1,4 +1,4 @@ -#![feature(generators, generator_trait)] +#![feature(generators, generator_trait, never_type)] use std::ops::{GeneratorState, Generator}; use std::pin::Pin; @@ -26,6 +26,7 @@ fn never() -> Never { fn main() { finish(1, || yield 1); + finish(3, || { let mut x = 0; yield 1; @@ -35,23 +36,27 @@ fn main() { yield 1; assert_eq!(x, 2); }); + finish(7*8/2, || { for i in 0..8 { yield i; } }); + finish(1, || { if true { yield 1; } else { } }); + finish(1, || { if false { } else { yield 1; } }); + finish(2, || { if { yield 1; false } { yield 1; @@ -59,6 +64,7 @@ fn main() { } yield 1; }); + // also test a self-referential generator assert_eq!( finish(5, || { @@ -71,6 +77,7 @@ fn main() { }), 10 ); + let b = true; finish(1, || { yield 1; @@ -80,4 +87,10 @@ fn main() { yield 2; drop(x); }); + + finish(3, || { + yield 1; + #[allow(unreachable_code)] + let _x: (String, !) = (String::new(), { yield 2; return }); + }); }