Commit Graph

1743 Commits

Author SHA1 Message Date
Mazdak Farrokhzad a34dae3587 Rollup merge of #60511 - taiki-e:libstd-intra-doc, r=Dylan-DPC
Fix intra-doc link resolution failure on re-exporting libstd

Currently, re-exporting libstd items as below will [occur a lot of failures](https://gist.github.com/taiki-e/e33e0e8631ef47f65a74a3b69f456366).
```rust
pub use std::*;
```

Until the underlying issue (#56922) fixed, we can fix that so they don't propagate to downstream crates.

Related: https://github.com/rust-lang/rust/pull/56941 (That PR fixed failures that occur when re-exporting from libcore to libstd.)

r? @QuietMisdreavus
2019-05-20 23:02:59 +02:00
Ralf Jung b7afe777f7 stabilize core parts of MaybeUninit and deprecate mem::uninitialized in the future
Also expand the documentation a bit
2019-05-20 10:44:02 +02:00
Mazdak Farrokhzad de39eb81ed Rollup merge of #60931 - cuviper:array-iter, r=KodrAus
Use iter() for iterating arrays by slice

These `into_iter()` calls will change from iterating references to
values if we ever get `IntoIterator` for arrays, which may break the
code using that iterator. Calling `iter()` is future proof.
2019-05-19 02:31:40 +02:00
Mazdak Farrokhzad dc7cbb697b Rollup merge of #60678 - DutchGhost:master, r=scottmcm
Stabilize vecdeque_rotate

This PR stabilizes the vecdeque_rotate feature.
r? @scottmcm

Closes https://github.com/rust-lang/rust/issues/56686
2019-05-19 02:31:35 +02:00
Josh Stone 90dd35918d Use iter() for iterating arrays by slice
These `into_iter()` calls will change from iterating references to
values if we ever get `IntoIterator` for arrays, which may break the
code using that iterator. Calling `iter()` is future proof.
2019-05-17 19:56:35 -07:00
Alex Crichton 3c9790e429 Update the compiler_builtins crate
This updates to 0.1.13 for `compiler_builtins`, published to fix a few
issues. The feature changes here are updated because `compiler_builtins`
no longer enables the `c` feature by default but we want to do so
through our build still.

Closes #60747
Closes #60782
2019-05-17 07:17:15 -07:00
Mazdak Farrokhzad f08c5bbc85 Rollup merge of #59825 - jsgf:from-ref-string, r=sfackler
string: implement From<&String> for String

Allow Strings to be created from borrowed Strings. This is mostly
to make things like passing `&String` to an `impl Into<String>`
parameter frictionless.

Fixes #59827.
2019-05-16 10:43:24 +02:00
Mazdak Farrokhzad bab03cecfe Rollup merge of #60130 - khuey:efficient_last, r=sfackler
Add implementations of last in terms of next_back on a bunch of DoubleEndedIterators

Provided a `DoubleEndedIterator` has finite length, `Iterator::last` is equivalent to `DoubleEndedIterator::next_back`. But searching forwards through the iterator when it's unnecessary is obviously not good for performance. I ran into this on one of the collection iterators.

I tried adding appropriate overloads for a bunch of the iterator adapters like filter, map, etc, but I ran into a lot of type inference failures after doing so.

The other interesting case is what to do with `Repeat`. Do we consider it part of the contract that `Iterator::last` will loop forever on it? The docs do say that the iterator will be evaluated until it returns None. This is also relevant for the adapters, it's trivially easy to observe whether a `Map` adapter invoked its closure a zillion times or just once for the last element.
2019-05-14 22:00:09 +02:00
bors 16e356ebdf Auto merge of #60396 - cuviper:ordered-retain, r=scottmcm
Document the order of {Vec,VecDeque,String}::retain

It's natural for `retain` to work in order from beginning to end, but
this wasn't actually documented to be the case. If we actually promise
this, then the caller can do useful things like track the index of each
element being tested, as [discussed in the forum][1]. This is now
documented for `Vec`, `VecDeque`, and `String`.

[1]: https://users.rust-lang.org/t/vec-retain-by-index/27697

`HashMap` and `HashSet` also have `retain`, and the `hashbrown`
implementation does happen to use a plain `iter()` order too, but it's
not certain that this should always be the case for these types.

r? @scottmcm
2019-05-12 06:24:10 +00:00
Thomas Heck 740a8dabb4 add comment to Rc/Arc's Eq specialization 2019-05-11 11:03:28 +02:00
Josh Stone 0545375ca6 Add examples of ordered retain 2019-05-10 18:01:50 -07:00
bors 407536e38d Auto merge of #60451 - rasendubi:binaryheap-min-heap, r=scottmcm
BinaryHeap: add min-heap example

Fixes #58174.
2019-05-10 04:10:36 +00:00
Dodo 4d033990fc supposed to be 1.36.0 2019-05-09 20:50:02 +02:00
Dodo 1acd37fde5 make vecdeque_rotate stable 2019-05-09 20:30:36 +02:00
Taiki Endo ccb9dac5ed Fix intra-doc link resolution failure on re-exporting libstd 2019-05-04 23:48:57 +09:00
Mazdak Farrokhzad 639e452c5f Remove unused feature(need_allocator). 2019-05-04 04:20:55 +02:00
Alexey Shmalko adbaf7a9cd BinaryHeap: add min-heap example 2019-05-01 23:26:06 +03:00
YOSHIOKA Takuma a0e112ba52 Implement BorrowMut<str> for String
Closes rust-lang/rfcs#1282.
2019-04-30 17:50:38 +09:00
Josh Stone 9b3583375d Document the order of {Vec,VecDeque,String}::retain
It's natural for `retain` to work in order from beginning to end, but
this wasn't actually documented to be the case. If we actually promise
this, then the caller can do useful things like track the index of each
element being tested, as [discussed in the forum][1]. This is now
documented for `Vec`, `VecDeque`, and `String`.

[1]: https://users.rust-lang.org/t/vec-retain-by-index/27697

`HashMap` and `HashSet` also have `retain`, and the `hashbrown`
implementation does happen to use a plain `iter()` order too, but it's
not certain that this should always be the case for these types.
2019-04-29 18:32:05 -07:00
Matthias Geier be12ab070d Use "capacity" as parameter name in with_capacity() methods
Closes #60271.
2019-04-26 18:43:24 +02:00
varkor aa388f1d11 ignore-tidy-filelength on all files with greater than 3000 lines 2019-04-25 21:39:09 +01:00
Taylor Cramer 3f966dcd53 Stabilize futures_api 2019-04-23 16:13:53 -07:00
varkor 7f0f0e31ec Remove double trailing newlines 2019-04-22 16:57:01 +01:00
Philipp Hansch 110a73d6c6 Deny rust_2018_idioms in liballoc tests 2019-04-20 16:05:25 +02:00
Kyle Huey 3e86cf36b5 Add implementations of last in terms of next_back on a bunch of DoubleEndedIterators.
r?Manishearth
2019-04-19 21:52:43 -07:00
bors 130dc3e7da Auto merge of #60072 - RalfJung:linked-list, r=shepmaster
fix LinkedList invalidating mutable references

The test `test_insert_prev` failed in Miri due to what I consider a bug in `LinkedList`: in various places, `NonNull::as_mut` got called to modify the `prev`/`next` pointers of existing nodes. In particular, the unstable `insert_next` has to modify the `next` pointer of the node that was last handed out by the iterator; to this end it creates a mutable reference to the *entire node* that overlaps with the mutable reference to the node's content that was handed out by the iterator! Thus, the next use if said mutable reference is UB.

In code:
```rust
            loop {
                match it.next() { // mutable reference handed to us
                    None => break,
                    Some(elt) => {
                        it.insert_next(*elt + 1); // this invalidates `elt` because it creates an overlapping mutable reference
                        match it.peek_next() {
                            Some(x) => assert_eq!(*x, *elt + 2), // this use of `elt` now is a use of an invalid pointer
                            None => assert_eq!(8, *elt),
                        }
                    }
                }
            }
```

This PR fixes that by using `as_ptr` instead of `as_mut`. This avoids invalidating the mutable reference that was handed to the user.  I did this in all methods called by iterators, just to be sure.

Cc @Gankro
2019-04-19 17:12:17 +00:00
Ralf Jung 8b09d046fe fix LinkedList invalidating mutable references 2019-04-19 18:33:08 +02:00
bors a2bbf7deba Auto merge of #60077 - RalfJung:miri-alloc-tests, r=joshtriplett
make liballoc internal test suite mostly pass in Miri

I discovered, to my surprise, that liballoc has two test suites: `liballoc/tests`, and a bunch of stuff embedded directly within liballoc.  The latter was not covered by [miri-test-libstd](https://github.com/RalfJung/miri-test-libstd) yet.  This disables in Miri the tests that Miri cannot support or runs too slowly.
2019-04-19 12:52:02 +00:00
Ralf Jung 2bc8c547cd move variable down to where it is used 2019-04-19 09:06:08 +02:00
Mazdak Farrokhzad 7f450bd3ca Rollup merge of #59933 - sourcefrog:doc-fmt, r=shepmaster
Make clear that format padding doesn't work for Debug

As mentioned in
https://github.com/rust-lang/rust/issues/46006#issuecomment-345260633
2019-04-19 06:03:10 +02:00
Ralf Jung 29eed6b931 make liballoc internal test suite mostly pass in Miri 2019-04-18 13:37:14 +02:00
Mazdak Farrokhzad a20438773b Rollup merge of #59908 - lzutao:str_escape, r=SimonSapin
Re-export core::str::{EscapeDebug, EscapeDefault, EscapeUnicode} in std

cc #59893
2019-04-18 00:23:36 +02:00
Ralf Jung d55e4b7a25 test sort_unstable in Miri 2019-04-17 09:47:36 +02:00
Ralf Jung 9b21324db2 Miri now supports entropy, but is still slow 2019-04-16 20:04:17 +02:00
Ralf Jung 50c615baa2 warn(missing_docs) in liballoc, and add missing docs 2019-04-15 16:35:50 +02:00
Ralf Jung 8ef7ca1302 make lint levels more consistent 2019-04-14 10:16:23 +02:00
Ralf Jung cdf1d368e2 bump stdsimd; make intra_doc_link_resolution_failure an error again 2019-04-14 10:00:22 +02:00
Mazdak Farrokhzad bdb264ff5f Rollup merge of #59675 - SimonSapin:stable-alloc, r=alexcrichton
Stabilize the `alloc` crate.

This implements RFC 2480:

* https://github.com/rust-lang/rfcs/pull/2480
* https://github.com/rust-lang/rfcs/blob/master/text/2480-liballoc.md

Closes https://github.com/rust-lang/rust/issues/27783
2019-04-14 00:23:25 +02:00
Martin Pool 6225b312cf Make clear that format padding doesn't work for Debug
As mentioned in
https://github.com/rust-lang/rust/issues/46006#issuecomment-345260633
2019-04-13 15:39:49 +10:00
Simon Sapin fc928a18ba Stabilize the alloc crate.
This implements RFC 2480:

* https://github.com/rust-lang/rfcs/pull/2480
* https://github.com/rust-lang/rfcs/blob/master/text/2480-liballoc.md

Closes https://github.com/rust-lang/rust/issues/27783
2019-04-12 20:07:30 +02:00
Mazdak Farrokhzad 484e703a0b Rollup merge of #59814 - ollie27:dead_boxed_links, r=QuietMisdreavus
Fix broken links on std::boxed doc page

r? @QuietMisdreavus
2019-04-12 12:17:55 +02:00
Lzu Tao 2545867b41 Re-export core::str::{EscapeDebug, EscapeDefault, EscapeUnicode} in std 2019-04-12 05:18:36 +00:00
Oliver Middleton ae2a68bcf5 Fix broken links on std::boxed doc page 2019-04-11 15:27:35 +01:00
John Kåre Alsaker 81a1121341 Update cmake, cc and compiler_builtins for VS 2019 support 2019-04-10 21:17:31 +02:00
Jeremy Fitzhardinge 08b0aca05e string: implement From<&String> for String
Allow Strings to be created from borrowed Strings. This is mostly
to make things like passing &String to an `impl Into<String>`
parameter frictionless.
2019-04-09 16:52:05 -07:00
bors 4fb888bf04 Auto merge of #59119 - cramertj:cx-back, r=withoutboats
Future-proof the Futures API

cc https://github.com/rust-lang/rust/issues/59113, @carllerche, @rust-lang/libs

r? @withoutboats
2019-04-07 09:48:12 +00:00
Taylor Cramer 1691e06db6 Future-proof the Futures API 2019-04-05 15:03:33 -07:00
Josh Stone 0730a01c5c Use for_each to extend collections
This updates the `Extend` implementations to use `for_each` for many
collections: `BinaryHeap`, `BTreeMap`, `BTreeSet`, `LinkedList`, `Path`,
`TokenStream`, `VecDeque`, and `Wtf8Buf`.

Folding with `for_each` enables better performance than a `for`-loop for
some iterators, especially if they can just forward to internal
iterators, like `Chain` and `FlatMap` do.
2019-04-05 14:51:07 -07:00
Charles Lew ecc3e89dd0 Stabilize boxed_closure_impls in 1.35.0. 2019-04-05 02:32:21 +08:00
Masaki Hara 45c0b28bcb Remove FnBox specialization of impl FnOnce for Box<impl FnOnce>. 2019-04-05 02:27:05 +08:00