about summary refs log tree commit diff
path: root/tests/ui/coroutine/gen_block_panic.rs
blob: 5417ed583e8ca0cdc3a948925189dd603d055008 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//@ edition: 2024
//@ run-pass
//@ needs-unwind
//@ ignore-backends: gcc
#![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",
        ),
    }
}