@@ -7,19 +7,90 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
7
7
let mut _11 : std::slice::Iter<'_, T>;
8
8
let mut _12 : std::iter::Rev<std::slice::Iter<'_, T>>;
9
9
let mut _13 : std::iter::Rev<std::slice::Iter<'_, T>>;
10
- let mut _15 : std::option::Option<&T>;
11
- let mut _16 : isize;
12
- let mut _18 : &impl Fn(&T);
13
- let mut _19 : (&T,);
14
- let _20 : ();
10
+ let mut _37 : std::option::Option<&T>;
11
+ let mut _39 : &impl Fn(&T);
12
+ let mut _40 : (&T,);
13
+ let _41 : ();
15
14
scope 1 {
16
15
debug iter => _13;
17
- let _17 : &T;
16
+ let _38 : &T;
18
17
scope 2 {
19
- debug x => _17 ;
18
+ debug x => _38 ;
20
19
}
21
20
scope 17 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
22
- let mut _14 : &mut std::slice::Iter<'_, T>;
21
+ scope 18 (inlined <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back) {
22
+ let mut _14 : *const *const T;
23
+ let mut _15 : *const std::ptr::NonNull<T>;
24
+ let mut _20 : bool;
25
+ let mut _21 : *const T;
26
+ let _36 : &T;
27
+ scope 19 {
28
+ let _16 : std::ptr::NonNull<T>;
29
+ let _22 : usize;
30
+ scope 20 {
31
+ }
32
+ scope 21 {
33
+ scope 25 (inlined <NonNull<T> as PartialEq>::eq) {
34
+ let mut _17 : std::ptr::NonNull<T>;
35
+ scope 26 (inlined NonNull::<T>::as_ptr) {
36
+ let mut _18 : *const T;
37
+ }
38
+ scope 27 (inlined NonNull::<T>::as_ptr) {
39
+ let mut _19 : *const T;
40
+ }
41
+ }
42
+ }
43
+ scope 22 (inlined std::ptr::const_ptr::<impl *const T>::addr) {
44
+ scope 23 (inlined std::ptr::const_ptr::<impl *const T>::cast::<()>) {
45
+ }
46
+ }
47
+ scope 24 (inlined std::ptr::const_ptr::<impl *const *const T>::cast::<NonNull<T>>) {
48
+ }
49
+ }
50
+ scope 28 (inlined std::slice::Iter::<'_, T>::next_back_unchecked) {
51
+ let _29 : std::ptr::NonNull<T>;
52
+ scope 29 (inlined std::slice::Iter::<'_, T>::pre_dec_end) {
53
+ let mut _23 : *mut *const T;
54
+ let mut _24 : *mut std::ptr::NonNull<T>;
55
+ let mut _25 : std::ptr::NonNull<T>;
56
+ let mut _28 : std::ptr::NonNull<T>;
57
+ let mut _30 : *mut *const T;
58
+ let mut _31 : *mut usize;
59
+ let mut _32 : usize;
60
+ let mut _33 : usize;
61
+ scope 30 {
62
+ scope 31 {
63
+ }
64
+ scope 32 {
65
+ scope 35 (inlined NonNull::<T>::sub) {
66
+ scope 36 (inlined core::num::<impl isize>::unchecked_neg) {
67
+ scope 37 (inlined core::ub_checks::check_language_ub) {
68
+ scope 38 (inlined core::ub_checks::check_language_ub::runtime) {
69
+ }
70
+ }
71
+ }
72
+ scope 39 (inlined NonNull::<T>::offset) {
73
+ let mut _26 : *const T;
74
+ let mut _27 : *const T;
75
+ }
76
+ }
77
+ }
78
+ scope 33 (inlined std::ptr::mut_ptr::<impl *mut *const T>::cast::<usize>) {
79
+ }
80
+ scope 34 (inlined std::ptr::mut_ptr::<impl *mut *const T>::cast::<NonNull<T>>) {
81
+ }
82
+ }
83
+ }
84
+ scope 40 (inlined NonNull::<T>::as_ref::<'_>) {
85
+ let mut _34 : std::ptr::NonNull<T>;
86
+ scope 41 (inlined NonNull::<T>::as_ptr) {
87
+ let mut _35 : *const T;
88
+ }
89
+ scope 42 (inlined std::ptr::mut_ptr::<impl *mut T>::cast_const) {
90
+ }
91
+ }
92
+ }
93
+ }
23
94
}
24
95
}
25
96
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -107,45 +178,147 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
107
178
}
108
179
109
180
bb4 : {
110
- StorageLive(_15);
111
- StorageLive(_14);
112
- _14 = &mut (_13.0 : std::slice::Iter<'_, T>);
113
- _15 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _14) -> [return : bb5, unwind unreachable];
181
+ StorageLive(_37);
182
+ StorageLive(_22);
183
+ StorageLive(_21);
184
+ StorageLive(_16);
185
+ StorageLive(_36);
186
+ StorageLive(_20);
187
+ switchInt(const <T as std::mem::SizedTypeProperties>::IS_ZST) -> [0 : bb5, otherwise: bb6];
114
188
}
115
189
116
190
bb5 : {
191
+ StorageLive(_15);
192
+ StorageLive(_14);
193
+ _14 = &raw const ((_13.0 : std::slice::Iter<'_, T>).1: *const T);
194
+ _15 = _14 as *const std::ptr::NonNull<T> (PtrToPtr);
117
195
StorageDead(_14);
118
- _16 = discriminant(_15);
119
- switchInt(move _16) -> [0 : bb6, 1: bb8, otherwise: bb10];
196
+ _16 = (*_15);
197
+ StorageDead(_15);
198
+ StorageLive(_18);
199
+ StorageLive(_19);
200
+ StorageLive(_17);
201
+ _17 = ((_13.0 : std::slice::Iter<'_, T>).0: std::ptr::NonNull<T>);
202
+ _18 = (_17.0 : *const T);
203
+ StorageDead(_17);
204
+ _19 = (_16.0 : *const T);
205
+ _20 = Eq(_18, _19);
206
+ StorageDead(_19);
207
+ StorageDead(_18);
208
+ goto -> bb7;
120
209
}
121
210
122
211
bb6 : {
123
- StorageDead(_15);
124
- StorageDead(_13);
125
- drop(_2) -> [return : bb7, unwind unreachable];
212
+ _21 = ((_13.0 : std::slice::Iter<'_, T>).1: *const T);
213
+ _22 = _21 as usize (Transmute);
214
+ _20 = Eq(_22, const 0_usize);
215
+ goto -> bb7;
126
216
}
127
217
128
218
bb7 : {
129
- return ;
219
+ switchInt(move _20) -> [0 : bb8, otherwise: bb16] ;
130
220
}
131
221
132
222
bb8 : {
133
- _17 = ((_15 as Some).0 : &T);
134
- StorageLive(_18);
135
- _18 = &_2;
136
- StorageLive(_19);
137
- _19 = (_17,);
138
- _20 = <impl Fn(&T) as Fn<(&T,)>>::call(move _18, move _19) -> [return : bb9, unwind unreachable];
223
+ StorageLive(_35);
224
+ StorageLive(_29);
225
+ StorageLive(_31);
226
+ StorageLive(_24);
227
+ switchInt(const <T as std::mem::SizedTypeProperties>::IS_ZST) -> [0 : bb9, otherwise: bb13];
139
228
}
140
229
141
230
bb9 : {
142
- StorageDead(_19);
143
- StorageDead(_18);
144
- StorageDead(_15);
145
- goto -> bb4;
231
+ StorageLive(_23);
232
+ _23 = &raw mut ((_13.0 : std::slice::Iter<'_, T>).1: *const T);
233
+ _24 = _23 as *mut std::ptr::NonNull<T> (PtrToPtr);
234
+ StorageDead(_23);
235
+ StorageLive(_28);
236
+ _25 = (*_24);
237
+ switchInt(const <T as std::mem::SizedTypeProperties>::IS_ZST) -> [0 : bb10, otherwise: bb11];
146
238
}
147
239
148
240
bb10 : {
149
- unreachable;
241
+ StorageLive(_27);
242
+ StorageLive(_26);
243
+ _26 = (_25.0 : *const T);
244
+ _27 = Offset(move _26, const -1_isize);
245
+ StorageDead(_26);
246
+ _28 = NonNull::<T> { pointer : move _27 };
247
+ StorageDead(_27);
248
+ goto -> bb12;
249
+ }
250
+
251
+ bb11 : {
252
+ _28 = _25;
253
+ goto -> bb12;
254
+ }
255
+
256
+ bb12 : {
257
+ (*_24) = move _28;
258
+ StorageDead(_28);
259
+ _29 = (*_24);
260
+ goto -> bb14;
261
+ }
262
+
263
+ bb13 : {
264
+ StorageLive(_30);
265
+ _30 = &raw mut ((_13.0 : std::slice::Iter<'_, T>).1: *const T);
266
+ _31 = _30 as *mut usize (PtrToPtr);
267
+ StorageDead(_30);
268
+ StorageLive(_33);
269
+ StorageLive(_32);
270
+ _32 = (*_31);
271
+ _33 = SubUnchecked(move _32, const 1_usize);
272
+ StorageDead(_32);
273
+ (*_31) = move _33;
274
+ StorageDead(_33);
275
+ _29 = ((_13.0 : std::slice::Iter<'_, T>).0: std::ptr::NonNull<T>);
276
+ goto -> bb14;
277
+ }
278
+
279
+ bb14 : {
280
+ StorageDead(_24);
281
+ StorageDead(_31);
282
+ StorageLive(_34);
283
+ _34 = _29;
284
+ _35 = (_34.0 : *const T);
285
+ StorageDead(_34);
286
+ _36 = &(*_35);
287
+ StorageDead(_29);
288
+ StorageDead(_35);
289
+ _37 = Option::<&T>::Some(_36);
290
+ StorageDead(_20);
291
+ StorageDead(_36);
292
+ StorageDead(_16);
293
+ StorageDead(_21);
294
+ StorageDead(_22);
295
+ _38 = ((_37 as Some).0 : &T);
296
+ StorageLive(_39);
297
+ _39 = &_2;
298
+ StorageLive(_40);
299
+ _40 = (_38,);
300
+ _41 = <impl Fn(&T) as Fn<(&T,)>>::call(move _39, move _40) -> [return : bb15, unwind unreachable];
301
+ }
302
+
303
+ bb15 : {
304
+ StorageDead(_40);
305
+ StorageDead(_39);
306
+ StorageDead(_37);
307
+ goto -> bb4;
308
+ }
309
+
310
+ bb16 : {
311
+ StorageDead(_20);
312
+ StorageDead(_36);
313
+ StorageDead(_16);
314
+ StorageDead(_21);
315
+ StorageDead(_22);
316
+ StorageDead(_37);
317
+ StorageDead(_13);
318
+ drop(_2) -> [return : bb17, unwind unreachable];
319
+ }
320
+
321
+ bb17 : {
322
+ return;
150
323
}
151
324
}
0 commit comments