Commit graph

34 commits

Author SHA1 Message Date
Scott McMurray
0815531488 Add a note about why the unsafe is sound 2018-12-15 16:33:23 -08:00
Scott McMurray
7f9883d79e Add unstable VecDeque::rotate_{left|right} 2018-12-15 02:34:10 -08:00
bors
9fe5cb5342 Auto merge of #56161 - RalfJung:vecdeque-stacked-borrows, r=SimonSapin
VecDeque: fix for stacked borrows

`VecDeque` violates a version of stacked borrows where creating a shared reference is not enough to make a location *mutably accessible* from raw pointers (and I think that is the version we want).  There are two problems:

* Creating a `NonNull<T>` from `&mut T` goes through `&T` (inferred for a `_`), then `*const T`, then `NonNull<T>`. That means in this stricter version of Stacked Borrows, we cannot actually write to such a `NonNull` because it was created from a shared reference! This PR fixes that by going from `&mut T` to `*mut T` to `*const T`.
* `VecDeque::drain` creates the `Drain` struct by *first* creating a `NonNull` from `self` (which is an `&mut VecDeque`), and *then* calling `self.buffer_as_mut_slice()`. The latter reborrows `self`, asserting that `self` is currently the unique pointer to access this `VecDeque`, and hence invalidating the `NonNull` that was created earlier. This PR fixes that by instead using `self.buffer_as_slice()`, which only performs read accesses and creates only shared references, meaning the raw pointer (`NonNull`) remains valid.

It is possible that other methods on `VecDeque` do something similar, miri's test coverage of `VecDeque` is sparse to say the least.

Cc @nikomatsakis @Gankro
2018-12-13 07:12:19 +00:00
Ralf Jung
feb775c834 Drain only needs a shared reference 2018-12-07 09:20:54 +01:00
Ralf Jung
b0c4a35a96 VecDeque::drain: make sure the 'drain' raw pointer is actually still usable 2018-12-07 09:20:54 +01:00
Corey Farwell
c025d61409 Replace usages of ..i + 1 ranges with ..=i. 2018-12-04 12:05:19 -08:00
kennytm
52a4fc8130
Rollup merge of #56432 - ordovicia:shrink-to-issue, r=Centril
Update issue number of `shrink_to` methods to point the tracking issue

Tracking issue: #56431
2018-12-03 18:07:16 +08:00
Hidehito Yabuuchi
1e18cc916f Update issue number of shrink_to methods to point the tracking issue 2018-12-02 16:08:08 +09:00
Scott McMurray
4c2c523a05 Move VecDeque::resize_with out of the impl<T:Clone> block 2018-11-30 23:54:27 -08:00
Scott McMurray
cdb1a799f8 Add VecDeque::resize_with 2018-11-17 22:48:29 -08:00
Jorge Aparicio
f67b4e07d8 msp430: fix compilation of liballoc 2018-10-28 19:08:13 +01:00
Alex Crichton
70ae43fee7 Revert "Slightly refactor VecDeque implementation"
This reverts commit 6ce76acae4.
2018-10-05 09:15:57 -07:00
Alex Crichton
90b9469121 Revert "Optimize VecDeque::append"
This reverts commit 11e488b64f.
2018-10-05 09:15:52 -07:00
Alex Crichton
9a41cfabba Revert "Add docs and debug asserts"
This reverts commit 1a1a7f6167.
2018-10-05 09:15:48 -07:00
Alex Crichton
54441484d1 Revert "Fix tidy"
This reverts commit 1908892d3f.
2018-10-05 09:15:44 -07:00
Alex Crichton
8d81c03b65 Revert "Add another assert"
This reverts commit 21d2a6c986.
2018-10-05 09:15:39 -07:00
MaloJaffre
21d2a6c986 Add another assert 2018-08-29 13:42:48 +02:00
MaloJaffre
1908892d3f Fix tidy 2018-08-28 15:59:21 +02:00
MaloJaffre
1a1a7f6167 Add docs and debug asserts 2018-08-28 15:38:56 +02:00
MaloJaffre
11e488b64f Optimize VecDeque::append 2018-08-24 17:43:05 +02:00
MaloJaffre
6ce76acae4 Slightly refactor VecDeque implementation 2018-08-24 17:43:05 +02:00
MaloJaffre
f8d5ed47e5 Add a test for issue #53529 2018-08-22 13:15:50 +02:00
MaloJaffre
b85e4cc8fa Fix unsoundness in VecDeque Debug impls
Fixes #53566.
2018-08-22 13:15:50 +02:00
MaloJaffre
241b9b45c0 Revert "Auto merge of #52553 - Pazzaz:vecdeque-append, r=SimonSapin"
This partially reverts commit d5b6b95aef,
reversing changes made to 6b1ff19af3.

Fixes #53529.
Cc: #53564.
2018-08-22 10:27:42 +02:00
Corey Farwell
993fb93464 Replace usages of ptr::offset with ptr::{add,sub}. 2018-08-20 07:28:34 -04:00
bors
d5b6b95aef Auto merge of #52553 - Pazzaz:vecdeque-append, r=SimonSapin
Non-naive implementation of `VecDeque.append`

Replaces the old, simple implementation with a more manual (and **unsafe** 😱) one. I've added 1 more test and verified that it covers all 6 code paths in the function.

This new implementation was about 60% faster than the old naive one when I tried benchmarking it.
2018-08-18 08:56:12 +00:00
Pazzaz
76625280b2 Clarify unused_as_mut_slices 2018-08-15 18:01:42 +02:00
Pazzaz
ae0f254311 Clarify dst condition 2018-08-14 20:56:22 +02:00
Pazzaz
8d3554c48d Don't drop values in other, just move the tail 2018-08-14 20:54:25 +02:00
varkor
a00ba4d71e Correct invalid feature attributes 2018-08-05 15:54:49 +01:00
Pazzaz
6ebd62b8ff Make VecDeque append safer and easier to understand 2018-07-22 22:18:05 +02:00
Pazzaz
24bc854b8c Non-naive implementation for VecDeque.append 2018-07-19 23:32:22 +02:00
Simon Sapin
b0547cea0a Move core::alloc::CollectionAllocErr to alloc::collections 2018-06-29 14:01:33 +02:00
Simon Sapin
121b57b87a Move some alloc crate top-level items to a new alloc::collections module
This matches std::collections
2018-06-29 14:01:33 +02:00
Renamed from src/liballoc/vec_deque.rs (Browse further)