]> git.lizzy.rs Git - rust.git/log
rust.git
6 years agoAuto merge of #49357 - frewsxcv:frewsxcv-termination-doc-examples, r=GuillaumeGomez
bors [Wed, 28 Mar 2018 18:11:44 +0000 (18:11 +0000)]
Auto merge of #49357 - frewsxcv:frewsxcv-termination-doc-examples, r=GuillaumeGomez

Remove hidden `foo` functions from doc examples; use `Termination` trait.

Fixes https://github.com/rust-lang/rust/issues/49233.

Easier to review with the white-space ignoring `?w=1` feature: https://github.com/rust-lang/rust/pull/49357/files?w=1

6 years agoAuto merge of #49394 - cramertj:stable-match-bindings, r=nikomatsakis
bors [Wed, 28 Mar 2018 15:31:29 +0000 (15:31 +0000)]
Auto merge of #49394 - cramertj:stable-match-bindings, r=nikomatsakis

Stabilize match_default_bindings

This includes a submodule update to rustfmt
in order to allow a stable feature declaration.

r? @nikomatsakis

cc https://github.com/rust-lang/rust/issues/42640

Many of the tests this PR touches are merely testing the current lack of desired future behavior around https://github.com/rust-lang/rust/issues/44849 and https://github.com/rust-lang/rust/issues/44848 (cc @tschottdorf). I noticed the bullets for those items were checked on the tracking issue-- I've unchecked them, as they don't appear to have been completed and I don't see any comments indicating that we don't want to pursue them further. Still, I think it's fine to stabilize the current behavior, as I think expanding it in the future should be backwards-compatible.

6 years agoAuto merge of #49019 - phil-opp:target-spec, r=pnkfelix
bors [Wed, 28 Mar 2018 12:56:09 +0000 (12:56 +0000)]
Auto merge of #49019 - phil-opp:target-spec, r=pnkfelix

Introduce a TargetTriple enum to support absolute target paths

This PR replaces target triple strings with a `TargetTriple` enum, which represents either a target triple or a path to a JSON target file. The path variant is used if the `--target` argument has a `.json` extension, else the target triple variant is used.

