// run-pass

#![allow(non_camel_case_types)]
#![allow(dead_code)]
// compile-flags: --edition 2018

#![feature(try_blocks)]

struct catch {}

pub fn main() {
    let catch_result: Option<_> = try {
        let x = 5;
        x
    };
    assert_eq!(catch_result, Some(5));

    let mut catch = true;
    while catch { catch = false; }
    assert_eq!(catch, false);

    catch = if catch { false } else { true };
    assert_eq!(catch, true);

    match catch {
        _ => {}
    };

    let catch_err: Result<_, i32> = try {
        Err(22)?;
        1
    };
    assert_eq!(catch_err, Err(22));

    let catch_okay: Result<i32, i32> = try {
        if false { Err(25)?; }
        Ok::<(), i32>(())?;
        28
    };
    assert_eq!(catch_okay, Ok(28));

    let catch_from_loop: Result<i32, i32> = try {
        for i in 0..10 {
            if i < 5 { Ok::<i32, i32>(i)?; } else { Err(i)?; }
        }
        22
    };
    assert_eq!(catch_from_loop, Err(5));

    let cfg_init;
    let _res: Result<(), ()> = try {
        cfg_init = 5;
    };
    assert_eq!(cfg_init, 5);

    let cfg_init_2;
    let _res: Result<(), ()> = try {
        cfg_init_2 = 6;
        Err(())?;
    };
    assert_eq!(cfg_init_2, 6);

    let my_string = "test".to_string();
    let res: Result<&str, ()> = try {
        // Unfortunately, deref doesn't fire here (#49356)
        &my_string[..]
    };
    assert_eq!(res, Ok("test"));

    let my_opt: Option<_> = try { () };
    assert_eq!(my_opt, Some(()));

    let my_opt: Option<_> = try { };
    assert_eq!(my_opt, Some(()));
}
