@@ -4,28 +4,30 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
4
4
debug slice => _1;
5
5
debug f => _2;
6
6
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 _33 : std:: option:: Option < ( usize , & T ) > ;
11
+ let mut _36 : & impl Fn ( usize , & T ) ;
12
+ let mut _37 : ( usize , & T ) ;
13
+ let _38 : ( ) ;
14
14
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 _34: usize;
20
+ let _35: & T ;
18
21
scope 2 {
19
- debug i => _22 ;
20
- debug x => _23 ;
22
+ debug i => _34 ;
23
+ debug x => _35 ;
21
24
}
22
25
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 _31: ( usize , bool ) ;
28
+ let mut _32: ( usize , & T ) ;
27
29
scope 20 {
28
- let _18 : usize;
30
+ let _30 : usize;
29
31
scope 25 {
30
32
}
31
33
}
@@ -40,11 +42,58 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
40
42
}
41
43
}
42
44
scope 26 ( inlined <Option <& T > as Try >:: branch) {
43
- let mut _16 : isize ;
44
- let _17 : & T ;
45
+ let mut _28 : isize ;
46
+ let _29 : & T ;
45
47
scope 27 {
46
48
}
47
49
}
50
+ scope 29 ( inlined <std:: slice:: Iter <' _, T > as Iterator >:: next) {
51
+ let _14: std:: ptr:: NonNull < T > ;
52
+ let _16: std:: ptr:: NonNull < T > ;
53
+ let mut _19: bool ;
54
+ let mut _22: std:: ptr:: NonNull < T > ;
55
+ let mut _24: bool ;
56
+ let mut _25: * const u8 ;
57
+ let mut _26: * const T ;
58
+ scope 30 {
59
+ let _15: * const T ;
60
+ scope 31 {
61
+ let _23: * const u8;
62
+ scope 32 {
63
+ scope 33 ( inlined null:: < u8 > ) {
64
+ scope 34 ( inlined without_provenance :: < ( ) > ) {
65
+ scope 35 ( inlined without_provenance_mut :: < ( ) > ) {
66
+ }
67
+ }
68
+ scope 36 ( inlined std:: ptr:: from_raw_parts :: < u8 , ( ) > ) {
69
+ }
70
+ }
71
+ scope 37 ( inlined std:: ptr:: const_ptr:: < impl * const u8 > :: wrapping_sub) {
72
+ scope 38 ( inlined core:: num:: <impl isize >:: wrapping_neg) {
73
+ scope 39 ( inlined core:: num:: <impl isize >:: wrapping_sub) {
74
+ }
75
+ }
76
+ scope 40 ( inlined std:: ptr:: const_ptr:: < impl * const u8 > :: wrapping_offset) {
77
+ }
78
+ }
79
+ }
80
+ scope 41 ( inlined <NonNull <T > as PartialEq >:: eq) {
81
+ let mut _17: * mut T ;
82
+ let mut _18: * mut T ;
83
+ scope 42 ( inlined NonNull :: < T > :: as_ptr) {
84
+ }
85
+ scope 43 ( inlined NonNull :: < T > :: as_ptr) {
86
+ }
87
+ }
88
+ scope 44 ( inlined NonNull :: < T > :: add) {
89
+ let mut _20: * const T ;
90
+ let mut _21: * const T ;
91
+ scope 45 ( inlined NonNull :: < T > :: as_ptr) {
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
48
97
}
49
98
}
50
99
scope 3 ( inlined core:: slice:: < impl [ T ] > :: iter) {
@@ -89,9 +138,7 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
89
138
}
90
139
91
140
bb0 : {
92
- StorageLive ( _11) ;
93
141
StorageLive ( _3) ;
94
- StorageLive ( _6) ;
95
142
StorageLive ( _4) ;
96
143
_3 = PtrMetadata ( copy _1) ;
97
144
_4 = & raw const ( * _1) ;
@@ -120,86 +167,162 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
120
167
}
121
168
122
169
bb3: {
123
- StorageLive ( _10) ;
124
170
_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) ;
127
171
StorageDead ( _9) ;
128
172
StorageDead ( _4) ;
129
- StorageDead ( _6) ;
130
173
StorageDead ( _3) ;
131
- _12 = Enumerate :: < std :: slice :: Iter < ' _ , T > > { iter : copy _11, count : const 0_usize } ;
132
- StorageDead ( _11 ) ;
174
+ StorageLive ( _11) ;
175
+ StorageLive ( _12 ) ;
133
176
StorageLive ( _13) ;
134
- _13 = copy _12;
177
+ _11 = copy _6;
178
+ _12 = copy _10;
179
+ _13 = const 0_usize ;
135
180
goto -> bb4;
136
181
}
137
182
138
183
bb4 : {
139
- StorageLive ( _21 ) ;
140
- StorageLive ( _18 ) ;
141
- StorageLive ( _19 ) ;
142
- StorageLive ( _15 ) ;
184
+ StorageLive ( _33 ) ;
185
+ StorageLive ( _30 ) ;
186
+ StorageLive ( _31 ) ;
187
+ StorageLive ( _27 ) ;
143
188
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] ;
189
+ StorageLive ( _15) ;
190
+ StorageLive ( _23) ;
191
+ StorageLive ( _16) ;
192
+ _14 = copy _11;
193
+ _15 = copy _12;
194
+ switchInt ( const <T as std:: mem:: SizedTypeProperties >:: IS_ZST ) -> [ 0 : bb5, otherwise: bb8] ;
146
195
}
147
196
148
197
bb5 : {
149
- StorageDead ( _14) ;
150
- StorageLive ( _16) ;
151
- _16 = discriminant ( _15) ;
152
- switchInt ( move _16) -> [ 0 : bb6, 1 : bb8, otherwise: bb11] ;
198
+ StorageLive ( _19) ;
199
+ _16 = copy _15 as std:: ptr:: NonNull < T > ( Transmute ) ;
200
+ StorageLive ( _17) ;
201
+ _17 = copy _14 as * mut T ( Transmute ) ;
202
+ StorageLive ( _18) ;
203
+ _18 = copy _16 as * mut T ( Transmute ) ;
204
+ _19 = Eq ( move _17, move _18) ;
205
+ StorageDead ( _18) ;
206
+ StorageDead ( _17) ;
207
+ switchInt ( move _19) -> [ 0 : bb6, otherwise: bb7] ;
153
208
}
154
209
155
210
bb6 : {
156
- StorageDead ( _16) ;
157
- StorageDead ( _15) ;
158
211
StorageDead ( _19) ;
159
- StorageDead ( _18) ;
212
+ StorageLive ( _22) ;
213
+ StorageLive ( _21) ;
214
+ StorageLive ( _20) ;
215
+ _20 = copy _14 as * const T ( Transmute ) ;
216
+ _21 = Offset ( move _20, const 1_usize ) ;
217
+ StorageDead ( _20) ;
218
+ _22 = NonNull :: < T > { pointer : move _21 } ;
160
219
StorageDead ( _21) ;
161
- StorageDead ( _13) ;
162
- drop ( _2) -> [ return : bb7, unwind unreachable] ;
220
+ _11 = move _22;
221
+ StorageDead ( _22) ;
222
+ goto -> bb11;
163
223
}
164
224
165
225
bb7 : {
166
- return;
226
+ StorageDead ( _19) ;
227
+ StorageDead ( _16) ;
228
+ StorageDead ( _23) ;
229
+ StorageDead ( _15) ;
230
+ StorageDead ( _14) ;
231
+ StorageLive ( _28) ;
232
+ goto -> bb17;
167
233
}
168
234
169
235
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] ;
236
+ _23 = copy _15 as * const u8 ( PtrToPtr ) ;
237
+ StorageLive ( _24) ;
238
+ _24 = Eq ( copy _23, const { 0x0 as * const u8 } ) ;
239
+ switchInt ( move _24) -> [ 0 : bb9, otherwise: bb16] ;
176
240
}
177
241
178
242
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;
243
+ StorageDead ( _24) ;
190
244
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
+ _25 = arith_offset :: < u8 > ( move _23, const -1_isize ) -> [ return : bb10, unwind unreachable] ;
193
246
}
194
247
195
248
bb10: {
249
+ _26 = move _25 as * const T ( PtrToPtr ) ;
196
250
StorageDead ( _25) ;
197
- StorageDead ( _24) ;
198
- StorageDead ( _21) ;
199
- goto -> bb4;
251
+ _12 = copy _26;
252
+ goto -> bb11;
200
253
}
201
254
202
255
bb11: {
256
+ _27 = copy _14 as std:: option:: Option < & T > ( Transmute ) ;
257
+ StorageDead ( _16) ;
258
+ StorageDead ( _23) ;
259
+ StorageDead ( _15) ;
260
+ StorageDead ( _14) ;
261
+ StorageLive ( _28) ;
262
+ _28 = discriminant ( _27) ;
263
+ switchInt ( move _28) -> [ 0 : bb17, 1 : bb12, otherwise: bb15] ;
264
+ }
265
+
266
+ bb12: {
267
+ _29 = move ( ( _27 as Some ) . 0 : & T ) ;
268
+ StorageDead ( _28) ;
269
+ StorageDead ( _27) ;
270
+ _30 = copy _13;
271
+ _31 = AddWithOverflow ( copy _13, const 1_usize ) ;
272
+ assert ( !move ( _31. 1 : bool ) , "attempt to compute `{} + {}`, which would overflow" , copy _13, const 1_usize ) -> [ success: bb13, unwind unreachable] ;
273
+ }
274
+
275
+ bb13: {
276
+ _13 = move ( _31. 0 : usize) ;
277
+ StorageLive ( _32) ;
278
+ _32 = ( copy _30, copy _29) ;
279
+ _33 = Option :: < ( usize , & T ) > :: Some ( move _32) ;
280
+ StorageDead ( _32) ;
281
+ StorageDead ( _31) ;
282
+ StorageDead ( _30) ;
283
+ _34 = copy ( ( ( _33 as Some ) . 0 : ( usize, & T ) ) . 0 : usize ) ;
284
+ _35 = copy ( ( ( _33 as Some ) . 0 : ( usize, & T ) ) . 1 : & T ) ;
285
+ StorageLive ( _36) ;
286
+ _36 = & _2;
287
+ StorageLive ( _37) ;
288
+ _37 = ( copy _34, copy _35) ;
289
+ _38 = <impl Fn ( usize , & T ) as Fn < ( usize , & T ) > >:: call ( move _36, move _37) -> [ return : bb14, unwind unreachable] ;
290
+ }
291
+
292
+ bb14 : {
293
+ StorageDead ( _37) ;
294
+ StorageDead ( _36) ;
295
+ StorageDead ( _33) ;
296
+ goto -> bb4;
297
+ }
298
+
299
+ bb15 : {
203
300
unreachable;
204
301
}
302
+
303
+ bb16 : {
304
+ StorageDead ( _24) ;
305
+ StorageDead ( _16) ;
306
+ StorageDead ( _23) ;
307
+ StorageDead ( _15) ;
308
+ StorageDead ( _14) ;
309
+ StorageLive ( _28) ;
310
+ goto -> bb17;
311
+ }
312
+
313
+ bb17: {
314
+ StorageDead ( _28) ;
315
+ StorageDead ( _27) ;
316
+ StorageDead ( _31) ;
317
+ StorageDead ( _30) ;
318
+ StorageDead ( _33) ;
319
+ StorageDead ( _11) ;
320
+ StorageDead ( _12) ;
321
+ StorageDead ( _13) ;
322
+ drop ( _2) -> [ return : bb18, unwind unreachable] ;
323
+ }
324
+
325
+ bb18: {
326
+ return ;
327
+ }
205
328
}
0 commit comments