// MIR for `mapped` after PreCodegen fn mapped(_1: impl Iterator, _2: impl Fn(T) -> U) -> () { debug iter => _1; debug f => _2; let mut _0: (); let mut _3: std::iter::Map, impl Fn(T) -> U>; let mut _4: std::iter::Map, impl Fn(T) -> U>; let mut _5: &mut std::iter::Map, impl Fn(T) -> U>; let mut _13: std::option::Option; let _15: (); scope 1 { debug iter => _4; let _14: U; scope 2 { debug x => _14; } scope 4 (inlined , impl Fn(T) -> U> as Iterator>::next) { debug self => _5; let mut _6: &mut impl Iterator; let mut _7: std::option::Option; let mut _8: &mut impl Fn(T) -> U; scope 5 (inlined Option::::map:: U>) { debug self => _7; debug f => _8; let mut _9: isize; let _10: T; let mut _11: (T,); let mut _12: U; scope 6 { debug x => _10; } } } } scope 3 (inlined , impl Fn(T) -> U> as IntoIterator>::into_iter) { debug self => _3; } bb0: { _3 = as Iterator>::map:: U>(move _1, move _2) -> [return: bb1, unwind continue]; } bb1: { StorageLive(_4); _4 = copy _3; goto -> bb2; } bb2: { StorageLive(_13); _5 = &mut _4; StorageLive(_8); StorageLive(_7); StorageLive(_6); _6 = &mut (_4.0: impl Iterator); _7 = as Iterator>::next(move _6) -> [return: bb3, unwind: bb10]; } bb3: { StorageDead(_6); _8 = &mut (_4.1: impl Fn(T) -> U); StorageLive(_9); StorageLive(_10); _9 = discriminant(_7); switchInt(move _9) -> [0: bb4, 1: bb6, otherwise: bb9]; } bb4: { StorageDead(_10); StorageDead(_9); StorageDead(_7); StorageDead(_8); StorageDead(_13); drop(_4) -> [return: bb5, unwind continue]; } bb5: { StorageDead(_4); return; } bb6: { _10 = move ((_7 as Some).0: T); StorageLive(_12); StorageLive(_11); _11 = (copy _10,); _12 = <&mut impl Fn(T) -> U as FnOnce<(T,)>>::call_once(move _8, move _11) -> [return: bb7, unwind: bb10]; } bb7: { StorageDead(_11); _13 = Option::::Some(move _12); StorageDead(_12); StorageDead(_10); StorageDead(_9); StorageDead(_7); StorageDead(_8); _14 = move ((_13 as Some).0: U); _15 = opaque::(move _14) -> [return: bb8, unwind: bb10]; } bb8: { StorageDead(_13); goto -> bb2; } bb9: { unreachable; } bb10 (cleanup): { drop(_4) -> [return: bb11, unwind terminate(cleanup)]; } bb11 (cleanup): { resume; } }