// MIR for `main` 0 mir_map

fn main() -> () {
    let mut _0: ();                      // return place in scope 0 at $DIR/issue-72181.rs:23:11: 23:11
    let mut _1: usize;                   // in scope 0 at $DIR/issue-72181.rs:24:13: 24:34
    let mut _3: Foo;                     // in scope 0 at $DIR/issue-72181.rs:26:14: 26:27
    let mut _4: Foo;                     // in scope 0 at $DIR/issue-72181.rs:26:29: 26:42
    let mut _5: u64;                     // in scope 0 at $DIR/issue-72181.rs:27:13: 27:30
    let _6: usize;                       // in scope 0 at $DIR/issue-72181.rs:27:24: 27:25
    let mut _7: usize;                   // in scope 0 at $DIR/issue-72181.rs:27:22: 27:26
    let mut _8: bool;                    // in scope 0 at $DIR/issue-72181.rs:27:22: 27:26
    scope 1 {
        let _2: [Foo; 2];                // in scope 1 at $DIR/issue-72181.rs:26:9: 26:10
        scope 2 {
            debug f => _2;               // in scope 2 at $DIR/issue-72181.rs:26:9: 26:10
            scope 3 {
            }
            scope 4 {
            }
        }
    }

    bb0: {
        StorageLive(_1);                 // scope 0 at $DIR/issue-72181.rs:24:13: 24:34
        _1 = std::mem::size_of::<Foo>() -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/issue-72181.rs:24:13: 24:34
                                         // mir::Constant
                                         // + span: $DIR/issue-72181.rs:24:13: 24:32
                                         // + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(Scalar(<ZST>)) }
    }

    bb1 (cleanup): {
        resume;                          // scope 0 at $DIR/issue-72181.rs:23:1: 28:2
    }

    bb2: {
        StorageDead(_1);                 // scope 0 at $DIR/issue-72181.rs:24:34: 24:35
        StorageLive(_2);                 // scope 1 at $DIR/issue-72181.rs:26:9: 26:10
        StorageLive(_3);                 // scope 1 at $DIR/issue-72181.rs:26:14: 26:27
        _3 = Foo { a: const 42_u64 };    // scope 1 at $DIR/issue-72181.rs:26:14: 26:27
        StorageLive(_4);                 // scope 1 at $DIR/issue-72181.rs:26:29: 26:42
        _4 = Foo { a: const 10_u64 };    // scope 1 at $DIR/issue-72181.rs:26:29: 26:42
        _2 = [move _3, move _4];         // scope 1 at $DIR/issue-72181.rs:26:13: 26:43
        StorageDead(_4);                 // scope 1 at $DIR/issue-72181.rs:26:42: 26:43
        StorageDead(_3);                 // scope 1 at $DIR/issue-72181.rs:26:42: 26:43
        FakeRead(ForLet, _2);            // scope 1 at $DIR/issue-72181.rs:26:9: 26:10
        StorageLive(_5);                 // scope 2 at $DIR/issue-72181.rs:27:13: 27:30
        StorageLive(_6);                 // scope 4 at $DIR/issue-72181.rs:27:24: 27:25
        _6 = const 0_usize;              // scope 4 at $DIR/issue-72181.rs:27:24: 27:25
        _7 = Len(_2);                    // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
        _8 = Lt(_6, _7);                 // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
        assert(move _8, "index out of bounds: the len is {} but the index is {}", move _7, _6) -> [success: bb3, unwind: bb1]; // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
    }

    bb3: {
        _5 = (_2[_6].0: u64);            // scope 4 at $DIR/issue-72181.rs:27:22: 27:28
        StorageDead(_6);                 // scope 2 at $DIR/issue-72181.rs:27:30: 27:31
        StorageDead(_5);                 // scope 2 at $DIR/issue-72181.rs:27:30: 27:31
        _0 = const ();                   // scope 0 at $DIR/issue-72181.rs:23:11: 28:2
        StorageDead(_2);                 // scope 1 at $DIR/issue-72181.rs:28:1: 28:2
        goto -> bb4;                     // scope 0 at $DIR/issue-72181.rs:28:2: 28:2
    }

    bb4: {
        return;                          // scope 0 at $DIR/issue-72181.rs:28:2: 28:2
    }
}
