2543 Commits

Author SHA1 Message Date
Yoshua Wuyts
0e9a20f311 Remove unnecessary type hints from the Wake impl 2020-07-14 11:59:11 +02:00
Manish Goregaokar
2da709ea21
Rollup merge of #74099 - jonhoo:deque-range, r=dtolnay
Add VecDeque::range* methods

This patch adds `VecDeque::range` and `VecDeque::range_mut` to provide
iterators over a sub-range of a `VecDeque`. This behavior can be
emulated with `skip` and `take`, but directly providing a `Range` is
more ergonomic. This also partially makes up for `VecDeque`'s lack of
`SliceIndex` support.
2020-07-10 23:26:36 -07:00
Jon Gjengset
a1a19cbbe1
Add tracking issue 2020-07-10 09:23:52 -04:00
Manish Goregaokar
2d432ae35b
Rollup merge of #74143 - pickfire:patch-2, r=jonas-schievink
Try remove unneeded ToString import in liballoc slice
2020-07-09 11:50:42 -07:00
Ivan Tham
0965443001
Remove unneeded ToString import in liballoc slice 2020-07-08 12:47:19 +08:00
Ivan Tham
7bc85e29c9
Liballoc use vec instead of vector
Keep congruency with other parts, full word vector is rarely used.
2020-07-08 12:44:43 +08:00
Manish Goregaokar
7d7b3e637c
Rollup merge of #73974 - CAD97:rc-no-weak, r=dtolnay
Move A|Rc::as_ptr from feature(weak_into_raw) to feature(rc_as_ptr)

These were stabilized alongside the Weak versions, but having `feature = "weak_.."` on a fn definition for the non-weak pointers is potentially very misleading, especially in a review context where the impl header may not be immediately visible.

r? @RalfJung
@bors rollup=always
2020-07-06 17:45:28 -07:00
Jon Gjengset
8872ec3760
fixups 2020-07-06 11:52:20 -04:00
Jon Gjengset
7fb26938b1
Add VecDeque::range* methods
This patch adds `VecDeque::range` and `VecDeque::range_mut` to provide
iterators over a sub-range of a `VecDeque`. This behavior can be
emulated with `skip` and `take`, but directly providing a `Range` is
more ergonomic. This also partially makes up for `VecDeque`'s lack of
`SliceIndex` support.
2020-07-06 10:35:33 -04:00
Manish Goregaokar
aef2ca6681
Rollup merge of #74025 - tmiasko:try-unwrap, r=Amanieu
Remove unnecessary release from Arc::try_unwrap

The thread that recovers the unique access to Arc inner value (e.g., drop
when ref-count strong reaches zero, successful try_unwrap), ensures that
other operations on Arc inner value happened before by synchronizing
with release operations performed when decrementing the reference counter.

When try_unwrap succeeds, the current thread recovers the unique access
to Arc inner value, so release is unnecessary.

r? @Amanieu
2020-07-05 16:07:32 -07:00
Manish Goregaokar
5311daa136
Rollup merge of #72688 - djugei:master, r=Amanieu
added .collect() into String from Box<str>

I have not created an rfc, because i felt like this is a very minor change.

i have just set a random feature name and rust version as stability attribute, i expect to have to change that, i just don't know what the policy on that is. all guides i could find focused on contributing to the compiler, not contributing to the standard library.

drawbacks: more code in the standard library, could be replaced with specialization: base-implementation for AsRef\<str> and specialization for String and Cow. i can write that code if ppl want it.

advantages: using "real strings" i.e. Box\<str> is as ergonomic as string slices (&str) and string buffers (String) with iterators.
2020-07-05 16:07:19 -07:00
Tomasz Miąsko
8900502a88 Remove unnecessary release from Arc::try_unwrap
The thread that recovers the unique access to Arc inner value (e.g., drop
when ref-count strong reaches zero, successful try_unwrap), ensures that
other operations on Arc inner value happened before by synchronizing
with release operations performed when decrementing the reference counter.

When try_unwrap succeeds, the current thread recovers the unique access
to Arc inner value, so release is unnecessary.
2020-07-04 11:40:27 +02:00
Manish Goregaokar
9a659c54e5
Rollup merge of #73845 - CAD97:weak-as-unsized-ptr, r=RalfJung
Use &raw in A|Rc::as_ptr

