@@ -4,28 +4,30 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
44    debug slice => _1; 
55    debug f => _2; 
66    let mut _0 : (); 
7-     let mut _11 : std::slice::Iter<'_,  T>; 
8-     let mut _12 : std::iter::Enumerate<std::slice::Iter<'_, T>> ;
9-     let mut _13 : std::iter::Enumerate<std::slice::Iter<'_, T>> ;
10-     let mut _21  : std::option::Option<(usize, &T)>; 
11-     let mut _24  : &impl Fn(usize, &T); 
12-     let mut _25  : (usize, &T); 
13-     let _26  : (); 
7+     let mut _11 : std::ptr::NonNull< T>; 
8+     let mut _12 : *const T ;
9+     let mut _13 : usize ;
10+     let mut _32  : std::option::Option<(usize, &T)>; 
11+     let mut _35  : &impl Fn(usize, &T); 
12+     let mut _36  : (usize, &T); 
13+     let _37  : (); 
1414    scope 1 { 
15-         debug iter => _13; 
16-         let _22 : usize; 
17-         let _23 : &T; 
15+         debug (((iter : Enumerate<std::slice::Iter<'_, T>>).0: std::slice::Iter<'_, T>).0: std::ptr::NonNull<T>) => _11; 
16+         debug (((iter : Enumerate<std::slice::Iter<'_, T>>).0: std::slice::Iter<'_, T>).1: *const T) => _12; 
17+         debug (((iter : Enumerate<std::slice::Iter<'_, T>>).0: std::slice::Iter<'_, T>).2: std::marker::PhantomData<&T>) => const ZeroSized: PhantomData<&T>; 
18+         debug ((iter : Enumerate<std::slice::Iter<'_, T>>).1: usize) => _13; 
19+         let _33 : usize; 
20+         let _34 : &T; 
1821        scope 2 { 
19-             debug i => _22 ; 
20-             debug x => _23 ; 
22+             debug i => _33 ; 
23+             debug x => _34 ; 
2124        } 
2225        scope 19 (inlined <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next) { 
23-             let mut _14 : &mut std::slice::Iter<'_, T>; 
24-             let mut _15 : std::option::Option<&T>; 
25-             let mut _19 : (usize, bool); 
26-             let mut _20 : (usize, &T); 
26+             let mut _27 : std::option::Option<&T>; 
27+             let mut _30 : (usize, bool); 
28+             let mut _31 : (usize, &T); 
2729            scope 20 { 
28-                 let _18  : usize; 
30+                 let _29  : usize; 
2931                scope 25 { 
3032                } 
3133            } 
@@ -40,11 +42,59 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
4042                } 
4143            } 
4244            scope 26 (inlined <Option<&T> as Try>::branch) { 
43-                 let mut _16 : isize; 
44-                 let _17 : &T; 
45+                 let _28 : &T; 
4546                scope 27 { 
4647                } 
4748            } 
49+             scope 29 (inlined <std::slice::Iter<'_, T> as Iterator>::next) { 
50+                 let _14 : std::ptr::NonNull<T>; 
51+                 let _16 : std::ptr::NonNull<T>; 
52+                 let mut _19 : bool; 
53+                 let mut _22 : std::ptr::NonNull<T>; 
54+                 let mut _24 : usize; 
55+                 let _26 : &T; 
56+                 scope 30 { 
57+                     let _15 : *const T; 
58+                     scope 31 { 
59+                         let _23 : usize; 
60+                         scope 32 { 
61+                             scope 35 (inlined core::num::<impl usize>::unchecked_sub) { 
62+                                 scope 36 (inlined core::ub_checks::check_language_ub) { 
63+                                     scope 37 (inlined core::ub_checks::check_language_ub::runtime) { 
64+                                     } 
65+                                 } 
66+                             } 
67+                             scope 38 (inlined without_provenance_mut::<T>) { 
68+                             } 
69+                         } 
70+                         scope 33 (inlined std::ptr::const_ptr::<impl *const T>::addr) { 
71+                             scope 34 (inlined std::ptr::const_ptr::<impl *const T>::cast::<()>) { 
72+                             } 
73+                         } 
74+                         scope 39 (inlined <NonNull<T> as PartialEq>::eq) { 
75+                             let mut _17 : *mut T; 
76+                             let mut _18 : *mut T; 
77+                             scope 40 (inlined NonNull::<T>::as_ptr) { 
78+                             } 
79+                             scope 41 (inlined NonNull::<T>::as_ptr) { 
80+                             } 
81+                         } 
82+                         scope 42 (inlined NonNull::<T>::add) { 
83+                             let mut _20 : *const T; 
84+                             let mut _21 : *const T; 
85+                             scope 43 (inlined NonNull::<T>::as_ptr) { 
86+                             } 
87+                         } 
88+                         scope 44 (inlined NonNull::<T>::as_ref::<'_>) { 
89+                             let _25 : *const T; 
90+                             scope 45 (inlined NonNull::<T>::as_ptr) { 
91+                             } 
92+                             scope 46 (inlined std::ptr::mut_ptr::<impl *mut T>::cast_const) { 
93+                             } 
94+                         } 
95+                     } 
96+                 } 
97+             } 
4898        } 
4999    } 
50100    scope 3 (inlined core::slice::<impl [T]>::iter) { 
@@ -89,9 +139,7 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
89139    } 
90140
91141    bb0 : { 
92-         StorageLive(_11); 
93142        StorageLive(_3); 
94-         StorageLive(_6); 
95143        StorageLive(_4); 
96144        _3 = PtrMetadata(copy _1); 
97145        _4 = &raw const (*_1); 
@@ -120,86 +168,150 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
120168    } 
121169
122170    bb3 : { 
123-         StorageLive(_10); 
124171        _10 = copy _9; 
125-         _11 = std::slice::Iter::<'_, T> { ptr : copy _6, end_or_len: move _10, _marker: const ZeroSized: PhantomData<&T> }; 
126-         StorageDead(_10); 
127172        StorageDead(_9); 
128173        StorageDead(_4); 
129-         StorageDead(_6); 
130174        StorageDead(_3); 
131-         _12 = Enumerate::<std::slice::Iter<'_, T>> { iter :  copy  _11, count: const 0_usize } ;
132-         StorageDead(_11 );
175+         StorageLive( _11) ;
176+         StorageLive(_12 );
133177        StorageLive(_13); 
134-         _13 = copy _12; 
178+         _11 = copy _6; 
179+         _12 = copy _10; 
180+         _13 = const 0_usize; 
135181        goto -> bb4; 
136182    } 
137183
138184    bb4 : { 
139-         StorageLive(_21 ); 
140-         StorageLive(_18 ); 
141-         StorageLive(_19 ); 
142-         StorageLive(_15 ); 
185+         StorageLive(_32 ); 
186+         StorageLive(_29 ); 
187+         StorageLive(_30 ); 
188+         StorageLive(_27 ); 
143189        StorageLive(_14); 
144-         _14 = &mut (_13.0 : std::slice::Iter<'_, T>); 
145-         _15 = <std::slice::Iter<'_, T> as Iterator>::next(move _14) -> [return : bb5, unwind unreachable]; 
190+         StorageLive(_15); 
191+         StorageLive(_23); 
192+         StorageLive(_24); 
193+         StorageLive(_16); 
194+         StorageLive(_26); 
195+         _14 = copy _11; 
196+         _15 = copy _12; 
197+         switchInt(const <T as std::mem::SizedTypeProperties>::IS_ZST) -> [0 : bb5, otherwise: bb8]; 
146198    } 
147199
148200    bb5 : { 
149-         StorageDead(_14); 
150-         StorageLive(_16); 
151-         _16 = discriminant(_15); 
152-         switchInt(move _16) -> [0 : bb6, 1: bb8, otherwise: bb11]; 
201+         StorageLive(_19); 
202+         _16 = copy _15 as std::ptr::NonNull<T> (Transmute); 
203+         StorageLive(_17); 
204+         _17 = copy _14 as *mut T (Transmute); 
205+         StorageLive(_18); 
206+         _18 = copy _16 as *mut T (Transmute); 
207+         _19 = Eq(move _17, move _18); 
208+         StorageDead(_18); 
209+         StorageDead(_17); 
210+         switchInt(move _19) -> [0 : bb6, otherwise: bb7]; 
153211    } 
154212
155213    bb6 : { 
156-         StorageDead(_16); 
157-         StorageDead(_15); 
158214        StorageDead(_19); 
159-         StorageDead(_18); 
215+         StorageLive(_22); 
216+         StorageLive(_21); 
217+         StorageLive(_20); 
218+         _20 = copy _14 as *const T (Transmute); 
219+         _21 = Offset(move _20, const 1_usize); 
220+         StorageDead(_20); 
221+         _22 = NonNull::<T> { pointer : move _21 }; 
160222        StorageDead(_21); 
161-         StorageDead(_13); 
162-         drop(_2) -> [return : bb7, unwind unreachable]; 
223+         _11 = move _22; 
224+         StorageDead(_22); 
225+         goto -> bb13; 
163226    } 
164227
165228    bb7 : { 
166-         return; 
229+         StorageDead(_19); 
230+         StorageDead(_26); 
231+         StorageDead(_16); 
232+         StorageDead(_24); 
233+         StorageDead(_23); 
234+         StorageDead(_15); 
235+         StorageDead(_14); 
236+         goto -> bb10; 
167237    } 
168238
169239    bb8 : { 
170-         _17 = move ((_15 as Some).0 : &T); 
171-         StorageDead(_16); 
172-         StorageDead(_15); 
173-         _18 = copy (_13.1 : usize); 
174-         _19 = AddWithOverflow(copy (_13.1 : usize), const 1_usize); 
175-         assert(!move (_19.1 : bool), "attempt to compute `{} + {}`, which would overflow", copy (_13.1: usize), const 1_usize) -> [success: bb9, unwind unreachable]; 
240+         _23 = copy _15 as usize (Transmute); 
241+         switchInt(copy _23) -> [0 : bb9, otherwise: bb12]; 
176242    } 
177243
178244    bb9 : { 
179-         (_13.1 : usize) = move (_19.0: usize); 
180-         StorageLive(_20); 
181-         _20 = (copy _18, copy _17); 
182-         _21 = Option::<(usize, &T)>::Some(move _20); 
183-         StorageDead(_20); 
184-         StorageDead(_19); 
185-         StorageDead(_18); 
186-         _22 = copy (((_21 as Some).0 : (usize, &T)).0: usize); 
187-         _23 = copy (((_21 as Some).0 : (usize, &T)).1: &T); 
188-         StorageLive(_24); 
189-         _24 = &_2; 
190-         StorageLive(_25); 
191-         _25 = (copy _22, copy _23); 
192-         _26 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _24, move _25) -> [return : bb10, unwind unreachable]; 
245+         StorageDead(_26); 
246+         StorageDead(_16); 
247+         StorageDead(_24); 
248+         StorageDead(_23); 
249+         StorageDead(_15); 
250+         StorageDead(_14); 
251+         goto -> bb10; 
193252    } 
194253
195254    bb10 : { 
255+         StorageDead(_27); 
256+         StorageDead(_30); 
257+         StorageDead(_29); 
258+         StorageDead(_32); 
259+         StorageDead(_11); 
260+         StorageDead(_12); 
261+         StorageDead(_13); 
262+         drop(_2) -> [return : bb11, unwind unreachable]; 
263+     } 
264+ 
265+     bb11 : { 
266+         return; 
267+     } 
268+ 
269+     bb12 : { 
270+         _24 = SubUnchecked(copy _23, const 1_usize); 
271+         _12 = copy _24 as *const T (Transmute); 
272+         goto -> bb13; 
273+     } 
274+ 
275+     bb13 : { 
276+         StorageLive(_25); 
277+         _25 = copy _14 as *const T (Transmute); 
278+         _26 = &(*_25); 
196279        StorageDead(_25); 
280+         _27 = Option::<&T>::Some(copy _26); 
281+         StorageDead(_26); 
282+         StorageDead(_16); 
197283        StorageDead(_24); 
198-         StorageDead(_21); 
199-         goto -> bb4; 
284+         StorageDead(_23); 
285+         StorageDead(_15); 
286+         StorageDead(_14); 
287+         _28 = move ((_27 as Some).0 : &T); 
288+         StorageDead(_27); 
289+         _29 = copy _13; 
290+         _30 = AddWithOverflow(copy _13, const 1_usize); 
291+         assert(!move (_30.1 : bool), "attempt to compute `{} + {}`, which would overflow", copy _13, const 1_usize) -> [success: bb14, unwind unreachable]; 
200292    } 
201293
202-     bb11 : { 
203-         unreachable; 
294+     bb14 : { 
295+         _13 = move (_30.0 : usize); 
296+         StorageLive(_31); 
297+         _31 = (copy _29, copy _28); 
298+         _32 = Option::<(usize, &T)>::Some(move _31); 
299+         StorageDead(_31); 
300+         StorageDead(_30); 
301+         StorageDead(_29); 
302+         _33 = copy (((_32 as Some).0 : (usize, &T)).0: usize); 
303+         _34 = copy (((_32 as Some).0 : (usize, &T)).1: &T); 
304+         StorageLive(_35); 
305+         _35 = &_2; 
306+         StorageLive(_36); 
307+         _36 = (copy _33, copy _34); 
308+         _37 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _35, move _36) -> [return : bb15, unwind unreachable]; 
309+     } 
310+ 
311+     bb15 : { 
312+         StorageDead(_36); 
313+         StorageDead(_35); 
314+         StorageDead(_32); 
315+         goto -> bb4; 
204316    } 
205317} 
0 commit comments