mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-08 07:57:40 +00:00
Rollup merge of #90010 - rusticstuff:vecdeque_with_capacity_in_overflow, r=m-ou-se
Avoid overflow in `VecDeque::with_capacity_in()`. The overflow only happens if alloc is compiled with overflow checks enabled and the passed capacity is greater or equal 2^(usize::BITS-1). The overflow shadows the expected "capacity overflow" panic leading to a test failure if overflow checks are enabled for std in the CI. Unblocks [CI: Enable overflow checks for test (non-dist) builds #89776](https://github.com/rust-lang/rust/pull/89776). For some reason the overflow is only observable with optimization turned off, but that is a separate issue.
This commit is contained in:
commit
d29e98fe93
@ -543,9 +543,9 @@ impl<T, A: Allocator> VecDeque<T, A> {
|
||||
/// ```
|
||||
#[unstable(feature = "allocator_api", issue = "32838")]
|
||||
pub fn with_capacity_in(capacity: usize, alloc: A) -> VecDeque<T, A> {
|
||||
assert!(capacity < 1_usize << usize::BITS - 1, "capacity overflow");
|
||||
// +1 since the ringbuffer always leaves one space empty
|
||||
let cap = cmp::max(capacity + 1, MINIMUM_CAPACITY + 1).next_power_of_two();
|
||||
assert!(cap > capacity, "capacity overflow");
|
||||
|
||||
VecDeque { tail: 0, head: 0, buf: RawVec::with_capacity_in(cap, alloc) }
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user