72
72
//! This is handled by the [`InPlaceDrop`] guard for sink items (`U`) and by
73
73
//! [`vec::IntoIter::forget_allocation_drop_remaining()`] for remaining source items (`T`).
74
74
//!
75
- //! If dropping any remaining source item (`T`) panics then [`InPlaceDstBufDrop `] will handle dropping
75
+ //! If dropping any remaining source item (`T`) panics then [`InPlaceDstDataSrcBufDrop `] will handle dropping
76
76
//! the already collected sink items (`U`) and freeing the allocation.
77
77
//!
78
78
//! [`vec::IntoIter::forget_allocation_drop_remaining()`]: super::IntoIter::forget_allocation_drop_remaining()
@@ -158,11 +158,12 @@ use crate::alloc::{handle_alloc_error, Global};
158
158
use core:: alloc:: Allocator ;
159
159
use core:: alloc:: Layout ;
160
160
use core:: iter:: { InPlaceIterable , SourceIter , TrustedRandomAccessNoCoerce } ;
161
+ use core:: marker:: PhantomData ;
161
162
use core:: mem:: { self , ManuallyDrop , SizedTypeProperties } ;
162
163
use core:: num:: NonZeroUsize ;
163
164
use core:: ptr:: { self , NonNull } ;
164
165
165
- use super :: { InPlaceDrop , InPlaceDstBufDrop , SpecFromIter , SpecFromIterNested , Vec } ;
166
+ use super :: { InPlaceDrop , InPlaceDstDataSrcBufDrop , SpecFromIter , SpecFromIterNested , Vec } ;
166
167
167
168
const fn in_place_collectible < DEST , SRC > (
168
169
step_merge : Option < NonZeroUsize > ,
@@ -262,7 +263,7 @@ where
262
263
) ;
263
264
}
264
265
265
- // The ownership of the allocation and the new `T` values is temporarily moved into `dst_guard`.
266
+ // The ownership of the source allocation and the new `T` values is temporarily moved into `dst_guard`.
266
267
// This is safe because
267
268
// * `forget_allocation_drop_remaining` immediately forgets the allocation
268
269
// before any panic can occur in order to avoid any double free, and then proceeds to drop
@@ -273,7 +274,8 @@ where
273
274
// Note: This access to the source wouldn't be allowed by the TrustedRandomIteratorNoCoerce
274
275
// contract (used by SpecInPlaceCollect below). But see the "O(1) collect" section in the
275
276
// module documentation why this is ok anyway.
276
- let dst_guard = InPlaceDstBufDrop { ptr : dst_buf, len, cap : dst_cap } ;
277
+ let dst_guard =
278
+ InPlaceDstDataSrcBufDrop { ptr : dst_buf, len, src_cap, src : PhantomData :: < I :: Src > } ;
277
279
src. forget_allocation_drop_remaining ( ) ;
278
280
279
281
// Adjust the allocation if the alignment didn't match or the source had a capacity in bytes
0 commit comments