This changes the performance of `drop` from linear to constant time for such `HashMap`s.
Closes #31711.
r? @bluss
use cmp;
use hash::{Hash, Hasher, BuildHasher};
+use intrinsics::needs_drop;
use marker;
use mem::{align_of, size_of};
use mem;
// dropping empty tables such as on resize.
// Also avoid double drop of elements that have been already moved out.
unsafe {
- for _ in self.rev_move_buckets() {}
+ if needs_drop::<(K, V)>() { // avoid linear runtime for types that don't need drop
+ for _ in self.rev_move_buckets() {}
+ }
}
let hashes_size = self.capacity * size_of::<u64>();