// MIR for `main::{closure#0}::{closure#0}::{closure#0}` after built

fn main::{closure#0}::{closure#0}::{closure#0}(_1: {async closure body@$DIR/async_closure_shims.rs:54:53: 57:10}, _2: ResumeTy) -> ()
yields ()
 {
    debug _task_context => _2;
    debug a => (_1.0: i32);
    debug b => (*(_1.1: &i32));
    let mut _0: ();
    let _3: i32;
    scope 1 {
        debug a => _3;
        let _4: &i32;
        scope 2 {
            debug a => _4;
            let _5: &i32;
            scope 3 {
                debug b => _5;
            }
        }
    }

    bb0: {
        StorageLive(_3);
        _3 = copy (_1.0: i32);
        FakeRead(ForLet(None), _3);
        StorageLive(_4);
        _4 = &_3;
        FakeRead(ForLet(None), _4);
        StorageLive(_5);
        _5 = &(*(_1.1: &i32));
        FakeRead(ForLet(None), _5);
        _0 = const ();
        StorageDead(_5);
        StorageDead(_4);
        StorageDead(_3);
        drop(_1) -> [return: bb1, unwind: bb2];
    }

    bb1: {
        return;
    }

    bb2 (cleanup): {
        resume;
    }
}