This PR uses `&raw` for offsetting `*mut [A]RcInner<T> -> *mut T`.

Additionally, this updates the implementation of `Weak::as_ptr` to support unsized `T`, though it does not yet relax the bounds of `Weak::as_ptr`/`into_raw`/`from_raw` to accept unsized `T`.
2020-07-03 17:16:56 -07:00
bors
cd1a46d644 Auto merge of #73882 - nnethercote:avoid-unwrap_or_else-in-allocate_in, r=Amanieu
Avoid `unwrap_or_else` in `RawVec::allocate_in`.

This reduces the amount of LLVM IR generated by up to 1 or 2%.

r? @Amanieu
2020-07-03 03:18:28 +00:00
CAD97
1b5ac57bfd Note Weak.ptr never dangles sooner 2020-07-02 17:08:37 -04:00
CAD97
7391bf882a Move A|Rc::as_ptr from feature(weak_into_raw)
to feature(rc_as_ptr)

These were stabilized alongside the Weak versions,
but having `feature = "weak_.."` on a fn definition
for the non-weak pointers is potentially very confusing.
2020-07-02 16:58:49 -04:00
Ralf Jung
dca9310ceb disable BTree min_max test in Miri for now 2020-07-02 10:26:37 +02:00
CAD97
7498cad0d8 Reclarify safety comments in Weak::as_ptr 2020-07-01 16:02:34 -04:00
CAD97
98789ac75a Simplify Weak::as_ptr impl 2020-07-01 15:06:07 -04:00
CAD97
ac40d1eff3 Apply documentation review suggestions
Co-Authored-By: Ralf Jung <post@ralfj.de>
2020-07-01 15:05:37 -04:00
Manish Goregaokar
6556f26991
Rollup merge of #73678 - Keno:patch-1, r=LukasKalbertodt
Update Box::from_raw example to generalize better

I know very little about rust, so I saw the example here
```
use std::alloc::{alloc, Layout};

unsafe {
    let ptr = alloc(Layout:🆕:<i32>()) as *mut i32;
    *ptr = 5;
    let x = Box::from_raw(ptr);
}
```
and tried to generalize it by writing,
```
    let layout = Layout:🆕:<T>();
    let new_obj = unsafe {
        let ptr = alloc(layout) as *mut T;
        *ptr = obj;
        Box::from_raw(ptr)
    };
```
for some more complicated `T`, which ended up crashing with SIGSEGV,
because it tried to `drop_in_place` the previous object in `ptr` which is
of course garbage. I think that changing this example to use `.write` instead
would be a good idea to suggest the correct generalization. It is also more
consistent with other documentation items in this file, which use `.write`.
I also added a comment to explain it, but I'm not too attached to that,
and can see it being too verbose in this place.
2020-07-01 07:42:42 -07:00
Manish Goregaokar
b7d13c0604
Rollup merge of #73466 - matthiaskrgr:char_into_string, r=dtolnay
impl From<char> for String

This allows us to write

````rust
fn char_to_string() -> String {
    'a'.into()
}
````

which was not possible before.
2020-07-01 07:42:36 -07:00
CAD97
aed88e1804 Clarify when rc::data_offset is safe 2020-06-30 15:03:04 -04:00
CAD97
0aecf3c74b Fix invalid pointer deref in Weak::as_ptr 2020-06-30 15:02:21 -04:00
CAD97
fc3dc723da Clarify safety comment for A|Rc::as_ptr 2020-06-30 15:01:48 -04:00
Nicholas Nethercote
3f79d2f33e Avoid unwrap_or_else in RawVec::allocate_in.
This reduces the amount of LLVM IR generated by up to 1 or 2%.
2020-06-30 14:38:57 +10:00
bors
0ca7f74dbd Auto merge of #73391 - pickfire:liballoc-panic-doc, r=Mark-Simulacrum
Add liballoc doc panic detail according to RawVec
2020-06-29 12:00:31 +00:00
CAD97
d8a9c61e1a Use impl for Weak::as_ptr that works for unsized T 2020-06-28 14:33:18 -04:00
CAD97
e4bdf47f4c Do not require ptr validity in rc::data_offset 2020-06-28 14:24:09 -04:00
CAD97
db539c6498 Use raw_ref_op in A|Rc::as_ptr 2020-06-28 14:21:03 -04:00
Dylan MacKenzie
48ebd2cdb8 Remove const_if_match feature gate from libraries 2020-06-28 10:08:09 -07:00
Manish Goregaokar
50026aed24
Rollup merge of #73765 - kraai:remove-blank-line, r=jonas-schievink
Remove blank line
2020-06-26 13:57:46 -07:00
Manish Goregaokar
dfbba65786
Rollup merge of #73627 - ssomers:btree_iter_min_max, r=Mark-Simulacrum
Shortcuts for min/max on double-ended BTreeMap/BTreeSet iterators

