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 @@ -2066,7 +2066,6 @@ where
2066
2066
struct InPlaceDrop < T > {
2067
2067
inner : * mut T ,
2068
2068
dst : * mut T ,
2069
- did_panic : bool ,
2070
2069
}
2071
2070
2072
2071
impl < T > InPlaceDrop < T > {
@@ -2079,9 +2078,7 @@ impl<T> Drop for InPlaceDrop<T> {
2079
2078
#[ inline]
2080
2079
fn drop ( & mut self ) {
2081
2080
unsafe {
2082
- if self . did_panic {
2083
- ptr:: drop_in_place ( slice:: from_raw_parts_mut ( self . inner , self . len ( ) ) as * mut _ ) ;
2084
- }
2081
+ ptr:: drop_in_place ( slice:: from_raw_parts_mut ( self . inner , self . len ( ) ) as * mut _ ) ;
2085
2082
}
2086
2083
}
2087
2084
}
@@ -2135,7 +2132,7 @@ where
2135
2132
2136
2133
let dst = if mem:: needs_drop :: < T > ( ) {
2137
2134
// special-case drop handling since it prevents vectorization
2138
- let mut sink = InPlaceDrop { inner : src_buf, dst, did_panic : true } ;
2135
+ let mut sink = InPlaceDrop { inner : src_buf, dst } ;
2139
2136
let _ = iterator. try_for_each :: < _ , Result < _ , !> > ( |item| {
2140
2137
unsafe {
2141
2138
debug_assert ! (
@@ -2147,7 +2144,8 @@ where
2147
2144
}
2148
2145
Ok ( ( ) )
2149
2146
} ) ;
2150
- sink. did_panic = false ;
2147
+ // iteration succeeded, don't drop head
2148
+ let sink = mem:: ManuallyDrop :: new ( sink) ;
2151
2149
sink. dst
2152
2150
} else {
2153
2151
// use try-fold
You can’t perform that action at this time.
0 commit comments