The motivation of this PR is support for absolute target paths to avoid the need for setting the `RUST_TARGET_PATH` environment variable (see rust-lang/cargo#4905 for more information). For places where some kind of triple is needed (e.g. in the sysroot folder), we use the file name (without extension).

For compatibility, we keep the old behavior of searching for a file named `$(target_triple).json` in `RUST_TARGET_PATH` for non-official target triples.

6 years agoRemove hidden `foo` functions from doc examples; use `Termination` trait.
Corey Farwell [Sun, 25 Mar 2018 02:56:07 +0000 (22:56 -0400)]
Remove hidden `foo` functions from doc examples; use `Termination` trait.

Fixes https://github.com/rust-lang/rust/issues/49233.

6 years agoStabilize match_default_bindings
Taylor Cramer [Mon, 26 Mar 2018 21:39:29 +0000 (23:39 +0200)]
Stabilize match_default_bindings

This includes a submodule update to rustfmt
in order to allow a stable feature declaration.

6 years agoAuto merge of #49383 - nox:scalarpair, r=eddyb
bors [Wed, 28 Mar 2018 08:01:22 +0000 (08:01 +0000)]
Auto merge of #49383 - nox:scalarpair, r=eddyb

Allow niche-filling dataful variants to be represented as a ScalarPair

r? @eddyb

6 years agoAuto merge of #49304 - sinkuu:impl_trait_rustdoc, r=QuietMisdreavus
bors [Wed, 28 Mar 2018 05:29:57 +0000 (05:29 +0000)]
Auto merge of #49304 - sinkuu:impl_trait_rustdoc, r=QuietMisdreavus

Rustdoc support for universal_impl_trait

Hides type parameters synthesized by `impl Trait`-in-argument-position, and enables links to trait names.

<img alt="before" src="https://user-images.githubusercontent.com/7091080/37831646-a61413c6-2ee9-11e8-8ec2-a6137956d922.png" width="450"/>

<img alt="after" src="https://user-images.githubusercontent.com/7091080/37831657-b2ff0ae6-2ee9-11e8-8797-fdad904782bf.png" width="450"/>

Fixes #49309

6 years agoAuto merge of #49406 - kennytm:rollup, r=kennytm
bors [Wed, 28 Mar 2018 02:41:28 +0000 (02:41 +0000)]
Auto merge of #49406 - kennytm:rollup, r=kennytm

Rollup of 11 pull requests

- Successful merges: #48639, #49223, #49333, #49369, #49381, #49395, #49399, #49401, #49417, #49202, #49426
- Failed merges:

6 years agoRollup merge of #49426 - lukaslueg:patch-1, r=kennytm
kennytm [Tue, 27 Mar 2018 19:03:39 +0000 (03:03 +0800)]
Rollup merge of #49426 - lukaslueg:patch-1, r=kennytm

Update CONTRIBUTING.md

The current link is a 404, just link to the main repo page

6 years agoRollup merge of #49407 - WiSaGaN:patch-1, r=alexcrichton
kennytm [Tue, 27 Mar 2018 19:03:21 +0000 (03:03 +0800)]
Rollup merge of #49407 - WiSaGaN:patch-1, r=alexcrichton

Add back 1.24.1 release notes

6 years agoUpdate CONTRIBUTING.md
lukaslueg [Tue, 27 Mar 2018 18:56:15 +0000 (20:56 +0200)]
Update CONTRIBUTING.md

The current link is a 404, just link to the main repo page

6 years agoRollup merge of #49417 - TimNN:fix-ios, r=alexcrichton
kennytm [Tue, 27 Mar 2018 15:20:27 +0000 (23:20 +0800)]
Rollup merge of #49417 - TimNN:fix-ios, r=alexcrichton

Update compiler-rt with fix for 32bit iOS ARM

6 years agoAuto merge of #49202 - csmoe:trait_engine, r=nikomatsakis
bors [Tue, 27 Mar 2018 14:31:43 +0000 (14:31 +0000)]
Auto merge of #49202 - csmoe:trait_engine, r=nikomatsakis

Introduce trait engine

address #48895 step 1: introduce trait engine

6 years agoUpdate compiler-rt with fix for 32bit iOS ARM
Tim Neumann [Tue, 27 Mar 2018 13:32:06 +0000 (15:32 +0200)]
Update compiler-rt with fix for 32bit iOS ARM

6 years agoAuto merge of #49305 - SimonSapin:fallible, r=sfackler
bors [Tue, 27 Mar 2018 11:50:10 +0000 (11:50 +0000)]
Auto merge of #49305 - SimonSapin:fallible, r=sfackler

Stabilize TryFrom / TryInto, and tweak impls for integers

Fixes https://github.com/rust-lang/rust/issues/33417 (tracking issue)

----

This adds:

* `impl From<u16> for usize`
* `impl From<i16> for isize`
* `impl From<u8> for isize`

… replacing corresponding `TryFrom<Error=!>` impls. (`TryFrom` still applies through the generic `impl<T, U> TryFrom<U> for T where T: From<U>`.) Their infallibility is supported by the C99 standard which (indirectly) requires pointers to be at least 16 bits.

The remaining `TryFrom` impls that define `type Error = !` all involve `usize` or `isize`. This PR changes them to use `TryFromIntError` instead, since having a return type change based on the target is a portability hazard.

Note: if we make similar assumptions about the *maximum* bit size of pointers (for all targets Rust will ever run on in the future), we could have similar `From` impls converting pointer-sized integers to large fixed-size integers. RISC-V considers the possibility of a 128-bit address space (RV128), which would leave only `impl From<usize> for u128` and `impl From<isize> for u128`. I [found](https://www.cl.cam.ac.uk/research/security/ctsrd/pdfs/20171017a-cheri-poster.pdf) some [things](http://www.csl.sri.com/users/neumann/2012resolve-cheri.pdf) about 256-bit “capabilities”, but I don’t know how relevant that would be to Rust’s `usize` and `isize` types.

I chose conservatively to make no assumption about the future there. Users making their portability decisions and using something like `.try_into().unwrap()`.

----

Since this feature already went through FCP in the tracking issue https://github.com/rust-lang/rust/issues/33417, this PR also proposes **stabilize** the following items:

* The `convert::TryFrom` trait
* The `convert::TryFrom` trait
* `impl<T> TryFrom<&[T]> for &[T; $N]` (for `$N` up to 32)
* `impl<T> TryFrom<&mut [T]> for &mut [T; $N]` (for `$N` up to 32)
* The `array::TryFromSliceError` struct, with impls of `Debug`, `Copy`, `Clone`, and `Error`
* `impl TryFrom<u32> for char`
* The `char::CharTryFromError` struct, with impls of `Copy`, `Clone`, `Debug`, `PartialEq`, `Eq`, `Display`, and `Error`
* Impls of `TryFrom` for all (?) combinations of primitive integer types where `From` isn’t implemented.
* The `num::TryFromIntError` struct, with impls of `Debug`, `Copy`, `Clone`, `Display`, `From<!>`, and `Error`

Some minor remaining questions that I hope can be resolved in this PR:

* Should the impls for error types be unified?
* ~Should `TryFrom` and `TryInto` be in the prelude? `From` and `Into` are.~ (Yes.)

6 years agoRollup merge of #49401 - alercah:format, r=cramertj
kennytm [Tue, 27 Mar 2018 08:47:54 +0000 (10:47 +0200)]
Rollup merge of #49401 - alercah:format, r=cramertj

Add missing '?' to format grammar.

6 years agoRollup merge of #49399 - ehuss:termcolor-update, r=alexcrichton
kennytm [Tue, 27 Mar 2018 08:47:53 +0000 (10:47 +0200)]
Rollup merge of #49399 - ehuss:termcolor-update, r=alexcrichton

Fix diagnostic colors on Windows 10 console.

This updates termcolor to pick up BurntSushi/ripgrep#867.

Fixes #49322.

6 years agoRollup merge of #49395 - petrochenkov:obsolete, r=alexcrichton
kennytm [Tue, 27 Mar 2018 08:47:51 +0000 (10:47 +0200)]
Rollup merge of #49395 - petrochenkov:obsolete, r=alexcrichton

libsyntax: Remove obsolete.rs

This little piece of infra is obsolete (ha-ha) and is unlikely to be used in the future, even if new obsolete syntax appears.

6 years agoAdd back 1.24.1 release notes
Wangshan Lu [Tue, 27 Mar 2018 08:47:50 +0000 (16:47 +0800)]
Add back 1.24.1 release notes

6 years agoRollup merge of #49381 - withoutboats:str_unicode, r=SimonSapin
kennytm [Tue, 27 Mar 2018 08:47:50 +0000 (10:47 +0200)]
Rollup merge of #49381 - withoutboats:str_unicode, r=SimonSapin

Add is_whitespace and is_alphanumeric to str.

The other methods from `UnicodeStr` are already stable inherent
methods on str, but these have not been included.

r? @SimonSapin

6 years agoRollup merge of #49369 - petrochenkov:rprint, r=oli-obk
kennytm [Tue, 27 Mar 2018 08:47:49 +0000 (10:47 +0200)]
Rollup merge of #49369 - petrochenkov:rprint, r=oli-obk

Fix pretty-printing for raw identifiers

6 years agoRollup merge of #49333 - GuillaumeGomez:link-assoc-const, r=QuietMisdreavus
kennytm [Tue, 27 Mar 2018 08:47:48 +0000 (10:47 +0200)]
Rollup merge of #49333 - GuillaumeGomez:link-assoc-const, r=QuietMisdreavus

Fix impl assoc constant link not working

Fixes #49323.

r? @QuietMisdreavus

6 years agoRollup merge of #49223 - GuillaumeGomez:propose-variant-for-E0599, r=cramertj
kennytm [Tue, 27 Mar 2018 08:47:46 +0000 (10:47 +0200)]
Rollup merge of #49223 - GuillaumeGomez:propose-variant-for-E0599, r=cramertj

Propose a variant if it is an enum for E0599

Fixes #49192.

6 years agoRollup merge of #48639 - varkor:sort_by_key-cached, r=bluss
kennytm [Tue, 27 Mar 2018 08:47:44 +0000 (10:47 +0200)]
Rollup merge of #48639 - varkor:sort_by_key-cached, r=bluss

Add slice::sort_by_cached_key as a memoised sort_by_key

At present, `slice::sort_by_key` calls its key function twice for each comparison that is made. When the key function is expensive (which can often be the case when `sort_by_key` is chosen over `sort_by`), this can lead to very suboptimal behaviour.

To address this, I've introduced a new slice method, `sort_by_cached_key`, which has identical semantic behaviour to `sort_by_key`, except that it guarantees the key function will only be called once per element.

Where there are `n` elements and the key function is `O(m)`:
- `slice::sort_by_cached_key` time complexity is `O(m n log m n)`, compared to `slice::sort_by_key`'s `O(m n + n log n)`.
- `slice::sort_by_cached_key` space complexity remains at `O(n + m)`. (Technically, it now reserves a slice of size `n`, whereas before it reserved a slice of size `n/2`.)

`slice::sort_unstable_by_key` has not been given an analogue, as it is important that unstable sorts are in-place, which is not a property that is guaranteed here. However, this also means that `slice::sort_unstable_by_key` is likely to be slower than `slice::sort_by_cached_key` when the key function does not have negligible complexity. We might want to explore this trade-off further in the future.

Benchmarks (for a vector of 100 `i32`s):
```
# Lexicographic: `|x| x.to_string()`
test bench_sort_by_key ... bench:      112,638 ns/iter (+/- 19,563)
test bench_sort_by_cached_key ... bench:       15,038 ns/iter (+/- 4,814)

# Identity: `|x| *x`
test bench_sort_by_key ... bench:        1,346 ns/iter (+/- 238)
test bench_sort_by_cached_key ... bench:        1,839 ns/iter (+/- 765)

# Power: `|x| x.pow(31)`
test bench_sort_by_key ... bench:        3,624 ns/iter (+/- 738)
test bench_sort_by_cached_key ... bench:        1,997 ns/iter (+/- 311)

# Abs: `|x| x.abs()`
test bench_sort_by_key ... bench:        1,546 ns/iter (+/- 174)
test bench_sort_by_cached_key ... bench:        1,668 ns/iter (+/- 790)
```
(So it seems functions that are single operations do perform slightly worse with this method, but for pretty much any more complex key, you're better off with this optimisation.)

I've definitely found myself using expensive keys in the past and wishing this optimisation was made (e.g. for https://github.com/rust-lang/rust/pull/47415). This feels like both desirable and expected behaviour, at the small cost of slightly more stack allocation and minute degradation in performance for extremely trivial keys.

Resolves #34447.

6 years agoRemove TryFrom impls that might become conditionally-infallible with a portability...
Simon Sapin [Mon, 26 Mar 2018 20:48:12 +0000 (22:48 +0200)]
Remove TryFrom impls that might become conditionally-infallible with a portability lint

https://github.com/rust-lang/rust/pull/49305#issuecomment-376293243

6 years agoAuto merge of #49279 - varkor:generated-closure-return-type, r=alexcrichton
bors [Tue, 27 Mar 2018 07:16:29 +0000 (07:16 +0000)]
Auto merge of #49279 - varkor:generated-closure-return-type, r=alexcrichton

Fix implicit closure return type generation for libsyntax

The `lambda` function for constructing closures in libsyntax was explicitly setting the return type to `_`, which resulted in incorrect corresponding syntax (as `|| -> _ x` is not valid, without the enclosing brackets). This meant the generated code, when printed, was invalid.

I also took the opportunity to slightly improve the generated code for the `RustcEncodable::encode` method for unit structs.

Fixes #42213.

6 years agoAuto merge of #49249 - gnzlbg:simd_minmax, r=alexcrichton
bors [Tue, 27 Mar 2018 04:46:32 +0000 (04:46 +0000)]
Auto merge of #49249 - gnzlbg:simd_minmax, r=alexcrichton

implement minmax intrinsics

This adds the `simd_{fmin,fmax}` intrinsics, which do a vertical (lane-wise) `min`/`max` for floating point vectors that's equivalent to Rust's `min`/`max` for `f32`/`f64`.

It might make sense to make `{f32,f64}::{min,max}` use the `minnum` and `minmax` intrinsics as well.

---

~~HELP: I need some help with these. Either I should go to sleep or there must be something that I must be missing. AFAICT I am calling the `maxnum` builder correctly, yet rustc/LLVM seem to insert a call to `llvm.minnum` there instead...~~ EDIT: Rust's LLVM version is too old :/

6 years agoAdd missing '?' to format grammar.
Alexis Hunt [Tue, 27 Mar 2018 01:18:50 +0000 (21:18 -0400)]
Add missing '?' to format grammar.

6 years agoFix diagnostic colors on Windows 10 console.
Eric Huss [Mon, 26 Mar 2018 23:20:11 +0000 (16:20 -0700)]
Fix diagnostic colors on Windows 10 console.

This updates termcolor to pick up BurntSushi/ripgrep#867.

Fixes #49322.

6 years agolibsyntax: Remove obsolete.rs
Vadim Petrochenkov [Mon, 26 Mar 2018 21:45:28 +0000 (00:45 +0300)]
libsyntax: Remove obsolete.rs

6 years agoAdd TryFrom and TryInto to the prelude
Simon Sapin [Mon, 26 Mar 2018 09:17:31 +0000 (11:17 +0200)]
Add TryFrom and TryInto to the prelude

6 years agoStabilize the TryFrom and TryInto traits
Simon Sapin [Fri, 23 Mar 2018 12:52:54 +0000 (13:52 +0100)]
Stabilize the TryFrom and TryInto traits

Tracking issue: https://github.com/rust-lang/rust/issues/33417

6 years agoDon’t use `type Error = !` for target-dependant TryFrom impls.
Simon Sapin [Fri, 23 Mar 2018 12:42:43 +0000 (13:42 +0100)]
Don’t use `type Error = !` for target-dependant TryFrom impls.

Instead, expose apparently-fallible conversions in cases where
the implementation happens to be infallible for a given target.

Having an associated type / return type in a public API change
based on the target is a portability hazard.

6 years agoTryFrom for integers: use From instead for truely-infallible impls
Simon Sapin [Fri, 23 Mar 2018 12:36:08 +0000 (13:36 +0100)]
TryFrom for integers: use From instead for truely-infallible impls

There is precendent in C for having a minimum pointer size, but I don’t feel confident enough about the future to mandate a maximum.

6 years agoRemove mentions of unstable sort_by_cached key from stable documentation
varkor [Mon, 26 Mar 2018 21:24:03 +0000 (22:24 +0100)]
Remove mentions of unstable sort_by_cached key from stable documentation

6 years agoAuto merge of #49053 - alexcrichton:fail-if-build-cargo-twice, r=Mark-Simulacrum
bors [Mon, 26 Mar 2018 21:21:33 +0000 (21:21 +0000)]
Auto merge of #49053 - alexcrichton:fail-if-build-cargo-twice, r=Mark-Simulacrum

rustbuild: Fail the build if we build Cargo twice

This commit updates the `ToolBuild` step to stream Cargo's JSON messages, parse
them, and record all libraries built. If we build anything twice (aka Cargo)
it'll most likely happen due to dependencies being recompiled which is caught by
this check.

6 years agoFix pretty-printing for raw identifiers
Vadim Petrochenkov [Sun, 25 Mar 2018 23:47:04 +0000 (02:47 +0300)]
Fix pretty-printing for raw identifiers

6 years agorustbuild: Fail the build if we build Cargo twice
Alex Crichton [Thu, 15 Mar 2018 17:58:02 +0000 (10:58 -0700)]
rustbuild: Fail the build if we build Cargo twice

This commit updates the `ToolBuild` step to stream Cargo's JSON messages, parse
them, and record all libraries built. If we build anything twice (aka Cargo)
it'll most likely happen due to dependencies being recompiled which is caught by
this check.

6 years agoAuto merge of #49101 - mark-i-m:stabilize_i128, r=nagisa
bors [Mon, 26 Mar 2018 18:41:38 +0000 (18:41 +0000)]
Auto merge of #49101 - mark-i-m:stabilize_i128, r=nagisa

Stabilize 128-bit integers :tada:

cc #35118

EDIT: This should be merged only after the following have been merged:
- [x] https://github.com/rust-lang-nursery/compiler-builtins/pull/236
- [x] https://github.com/rust-lang/book/pull/1230

6 years agoAdd a hash when a TargetPath is displayed
Philipp Oppermann [Mon, 26 Mar 2018 17:01:26 +0000 (19:01 +0200)]
Add a hash when a TargetPath is displayed

6 years agoCanonicalize paths
Philipp Oppermann [Sat, 24 Mar 2018 19:14:59 +0000 (20:14 +0100)]
Canonicalize paths

6 years agoIntroduce a TargetTriple enum to support absolute target paths
Philipp Oppermann [Wed, 14 Mar 2018 14:27:06 +0000 (15:27 +0100)]
Introduce a TargetTriple enum to support absolute target paths

6 years agoAuto merge of #49379 - TimNN:rollup, r=TimNN
bors [Mon, 26 Mar 2018 15:48:06 +0000 (15:48 +0000)]
Auto merge of #49379 - TimNN:rollup, r=TimNN

Rollup of 7 pull requests

- Successful merges: #48693, #48932, #49103, #49170, #49187, #49346, #49353
- Failed merges:

6 years agoAllow niche-filling dataful variants to be represented as a ScalarPair
Anthony Ramine [Mon, 26 Mar 2018 14:26:03 +0000 (16:26 +0200)]
Allow niche-filling dataful variants to be represented as a ScalarPair

6 years agoRemove unnecessary trait import.
boats [Mon, 26 Mar 2018 14:41:45 +0000 (07:41 -0700)]
Remove unnecessary trait import.

6 years agofix last two tidy
Mark Mansi [Sat, 24 Mar 2018 23:19:33 +0000 (18:19 -0500)]
fix last two tidy

6 years agodid i get it right now?
Mark Mansi [Wed, 21 Mar 2018 01:56:53 +0000 (20:56 -0500)]
did i get it right now?

6 years agoUpdate to master of libcompiler_builtins
Mark Mansi [Tue, 20 Mar 2018 15:14:06 +0000 (10:14 -0500)]
Update to master of libcompiler_builtins

6 years agoRemove library feature test
Mark Mansi [Sun, 18 Mar 2018 02:19:36 +0000 (21:19 -0500)]
Remove library feature test

6 years agoFix e0658 ui test
Mark Mansi [Sun, 18 Mar 2018 02:08:32 +0000 (21:08 -0500)]
Fix e0658 ui test

6 years agoupdate test
Mark Mansi [Sun, 18 Mar 2018 01:39:19 +0000 (20:39 -0500)]
update test

6 years agoFix a few more unstables that I missed
Mark Mansi [Sun, 18 Mar 2018 01:10:18 +0000 (20:10 -0500)]
Fix a few more unstables that I missed

6 years agoFix a few more
Mark Mansi [Sat, 17 Mar 2018 16:55:44 +0000 (11:55 -0500)]
Fix a few more

6 years agoFix missed i128 feature gates
Mark Mansi [Sat, 17 Mar 2018 16:46:31 +0000 (11:46 -0500)]
Fix missed i128 feature gates

6 years agoremove unneeded import
Mark Mansi [Sat, 17 Mar 2018 01:38:59 +0000 (20:38 -0500)]
remove unneeded import

6 years agoRename unstable book correctly
Mark Mansi [Sat, 17 Mar 2018 01:21:35 +0000 (20:21 -0500)]
Rename unstable book correctly

6 years agoRename unstable-book chapter
Mark Mansi [Sat, 17 Mar 2018 01:20:06 +0000 (20:20 -0500)]
Rename unstable-book chapter

6 years agoStabilize i128 feature too
Mark Mansi [Sat, 17 Mar 2018 01:15:56 +0000 (20:15 -0500)]
Stabilize i128 feature too

6 years agoUpdate nightly book
Mark Mansi [Sat, 17 Mar 2018 00:54:20 +0000 (19:54 -0500)]
Update nightly book

6 years agoStabilize i128_type
Mark Mansi [Sat, 17 Mar 2018 00:51:49 +0000 (19:51 -0500)]
Stabilize i128_type

6 years agoAdd is_whitespace and is_alphanumeric to str.
boats [Mon, 26 Mar 2018 13:25:31 +0000 (06:25 -0700)]
Add is_whitespace and is_alphanumeric to str.

The other methods from `UnicodeStr` are already stable inherent
methods on str, but these have not been included.

6 years agoRollup merge of #49353 - chisophugis:patch-1, r=Mark-Simulacrum
Tim Neumann [Mon, 26 Mar 2018 13:15:01 +0000 (15:15 +0200)]
Rollup merge of #49353 - chisophugis:patch-1, r=Mark-Simulacrum

Fix confusing doc for `scan`

The comment "the value passed on to the next iteration" confused me since it sounded more like what Haskell's [scanl](http://hackage.haskell.org/package/base-4.11.0.0/docs/Prelude.html#v:scanl) does where the closure's return value serves as both the "yielded value" *and* the new value of the "state".

I tried changing the example to make it clear that the closure's return value is decoupled from the state argument.

6 years agoRollup merge of #49346 - Diggsey:hashmap-get-pair, r=Mark-Simulacrum
Tim Neumann [Mon, 26 Mar 2018 13:14:59 +0000 (15:14 +0200)]
Rollup merge of #49346 - Diggsey:hashmap-get-pair, r=Mark-Simulacrum

Implement get_key_value for HashMap, BTreeMap

Fixes #43143

Follow up from #46992

6 years agoRollup merge of #49187 - alexcrichton:no-cross-docs, r=kennytm
Tim Neumann [Mon, 26 Mar 2018 13:14:58 +0000 (15:14 +0200)]
Rollup merge of #49187 - alexcrichton:no-cross-docs, r=kennytm

rustbuild: Disable docs on cross-compiled builds

This commit disables building documentation on cross-compiled compilers, for
example ARM/MIPS/PowerPC/etc. Currently I believe we're not getting much use out
of these documentation artifacts and they often take 10-15 minutes total to
build as it requires building rustdoc/rustbook and then also generating all the
documentation, especially for the reference and the book itself.

In an effort to cut down on the amount of work that we're doing on dist CI
builders in light of recent timeouts this was some relatively low hanging fruit
to cut which in theory won't have much impact on the ecosystem in the hopes that
the documentation isn't used too heavily anyway.

While initial analysis in #48827 showed only shaving 5 minutes off local builds
the same 5 minute conclusion was drawn from #48826 which ended up having nearly
a half-hour impact on the bots. In that sense I'm hoping that we can land this
and test out what happens on CI to see how it affects timing.

Note that all tier 1 platforms, Windows, Mac, and Linux, will continue to
generate documentation.

6 years agoRollup merge of #49170 - steveklabnik:gh49127, r=nagisa
Tim Neumann [Mon, 26 Mar 2018 13:14:57 +0000 (15:14 +0200)]
Rollup merge of #49170 - steveklabnik:gh49127, r=nagisa

Clarify AcqRel's docs

This implied things that are not true.

Fixes #49127

6 years agoRollup merge of #49103 - glandium:uninitialized, r=cramertj
Tim Neumann [Mon, 26 Mar 2018 13:14:56 +0000 (15:14 +0200)]
Rollup merge of #49103 - glandium:uninitialized, r=cramertj

Use an uninitialized buffer in GenericRadix::fmt_int, like in Display::fmt for numeric types

The code using a slice of that buffer is only ever going to use
bytes that are subsequently initialized.

6 years agoRollup merge of #48932 - Phlosioneer:43601-document-opaque-size, r=KodrAus
Tim Neumann [Mon, 26 Mar 2018 13:14:54 +0000 (15:14 +0200)]
Rollup merge of #48932 - Phlosioneer:43601-document-opaque-size, r=KodrAus

Document when types have OS-dependent sizes

As per issue #43601, types that can change size depending on the
target operating system should say so in their documentation.

I used this template when adding doc comments:

```
The size of a(n) <name> struct may vary depending on the target
operating system, and may change between Rust releases.
```

For enums, I used "instance" instead of "struct".

I added documentation to these types:
```
- std::time::Instant (contains sys::time::Instant)
- std::time::SystemTime (contains sys::time::SystemTime)

- std::io::StdinRaw (contains sys::stdio::Stdin)
- std::io::StdoutRaw (contains sys::stdio::Stdout)
- std::io::Stderr (contains sys::stdio::Stderr)

- std::net::addr::SocketAddrV4 (contains sys::net::netc::sockaddr_in)
- std::net::addr::SocketAddrV6 (contains sys::net::netc::sockaddr_in6)
- std::net::addr::SocketAddr (contains std::net::addr::SocketAddrV4 and SocketAddrV6)
- std::net::ip::Ipv4Addr (contains sys::net::netc::in_addr)
- std::net::ip::Ipv6Addr (contains sys::net::netc::in6_addr)
- std::net::ip::IpAddr (contains std::net::ip::Ipv4Addr and Ipv6Addr)
```

I also found that these types varied in size; however, I don't think they need documentation, as it's already fairly obvious that they change based on different OS's:

```
- std::fs::DirBuilder (contains sys::fs::DirBuilder)
- std::fs::FileType (contains sys::fs::FileType)
- std::fs::Permissions (contains sys::fs::FilePermissions)
- std::fs::OpenOptions (contains sys::fs::OpenOptions)
- std::fs::DirEntry (contains sys::fs::DirEntry)
- std::fs::ReadDir (contains sys::fs::ReadDir)
- std::fs::Metadata (contains sys::fs::FileAttr)
- std::fs::File (contains sys::fs::File)

- std::process::Child (contains sys::process::Process)
- std::process::ChildStdin (contains sys::process::AnonPipe)
- std::process::ChildStdout (contains sys::process::AnonPipe)
- std::process::ChildStderr (contains sys::process::AnonPipe)
- std::process::Command (contains sys::process::Command)
- std::process::Stdio (contains sys::process::Stdio)
- std::process::ExitStatus (contains sys::process::ExitStatus)
- std::process::Output (contains std::process::ExitStatus)

- std::sys_common::condvar::Condvar (contains sys::condvar::Condvar)
- std::sys_common::mutex::Mutex (contains sys::mutex::Mutex)
- std::sys_common::net::LookupHost (contains sys::net::netc::addrinfo)
- std::sys_common::net::TcpStream (contains sys::net::Socket)
- std::sys_common::net::TcpListener (contains sys::net::Socket)
- std::sys_common::net::UdpSocket (contains sys::net::Socket)
- std::sys_common::remutex::ReentrantMutex (contains sys::mutex::ReentrantMutex)
- std::sys_common::rwlock::RWLock (contains sys::rwlock::RWLock)
- std::sys_common::thread_local::Key (contains sys::thread_local::Key)
```
Maybe we should just put a comment about the size of structs in the module-level docs for `fs`, `process`, and `sys_common`?

If anyone can think of other types that can change size, comment below. I'm also open to changing the wording.

closes #43601.

6 years agoRollup merge of #48693 - vorner:doc-name-resolution, r=petrochenkov
Tim Neumann [Mon, 26 Mar 2018 13:14:50 +0000 (15:14 +0200)]
Rollup merge of #48693 - vorner:doc-name-resolution, r=petrochenkov

Some comments and documentation for name resolution crate

Hello

I'm trying to get a grasp of how the name resolution crate works, as part of helping with https://github.com/rust-lang-nursery/rustc-guide/issues/16. Not that I'd be succeeding much, but as I was reading the code, I started to put some notes into it, to help me understand.

I guess I didn't get very far yet, but I'd like to share what I have, in case it might be useful for someone else. I hope these are correct (even if incomplete), but I'll be glad for a fast check in case I put something misleading there.

6 years agoAuto merge of #48346 - emilio:pgo, r=alexcrichton
bors [Mon, 26 Mar 2018 13:00:18 +0000 (13:00 +0000)]
Auto merge of #48346 - emilio:pgo, r=alexcrichton

Add basic PGO support.

This PR adds two mutually exclusive options for profile usage and generation using LLVM's instruction profile generation (the same as clang uses), `-C pgo-use` and `-C pgo-gen`.

See each commit for details.

6 years agoAuto merge of #49255 - cramertj:stable-impl-trait, r=nikomatsakis
bors [Mon, 26 Mar 2018 09:14:23 +0000 (09:14 +0000)]
Auto merge of #49255 - cramertj:stable-impl-trait, r=nikomatsakis

Stabilize impl Trait

Blocked on:

- [x] https://github.com/rust-lang/rust/pull/49041 and
- [ ] completion of FCP in https://github.com/rust-lang/rust/issues/34511#issuecomment-373207183 (3 days from now).

I have not yet done any docs work for this-- I probably won't get to it until this weekend (might be a project for the flight to the all-hands).

6 years agoStabilize conservative_impl_trait
Taylor Cramer [Thu, 22 Mar 2018 01:32:44 +0000 (18:32 -0700)]
Stabilize conservative_impl_trait

6 years agofix tests
gnzlbg [Mon, 26 Mar 2018 08:18:36 +0000 (10:18 +0200)]
fix tests

6 years agoset min-llvm-version 6.0, ignore-emscripten
gnzlbg [Thu, 22 Mar 2018 17:01:35 +0000 (18:01 +0100)]
set min-llvm-version 6.0, ignore-emscripten

6 years agoproperly handle the case when LLVM does not have min/maxnum
gnzlbg [Thu, 22 Mar 2018 15:28:11 +0000 (16:28 +0100)]
properly handle the case when LLVM does not have min/maxnum

6 years agorequire llvm 6
gnzlbg [Thu, 22 Mar 2018 13:48:58 +0000 (14:48 +0100)]
require llvm 6

6 years agoadd tests
gnzlbg [Thu, 22 Mar 2018 08:49:46 +0000 (09:49 +0100)]
add tests

6 years agoimplement minmax intrinsics
gnzlbg [Wed, 21 Mar 2018 20:49:22 +0000 (21:49 +0100)]
implement minmax intrinsics

6 years agorustbuild: Disable docs on cross-compiled builds
Alex Crichton [Mon, 19 Mar 2018 17:58:30 +0000 (10:58 -0700)]
rustbuild: Disable docs on cross-compiled builds

This commit disables building documentation on cross-compiled compilers, for
example ARM/MIPS/PowerPC/etc. Currently I believe we're not getting much use out
of these documentation artifacts and they often take 10-15 minutes total to
build as it requires building rustdoc/rustbook and then also generating all the
documentation, especially for the reference and the book itself.

In an effort to cut down on the amount of work that we're doing on dist CI
builders in light of recent timeouts this was some relatively low hanging fruit
to cut which in theory won't have much impact on the ecosystem in the hopes that
the documentation isn't used too heavily anyway.

While initial analysis in #48827 showed only shaving 5 minutes off local builds
the same 5 minute conclusion was drawn from #48826 which ended up having nearly
a half-hour impact on the bots. In that sense I'm hoping that we can land this
and test out what happens on CI to see how it affects timing.

Note that all tier 1 platforms, Windows, Mac, and Linux, will continue to
generate documentation.

6 years agoStabilize universal_impl_trait
Taylor Cramer [Thu, 22 Mar 2018 00:44:21 +0000 (17:44 -0700)]
Stabilize universal_impl_trait

6 years agoAuto merge of #49351 - pthariensflame:patch-1, r=oli-obk
bors [Mon, 26 Mar 2018 05:09:44 +0000 (05:09 +0000)]
Auto merge of #49351 - pthariensflame:patch-1, r=oli-obk

Minor message/label formatting consistency fix.

The unimplemented label for `Termination` was missing some backticks for consistency with the message.

6 years agoAuto merge of #49341 - alexcrichton:more-balance, r=kennytm
bors [Mon, 26 Mar 2018 02:39:28 +0000 (02:39 +0000)]
Auto merge of #49341 - alexcrichton:more-balance, r=kennytm

appveyor: Move run-pass-fulldeps to extra builders

We've made headway towards splitting the test suite across two appveyor builders
and this moves one more tests suite between builders. The last [failed
build][fail] had its longest running test suite and I've moved that to the
secondary builder.

cc #48844

[fail]: https://ci.appveyor.com/project/rust-lang/rust/build/1.0.6782

6 years agoAuto merge of #49297 - scottmcm:offset-from, r=dtolnay
bors [Mon, 26 Mar 2018 00:15:34 +0000 (00:15 +0000)]
Auto merge of #49297 - scottmcm:offset-from, r=dtolnay

Introduce unsafe offset_from on pointers

Adds intrinsics::exact_div to take advantage of the unsafe, which reduces the implementation from
```asm
    sub rcx, rdx
    mov rax, rcx
    sar rax, 63
    shr rax, 62
    lea rax, [rax + rcx]
    sar rax, 2
    ret
```
down to
```asm
    sub rcx, rdx
    sar rcx, 2
    mov rax, rcx
    ret
```
(for `*const i32`)

See discussion on the `offset_to` tracking issue https://github.com/rust-lang/rust/issues/41079

Some open questions
- Would you rather I split the intrinsic PR from the library PR?
- Do we even want the safe version of the API?  https://github.com/rust-lang/rust/issues/41079#issuecomment-374426786  I've added some text to its documentation that even if it's not UB, it's useless to use it between pointers into different objects.

and todos
- [x] ~~I need to make a codegen test~~ Done
- [x] ~~Can the subtraction use nsw/nuw?~~ No, it can't https://github.com/rust-lang/rust/pull/49297#discussion_r176697574
- [x] ~~Should there be `usize` variants of this, like there are now `add` and `sub` that you almost always want over `offset`?  For example, I imagine `sub_ptr` that returns `usize` and where it's UB if the distance is negative.~~ Can wait for later; C gives a signed result https://github.com/rust-lang/rust/issues/41079#issuecomment-375842235, so we might as well, and this existing to go with `offset` makes sense.

6 years agoImplement get_key_value for HashMap, BTreeMap
Diggory Blake [Mon, 25 Dec 2017 00:00:04 +0000 (00:00 +0000)]
Implement get_key_value for HashMap, BTreeMap

6 years agoAuto merge of #49212 - kyrias:strip-debug-no-debuginfo, r=michaelwoerister
bors [Sun, 25 Mar 2018 21:46:15 +0000 (21:46 +0000)]
Auto merge of #49212 - kyrias:strip-debug-no-debuginfo, r=michaelwoerister

Pass --strip-debug to GccLinker when building without debuginfo

C.f. #46034

---

This brings a hello-world built by passing rustc no command line options from 2.9M to 592K on Linux.

(This might need to special case MacOS or Windows, not sure if the linkers there support `--strip-debug`, and there is an annoying lack of dependable docs for the linkers there.)

6 years agopgo: Blindly try to fix Windows build.
Emilio Cobos Álvarez [Sun, 25 Mar 2018 21:17:47 +0000 (23:17 +0200)]
pgo: Blindly try to fix Windows build.

6 years agoupdate wording as per feedback
Steve Klabnik [Sun, 25 Mar 2018 12:19:27 +0000 (14:19 +0200)]
update wording as per feedback

6 years agoModify tests
Alexander Ronald Altman [Sun, 25 Mar 2018 06:29:57 +0000 (01:29 -0500)]
Modify tests

6 years agoMinor formatting consistency fix.
Alexander Ronald Altman [Sun, 25 Mar 2018 05:15:50 +0000 (00:15 -0500)]
Minor formatting consistency fix.

6 years agoFix confusing doc for `scan`
Sean Silva [Sun, 25 Mar 2018 05:31:17 +0000 (22:31 -0700)]
Fix confusing doc for `scan`

The comment "the value passed on to the next iteration" confused me since it sounded more like what Haskell's [scanl](http://hackage.haskell.org/package/base-4.11.0.0/docs/Prelude.html#v:scanl) does where the closure's return value serves as both the "yielded value" *and* the new value of the "state".

I tried changing the example to make it clear that the closure's return value is decoupled from the state argument.

6 years agoAuto merge of #49315 - TheDan64:smaller_unsafe_block, r=joshtriplett
bors [Sun, 25 Mar 2018 05:26:58 +0000 (05:26 +0000)]
Auto merge of #49315 - TheDan64:smaller_unsafe_block, r=joshtriplett

Reduce scope of unsafe block in sun_path_offset

I reduced the scope of the unsafe block to the `uninitialized` call which is the only actual unsafe bit.

6 years agoAdd backticks
Phlosioneer [Sun, 25 Mar 2018 03:41:34 +0000 (23:41 -0400)]
Add backticks

6 years agoFix doctest mutability copy-pasta
Scott McMurray [Sun, 25 Mar 2018 03:41:20 +0000 (20:41 -0700)]
Fix doctest mutability copy-pasta

6 years agoDocumentation and naming improvements
Scott McMurray [Sun, 25 Mar 2018 03:37:31 +0000 (20:37 -0700)]
Documentation and naming improvements

6 years agoAuto merge of #49284 - alexcrichton:use-our-own-cache, r=kennytm
bors [Sun, 25 Mar 2018 02:42:58 +0000 (02:42 +0000)]
Auto merge of #49284 - alexcrichton:use-our-own-cache, r=kennytm

ci: Don't use Travis caches for docker images

This commit moves away from caching on Travis to our own caching on S3 for
caching docker layers between builds. Unfortunately the Travis caches have over
time had a few critical pain points:

* Caches are only updated for successful builds, meaning that if a build times
  out or fails in a different location the sucessfully-created docker images
  isn't always cached. While this makes sense as a general rule of caches it
  hurts our use cases.

* Caches are per-branch and builder which means that we don't have a separate
  cache on each release channel. All our merges go through the `auto` branch
  which means that they're all sharing the same cache, even those for merging to
  master/beta. This means that PRs which switch between master/beta will keep
  rebuilting and having cache misses.

* Caches have historically been invaliated somewhat regularly a little more
  aggressively than we'd want (I think).

* We don't always need to update the contents of the cache if the Docker image
  didn't change at all, and saving off the docker layers can sometimes be quite
  expensive.

For all these reasons this commit drops the usage of Travis's built-in caching
support. Instead our own caching is used by storing blobs to S3. Normally this
would be a very risky endeavour but we're basically priming a cache for a cache
(docker) so if we get this wrong the failure mode is longer builds, not stale
caches. We'll notice that pretty quickly and hopefully fix it!

The logic here is inserted directly into the `src/ci/docker/run.sh` script to
download an image based on a shasum of the `Dockerfile` and other assorted files.
This blob, if found, is loaded into docker and we record what layers were
inserted. After docker finishes the build (hopefully quickly with lots of cache
hits) we then see the sha of the final image. If it's one of the layers we
loaded then there's no need to update the cache. Otherwise we upload our layers
to the global cache, possibly overwriting what we previously just downloaded.

This is hopefully a step towards mitigating #49278 although it doesn't
completely fix it as it means we'll still probably have to retry builds that
bust the cache.

6 years agoPolyfill LLVMBuildExactUDiv
Scott McMurray [Sun, 25 Mar 2018 02:15:12 +0000 (19:15 -0700)]
Polyfill LLVMBuildExactUDiv

It was added 32 days after LLVM 3.9 shipped.

6 years agopgo: Move the tests to run-make-fulldeps, and make the profile file be in the tmp...
Emilio Cobos Álvarez [Sun, 25 Mar 2018 01:29:15 +0000 (03:29 +0200)]
pgo: Move the tests to run-make-fulldeps, and make the profile file be in the tmp directory properly.

6 years agoMove linker code to the Linker trait instead.
Emilio Cobos Álvarez [Mon, 19 Mar 2018 21:29:58 +0000 (22:29 +0100)]
Move linker code to the Linker trait instead.

6 years agotry to fix the build on older LLVM versions.
Emilio Cobos Álvarez [Thu, 15 Mar 2018 15:56:45 +0000 (16:56 +0100)]
try to fix the build on older LLVM versions.

6 years agolibrustc_trans: Mark some profiler symbols as exported to avoid LTO removing them.
Emilio Cobos Álvarez [Tue, 13 Mar 2018 11:40:57 +0000 (12:40 +0100)]
librustc_trans: Mark some profiler symbols as exported to avoid LTO removing them.

6 years agolibrustc_trans: Turn PGO diagnostics into warnings.
Emilio Cobos Álvarez [Mon, 12 Mar 2018 20:18:01 +0000 (21:18 +0100)]
librustc_trans: Turn PGO diagnostics into warnings.

They should at least be that, they usually warn about control flow mismatches,
and or the profile being useless, which looks like at least a warning to me.

Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>