| //compile-flags: --edition 2024 -Zunstable-options |
| // run-pass |
| // needs-unwind |
| #![feature(gen_blocks)] |
| |
| fn main() { |
| let mut iter = gen { |
| yield 42; |
| panic!("foo"); |
| yield 69; //~ WARN: unreachable statement |
| }; |
| assert_eq!(iter.next(), Some(42)); |
| let mut tmp = std::panic::AssertUnwindSafe(&mut iter); |
| match std::panic::catch_unwind(move || tmp.next()) { |
| Ok(_) => unreachable!(), |
| Err(err) => assert_eq!(*err.downcast::<&'static str>().unwrap(), "foo"), |
| } |
| |
| match std::panic::catch_unwind(move || iter.next()) { |
| Ok(_) => unreachable!(), |
| Err(err) => assert_eq!( |
| *err.downcast::<&'static str>().unwrap(), |
| "`gen fn` should just keep returning `None` after panicking", |
| ), |
| } |
| } |