File tree Expand file tree Collapse file tree 1 file changed +4
-6
lines changed Expand file tree Collapse file tree 1 file changed +4
-6
lines changed Original file line number Diff line number Diff line change @@ -2172,7 +2172,6 @@ where
2172
2172
struct InPlaceDrop < T > {
2173
2173
inner : * mut T ,
2174
2174
dst : * mut T ,
2175
- did_panic : bool ,
2176
2175
}
2177
2176
2178
2177
impl < T > InPlaceDrop < T > {
@@ -2185,9 +2184,7 @@ impl<T> Drop for InPlaceDrop<T> {
2185
2184
#[ inline]
2186
2185
fn drop ( & mut self ) {
2187
2186
unsafe {
2188
- if self . did_panic {
2189
- ptr:: drop_in_place ( slice:: from_raw_parts_mut ( self . inner , self . len ( ) ) as * mut _ ) ;
2190
- }
2187
+ ptr:: drop_in_place ( slice:: from_raw_parts_mut ( self . inner , self . len ( ) ) as * mut _ ) ;
2191
2188
}
2192
2189
}
2193
2190
}
@@ -2240,7 +2237,7 @@ where
2240
2237
2241
2238
let dst = if mem:: needs_drop :: < T > ( ) {
2242
2239
// special-case drop handling since it prevents vectorization
2243
- let mut sink = InPlaceDrop { inner : src_buf, dst, did_panic : true } ;
2240
+ let mut sink = InPlaceDrop { inner : src_buf, dst } ;
2244
2241
let _ = iterator. try_for_each :: < _ , Result < _ , !> > ( |item| {
2245
2242
unsafe {
2246
2243
debug_assert ! (
@@ -2252,7 +2249,8 @@ where
2252
2249
}
2253
2250
Ok ( ( ) )
2254
2251
} ) ;
2255
- sink. did_panic = false ;
2252
+ // iteration succeeded, don't drop head
2253
+ let sink = mem:: ManuallyDrop :: new ( sink) ;
2256
2254
sink. dst
2257
2255
} else {
2258
2256
// use try-fold
You can’t perform that action at this time.
0 commit comments