Closes #59947: a performance tweak that might benefit some. Optimizes `min` and `max ` on all btree double-ended iterators that do not drop, i.e. the iterators created by:

- `BTreeMap::iter`
- `BTreeMap::iter_mut`
- `BTreeMap::keys` and `BTreeSet::iter`
- `BTreeMap::range` and `BTreeSet::range`
- `BTreeMap::range_mut`

Also in these (currently) single-ended iterators, but obviously for `min` only:
- `BTreeSet::difference`
- `BTreeSet::intersection`
- `BTreeSet::symmetric_difference`
- `BTreeSet::union`

Did not do this in iterators created by `into_iter` to preserve drop order, as outlined in #62316.

Did not do this in iterators created by `drain_filter`, possibly to preserve drop order, possibly to preserve predicate invocation, mostly to not have to think about it too hard (I guess maybe it wouldn't be a change for `min`, which is the only shortcut possible in this single-ended iterator).
2020-06-26 13:57:35 -07:00
Manish Goregaokar
23b0776a59
Rollup merge of #73529 - pickfire:liballoc-specfromelem-i8, r=cuviper
Add liballoc impl SpecFromElem for i8

Speedup vec![1_i8; N] for non-zero element.

Before
test do_bench_from_elem_i8        ... bench:         130 ns/iter (+/- 7) = 61 MB/s
test do_bench_from_elem_u8        ... bench:         121 ns/iter (+/- 4) = 66 MB/s
After
test do_bench_from_elem_i8        ... bench:         123 ns/iter (+/- 7) = 65 MB/s
test do_bench_from_elem_u8        ... bench:         121 ns/iter (+/- 5) = 66 MB/s

No speed difference if element is already zero.

```rust
#[bench]
fn do_bench_from_elem_i8(b: &mut Bencher) {
    b.bytes = 8 as u64;
    b.iter(|| {
        let dst = ve::vec![10_i8; 100];
        assert_eq!(dst.len(), 100);
        assert!(dst.iter().all(|x| *x == 10));
    })
}
```

As suggested by @cuviper
https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/SpecForElem.20for.20other.20integers

r? @cuviper
CC @joshtriplett

Edit: Wow, I just realized both reviewers are Josh.
2020-06-26 13:57:31 -07:00
Ivan Tham
31c6d5f35e Add liballoc doc panic detail according to RawVec 2020-06-27 00:08:14 +08:00
KRAAI, MATTHEW [VISUS]
cb152eae2f Remove blank line 2020-06-26 06:22:35 -07:00
Stein Somers
42062a5802 Shortcuts for min/max on ordinary BTreeMap/BTreeSet iterators 2020-06-26 10:05:21 +02:00
Manish Goregaokar
91a638d794
Rollup merge of #73729 - nellshamrell:disable-collectionsbenches-android, r=sfackler
disable collectionbenches for android

Fixes #73535

Signed-off-by: Nell Shamrell <nellshamrell@gmail.com>
2020-06-26 00:39:17 -07:00
Nell Shamrell
f13d89eb2e disable collectionbenches for android
Signed-off-by: Nell Shamrell <nellshamrell@gmail.com>
2020-06-25 11:14:16 -07:00
Dylan DPC
6c1a91edd9
Rollup merge of #73616 - pickfire:liballoc-hash, r=joshtriplett
Liballoc minor hash import tweak
2020-06-25 02:03:36 +02:00
Dylan DPC
67db7a2d05
Rollup merge of #72700 - davidtwco:issue-66220-improper-ctypes-declarations, r=lcnr,varkor
`improper_ctypes_definitions` lint

Addresses #19834, #66220, and #66373.

This PR takes another attempt at #65134 (reverted in #66378). Instead of modifying the existing `improper_ctypes` lint to consider `extern "C" fn` definitions in addition to `extern "C" {}` declarations, this PR adds a new lint - `improper_ctypes_definitions` - which only applies to `extern "C" fn` definitions.

In addition, the `improper_ctype_definitions` lint differs from `improper_ctypes` by considering `*T` and `&T` (where `T: Sized`) FFI-safe (addressing #66220).

There wasn't a clear consensus in #66220 (where the issues with #65134 were primarily discussed) on the approach to take, but there has [been some discussion in Zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/.2366220.20improper_ctypes.20definitions.20vs.20declarations/near/198903086). I fully expect that we'll want to iterate on this before landing.

cc @varkor + @shepmaster (from #19834) @hanna-kruppe (active in discussing #66220), @SimonSapin (#65134 caused problems for Servo, want to make sure that this PR doesn't)
2020-06-25 02:03:32 +02:00
Dylan DPC
c4e15b5c5a
Rollup merge of #73667 - nrabulinski:master, r=Dylan-DPC
Update BTreeMap::new() doc

Updates the documentation according to [this comment](0c5c644c91 (r433232581)) on #72876
2020-06-24 14:28:45 +02:00
Dylan DPC
38c85b7393
Rollup merge of #73638 - yuqio:remove-unused-crate-imports, r=nikomatsakis
Remove unused crate imports in 2018 edition crates

Closes #73570
2020-06-24 14:28:33 +02:00
David Wood
14ea7a777f
lints: add improper_ctypes_definitions
This commit adds a new lint - `improper_ctypes_definitions` - which
functions identically to `improper_ctypes`, but on `extern "C" fn`
definitions (as opposed to `improper_ctypes`'s `extern "C" {}`
declarations).

Signed-off-by: David Wood <david@davidtw.co>
2020-06-24 12:09:35 +01:00
Keno Fischer
0c88dd663a
Update Box::from_raw example to generalize better
I know very little about rust, so I saw this example and tried to generalize it by writing,
```
    let layout = Layout:🆕:<T>();
    let new_obj = unsafe {
        let ptr = alloc(layout) as *mut T;
        *ptr = obj;
        Box::from_raw(ptr)
    };
```
for some more complicated `T`, which ended up crashing with SIGSEGV,
because it tried to `drop_in_place` the previous object in `ptr` which is
of course garbage. I also added a comment that explains why `.write`
is used, but I think adding that comment is optional and may be too verbose
here. I do however think that changing this example is a good idea to
suggest the correct generalization. `.write` is also used in most of the rest
of the documentation here, even if the example is `i32`, so it would additionally
be more consistent.
2020-06-23 22:42:35 -04:00
Manish Goregaokar
317a15142e
Rollup merge of #72876 - TrolledWoods:patch-2, r=Dylan-DPC
Mention that BTreeMap::new() doesn't allocate

I think it would be nice to mention this, so you don't have to dig through the src to look at the definition of new().
2020-06-23 13:10:01 -07:00
Nikodem Rabuliński
f37c157f2c
Update map.rs 2020-06-23 20:06:44 +02:00
Manish Goregaokar
ae38698e7f
Rollup merge of #73398 - oli-obk:const_raw_ptr_cmp, r=varkor,RalfJung,nagisa
A way forward for pointer equality in const eval

r? @varkor on the first commit and @RalfJung on the second commit

cc #53020
2020-06-23 00:33:54 -07:00
yuqio
9267b4f612 Remove unused crate imports in 2018 edition crates 2020-06-23 05:01:20 +02:00
Dylan DPC
8da1dd0215
Rollup merge of #71660 - sollyucko:master, r=dtolnay
impl PartialEq<Vec<B>> for &[A], &mut [A]

https://github.com/rust-lang/rfcs/issues/2917
2020-06-22 14:53:46 +02:00