// MIR for `enumerated_loop` after runtime-optimized

fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
    debug slice => _1;
    debug f => _2;
    let mut _0: ();
    let mut _12: usize;
    let mut _32: std::option::Option<(usize, &T)>;
    let mut _35: &impl Fn(usize, &T);
    let mut _36: (usize, &T);
    let _37: ();
    scope 1 {
        debug (((iter: Enumerate<std::slice::Iter<'_, T>>).0: std::slice::Iter<'_, T>).0: std::ptr::NonNull<T>) => _8;
        debug (((iter: Enumerate<std::slice::Iter<'_, T>>).0: std::slice::Iter<'_, T>).1: *const T) => _11;
        debug (((iter: Enumerate<std::slice::Iter<'_, T>>).0: std::slice::Iter<'_, T>).2: std::marker::PhantomData<&T>) => const ZeroSized: PhantomData<&T>;
        debug ((iter: Enumerate<std::slice::Iter<'_, T>>).1: usize) => _12;
        let _33: usize;
        let _34: &T;
        scope 2 {
            debug i => _33;
            debug x => _34;
        }
        scope 18 (inlined <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next) {
            let mut _22: std::option::Option<std::convert::Infallible>;
            let mut _27: std::option::Option<&T>;
            let mut _30: (usize, bool);
            let mut _31: (usize, &T);
            scope 19 {
                let _29: usize;
                scope 24 {
                }
            }
            scope 20 {
                scope 21 {
                    scope 27 (inlined <Option<(usize, &T)> as FromResidual<Option<Infallible>>>::from_residual) {
                        let mut _21: isize;
                        let mut _23: bool;
                    }
                }
            }
            scope 22 {
                scope 23 {
                }
            }
            scope 25 (inlined <Option<&T> as Try>::branch) {
                let _28: &T;
                scope 26 {
                }
            }
            scope 28 (inlined <std::slice::Iter<'_, T> as Iterator>::next) {
                let mut _8: std::ptr::NonNull<T>;
                let _13: std::ptr::NonNull<T>;
                let _15: std::ptr::NonNull<T>;
                let mut _18: bool;
                let mut _24: usize;
                let _26: &T;
                scope 29 {
                    let _14: *const T;
                    scope 30 {
                        let _20: usize;
                        scope 31 {
                            scope 34 (inlined #[track_caller] core::num::<impl usize>::unchecked_sub) {
                                scope 35 (inlined core::ub_checks::check_language_ub) {
                                    scope 36 (inlined core::ub_checks::check_language_ub::runtime) {
                                    }
                                }
                            }
                            scope 37 (inlined without_provenance_mut::<T>) {
                            }
                        }
                        scope 32 (inlined std::ptr::const_ptr::<impl *const T>::addr) {
                            scope 33 (inlined std::ptr::const_ptr::<impl *const T>::cast::<()>) {
                            }
                        }
                        scope 38 (inlined <NonNull<T> as PartialEq>::eq) {
                            let mut _16: *mut T;
                            let mut _17: *mut T;
                            scope 39 (inlined NonNull::<T>::as_ptr) {
                            }
                            scope 40 (inlined NonNull::<T>::as_ptr) {
                            }
                        }
                        scope 41 (inlined NonNull::<T>::add) {
                            let mut _19: *mut T;
                            scope 42 (inlined NonNull::<T>::as_ptr) {
                            }
                        }
                        scope 43 (inlined NonNull::<T>::as_ref::<'_>) {
                            let _25: *const T;
                            scope 44 (inlined NonNull::<T>::as_ptr) {
                            }
                            scope 45 (inlined std::ptr::mut_ptr::<impl *mut T>::cast_const) {
                            }
                        }
                    }
                }
            }
        }
    }
    scope 3 (inlined core::slice::<impl [T]>::iter) {
        scope 4 (inlined std::slice::Iter::<'_, T>::new) {
            let _3: usize;
            let mut _5: std::ptr::NonNull<[T]>;
            let mut _9: *mut T;
            let mut _10: *mut T;
            scope 5 {
                scope 6 {
                    let _11: *const T;
                    scope 7 {
                    }
                    scope 11 (inlined std::ptr::without_provenance::<T>) {
                        scope 12 (inlined without_provenance_mut::<T>) {
                        }
                    }
                    scope 13 (inlined NonNull::<T>::as_ptr) {
                    }
                    scope 14 (inlined #[track_caller] std::ptr::mut_ptr::<impl *mut T>::add) {
                    }
                }
                scope 8 (inlined NonNull::<[T]>::from_ref) {
                    let mut _4: *const [T];
                }
                scope 9 (inlined NonNull::<[T]>::cast::<T>) {
                    let mut _6: *mut [T];
                    let mut _7: *mut T;
                    scope 10 (inlined NonNull::<[T]>::as_ptr) {
                    }
                }
            }
        }
    }
    scope 15 (inlined <std::slice::Iter<'_, T> as Iterator>::enumerate) {
        scope 16 (inlined Enumerate::<std::slice::Iter<'_, T>>::new) {
        }
    }
    scope 17 (inlined <Enumerate<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
    }

    bb0: {
        StorageLive(_3);
        _3 = PtrMetadata(copy _1);
        StorageLive(_5);
        StorageLive(_4);
        _4 = &raw const (*_1);
        _5 = copy _4 as std::ptr::NonNull<[T]> (Transmute);
        StorageDead(_4);
        StorageLive(_7);
        StorageLive(_6);
        _6 = copy _5 as *mut [T] (Transmute);
        _7 = copy _6 as *mut T (PtrToPtr);
        StorageDead(_6);
        _8 = copy _7 as std::ptr::NonNull<T> (Transmute);
        StorageDead(_7);
        StorageDead(_5);
        switchInt(const <T as std::mem::SizedTypeProperties>::IS_ZST) -> [0: bb1, otherwise: bb2];
    }

    bb1: {
        StorageLive(_10);
        StorageLive(_9);
        _9 = copy _8 as *mut T (Transmute);
        _10 = Offset(copy _9, copy _3);
        StorageDead(_9);
        _11 = copy _10 as *const T (PtrToPtr);
        StorageDead(_10);
        goto -> bb3;
    }

    bb2: {
        _11 = copy _3 as *const T (Transmute);
        goto -> bb3;
    }

    bb3: {
        StorageDead(_3);
        StorageLive(_12);
        _12 = const 0_usize;
        goto -> bb4;
    }

    bb4: {
        StorageLive(_32);
        StorageLive(_30);
        StorageLive(_27);
        StorageLive(_24);
        StorageLive(_16);
        StorageLive(_13);
        _13 = copy _8;
        StorageLive(_14);
        _14 = copy _11;
        switchInt(const <T as std::mem::SizedTypeProperties>::IS_ZST) -> [0: bb5, otherwise: bb8];
    }

    bb5: {
        StorageLive(_18);
        StorageLive(_15);
        _15 = copy _14 as std::ptr::NonNull<T> (Transmute);
        _16 = copy _13 as *mut T (Transmute);
        StorageLive(_17);
        _17 = copy _15 as *mut T (Transmute);
        _18 = Eq(copy _16, copy _17);
        StorageDead(_17);
        switchInt(move _18) -> [0: bb6, otherwise: bb7];
    }

    bb6: {
        StorageDead(_15);
        StorageDead(_18);
        StorageLive(_19);
        _19 = Offset(copy _16, const 1_usize);
        _8 = copy _19 as std::ptr::NonNull<T> (Transmute);
        StorageDead(_19);
        goto -> bb13;
    }

    bb7: {
        StorageDead(_15);
        StorageDead(_18);
        goto -> bb10;
    }

    bb8: {
        StorageLive(_20);
        _20 = copy _14 as usize (Transmute);
        switchInt(copy _20) -> [0: bb9, otherwise: bb12];
    }

    bb9: {
        StorageDead(_20);
        goto -> bb10;
    }

    bb10: {
        StorageDead(_14);
        StorageDead(_13);
        StorageDead(_16);
        StorageDead(_24);
        StorageDead(_27);
        StorageLive(_21);
        StorageLive(_23);
        _21 = discriminant(_22);
        _23 = Eq(copy _21, const 0_isize);
        assume(move _23);
        StorageDead(_23);
        StorageDead(_21);
        StorageDead(_30);
        StorageDead(_32);
        StorageDead(_12);
        drop(_2) -> [return: bb11, unwind unreachable];
    }

    bb11: {
        return;
    }

    bb12: {
        _24 = SubUnchecked(copy _20, const 1_usize);
        _11 = copy _24 as *const T (Transmute);
        StorageDead(_20);
        goto -> bb13;
    }

    bb13: {
        StorageLive(_26);
        StorageLive(_25);
        _25 = copy _13 as *const T (Transmute);
        _26 = &(*_25);
        StorageDead(_25);
        _27 = Option::<&T>::Some(copy _26);
        StorageDead(_26);
        StorageDead(_14);
        StorageDead(_13);
        StorageDead(_16);
        StorageDead(_24);
        _28 = copy ((_27 as Some).0: &T);
        StorageDead(_27);
        StorageLive(_29);
        _29 = copy _12;
        _30 = AddWithOverflow(copy _12, const 1_usize);
        assert(!move (_30.1: bool), "attempt to compute `{} + {}`, which would overflow", copy _12, const 1_usize) -> [success: bb14, unwind unreachable];
    }

    bb14: {
        _12 = move (_30.0: usize);
        StorageLive(_31);
        _31 = (copy _29, copy _28);
        _32 = Option::<(usize, &T)>::Some(move _31);
        StorageDead(_31);
        StorageDead(_29);
        StorageDead(_30);
        StorageLive(_33);
        _33 = copy (((_32 as Some).0: (usize, &T)).0: usize);
        StorageLive(_34);
        _34 = copy (((_32 as Some).0: (usize, &T)).1: &T);
        StorageLive(_35);
        _35 = &_2;
        StorageLive(_36);
        _36 = (copy _33, copy _34);
        _37 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _35, move _36) -> [return: bb15, unwind unreachable];
    }

    bb15: {
        StorageDead(_36);
        StorageDead(_35);
        StorageDead(_34);
        StorageDead(_33);
        StorageDead(_32);
        goto -> bb4;
    }
}
