This commit is contained in:
Jonas Schievink 2020-01-19 20:50:00 +01:00
parent 52d6c90488
commit e5987a062f
4 changed files with 14 additions and 15 deletions

View File

@ -1566,10 +1566,13 @@ where
{
fn drop(&mut self) {
struct DropGuard<'r, 'a, T, F>(&'r mut DrainFilter<'a, T, F>)
where F: FnMut(&mut T) -> bool;
where
F: FnMut(&mut T) -> bool;
impl<'r, 'a, T, F> Drop for DropGuard<'r, 'a, T, F>
where F: FnMut(&mut T) -> bool {
where
F: FnMut(&mut T) -> bool,
{
fn drop(&mut self) {
self.0.for_each(drop);
}

View File

@ -590,11 +590,10 @@ fn drain_filter_pred_panic_leak() {
q.push_front(D(1));
q.push_front(D(0));
catch_unwind(AssertUnwindSafe(|| drop(q.drain_filter(|item| if item.0 >= 2 {
panic!()
} else {
true
})))).ok();
catch_unwind(AssertUnwindSafe(|| {
drop(q.drain_filter(|item| if item.0 >= 2 { panic!() } else { true }))
}))
.ok();
assert_eq!(unsafe { DROPS }, 2); // 0 and 1
assert_eq!(q.len(), 6);

View File

@ -783,11 +783,7 @@ fn test_into_iter_leak() {
}
}
let v = vec![
D(false),
D(true),
D(false),
];
let v = vec![D(false), D(true), D(false)];
catch_unwind(move || drop(v.into_iter())).ok();

View File

@ -2,7 +2,7 @@ use std::collections::TryReserveError::*;
use std::collections::{vec_deque::Drain, VecDeque};
use std::fmt::Debug;
use std::mem::size_of;
use std::panic::{AssertUnwindSafe, catch_unwind};
use std::panic::{catch_unwind, AssertUnwindSafe};
use std::{isize, usize};
use crate::hash;
@ -1637,7 +1637,8 @@ fn test_drain_leak() {
catch_unwind(AssertUnwindSafe(|| {
v.drain(1..=4);
})).ok();
}))
.ok();
assert_eq!(unsafe { DROPS }, 4);
assert_eq!(v.len(), 3);