diff options
| author | Josh Stone <jistone@redhat.com> | 2021-03-17 16:02:07 -0700 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2021-03-17 16:02:07 -0700 |
| commit | c07955c6b6a8901fc59d9c22004127b30a965407 (patch) | |
| tree | 12e13596da3f43fe7839b9209e4a1eb5baecd3ff /compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | |
| parent | 04ae50179a802d1d18bb780baa85f55864f56616 (diff) | |
| download | rust-c07955c6b6a8901fc59d9c22004127b30a965407.tar.gz rust-c07955c6b6a8901fc59d9c22004127b30a965407.zip | |
Fix overflowing length in Vec<ZST> to VecDeque
`Vec` can hold up to `usize::MAX` ZST items, but `VecDeque` has a lower
limit to keep its raw capacity as a power of two, so we should check
that in `From<Vec<T>> for VecDeque<T>`. We can also simplify the
capacity check for the remaining non-ZST case.
Before this fix, the new test would fail on the length:
```
thread 'collections::vec_deque::tests::test_from_vec_zst_overflow' panicked at 'assertion failed: `(left == right)`
left: `0`,
right: `9223372036854775808`', library/alloc/src/collections/vec_deque/tests.rs:474:5
note: panic did not contain expected string
panic message: `"assertion failed: `(left == right)`\n left: `0`,\n right: `9223372036854775808`"`,
expected substring: `"capacity overflow"`
```
That was a result of `len()` using a mask `& (size - 1)` with the
improper length. Now we do get a "capacity overflow" panic as soon as
that `VecDeque::from(vec)` is attempted.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
