Rollup merge of #78854 - the8472:workaround-normalization-regression-master, r=Mark-Simulacrum

Workaround for "could not fully normalize" ICE

Workaround for "could not fully normalize" ICE (#78139) by removing the `needs_drop::<T>()` calls triggering it.
Corresponding beta PR: #78845

Fixes #78139 -- the underlying bug is likely not fixed but we don't have another test case isolated for now, so closing.
This commit is contained in:
Jonas Schievink 2020-11-10 14:45:19 +01:00 committed by GitHub
commit e15fee9fe4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2136,10 +2136,8 @@ impl<T> InPlaceDrop<T> {
impl<T> Drop for InPlaceDrop<T> {
#[inline]
fn drop(&mut self) {
if mem::needs_drop::<T>() {
unsafe {
ptr::drop_in_place(slice::from_raw_parts_mut(self.inner, self.len()));
}
unsafe {
ptr::drop_in_place(slice::from_raw_parts_mut(self.inner, self.len()));
}
}
}
@ -2871,10 +2869,8 @@ impl<T> IntoIter<T> {
}
fn drop_remaining(&mut self) {
if mem::needs_drop::<T>() {
unsafe {
ptr::drop_in_place(self.as_mut_slice());
}
unsafe {
ptr::drop_in_place(self.as_mut_slice());
}
self.ptr = self.end;
}