Avoid emptiness check in PeekMut::pop

This commit is contained in:
EFanZh 2024-10-03 22:15:52 +08:00
parent 9c7013c15c
commit d47e388843
2 changed files with 17 additions and 1 deletions

View file

@ -374,7 +374,10 @@ impl<'a, T: Ord, A: Allocator> PeekMut<'a, T, A> {
// the caller could've mutated the element. It is removed from the
// heap on the next line and pop() is not sensitive to its value.
}
this.heap.pop().unwrap()
// SAFETY: Have a `PeekMut` element proves that the associated binary heap being non-empty,
// so the `pop` operation will not fail.
unsafe { this.heap.pop().unwrap_unchecked() }
}
}

View file

@ -0,0 +1,13 @@
//@ compile-flags: -O
//@ ignore-debug
#![crate_type = "lib"]
use std::collections::binary_heap::PeekMut;
// CHECK-LABEL: @peek_mut_pop
#[no_mangle]
pub fn peek_mut_pop(peek_mut: PeekMut<u32>) -> u32 {
// CHECK-NOT: panic
// CHECK-NOT: unwrap_failed
PeekMut::pop(peek_mut)
}