Commit Graph

90050 Commits

Author SHA1 Message Date
Mazdak Farrokhzad f19bec89d7 Rollup merge of #58122 - matthieu-m:range_incl_perf, r=dtolnay
RangeInclusive internal iteration performance improvement.

Specialize `Iterator::try_fold` and `DoubleEndedIterator::try_rfold` to improve code generation in all internal iteration scenarios.

This changes brings the performance of internal iteration with `RangeInclusive` on par with the performance of iteration with `Range`:

 - Single conditional jump in hot loop,
 - Unrolling and vectorization,
 - And even Closed Form substitution.

Unfortunately, it only applies to internal iteration. Despite various attempts at stream-lining the implementation of `next` and `next_back`, LLVM has stubbornly refused to optimize external iteration appropriately, leaving me with a choice between:

 - The current implementation, for which Closed Form substitution is performed, but which uses 2 conditional jumps in the hot loop when optimization fail.
 - An implementation using a `is_done` boolean, which uses 1 conditional jump in the hot loop when optimization fail, allowing unrolling and vectorization, but for which Closed Form substitution fails.

In the absence of any conclusive evidence as to which usecase matters most, and with no assurance that the lack of Closed Form substitution is not indicative of other optimizations being foiled, there is no way
to pick one implementation over the other, and thus I defer to the statu quo as far as `next` and `next_back` are concerned.
2019-02-23 09:25:12 +01:00
Mazdak Farrokhzad c49da5bfe5 Rollup merge of #58100 - h-michael:librustdoc-2018, r=Centril
Transition librustdoc to Rust 2018

#58099
2019-02-23 09:25:11 +01:00
Hirokazu Hata 1fe87df104 Fix tidy check errors 2019-02-23 17:02:57 +09:00
Hirokazu Hata 1932d7a52d Transition librustdoc to 2018 edition 2019-02-23 16:40:07 +09:00
bors 082c86175f Auto merge of #58644 - Centril:rollup, r=Centril
Rollup of 17 pull requests

Successful merges:

 - #57656 (Deprecate the unstable Vec::resize_default)
 - #58059 (deprecate before_exec in favor of unsafe pre_exec)
 - #58064 (override `VecDeque::try_rfold`, also update iterator)
 - #58198 (Suggest removing parentheses surrounding lifetimes)
 - #58431 (fix overlapping references in BTree)
 - #58555 (Add a note about 2018e if someone uses `try {` in 2015e)
 - #58588 (remove a bit of dead code)
 - #58589 (cleanup macro after 2018 transition)
 - #58591 (Dedup a rustdoc diagnostic construction)
 - #58600 (fix small documentation typo)
 - #58601 (Search for target_triple.json only if builtin target not found)
 - #58606 (Docs: put Future trait into spotlight)
 - #58607 (Fixes #58586: Make E0505 erronous example fail for the 2018 edition)
 - #58615 (miri: explain why we use static alignment in ref-to-place conversion)
 - #58620 (introduce benchmarks of BTreeSet.intersection)
 - #58621 (Update miri links)
 - #58632 (Make std feature list sorted)

Failed merges:

r? @ghost
2019-02-22 21:32:15 +00:00
Mazdak Farrokhzad a8a343a787 Rollup merge of #58632 - matklad:reduce-contention, r=Centril
Make std feature list sorted

This helps to avoid merge conflicts when concurrent PRs append features to the end of the list.
2019-02-22 14:58:16 +01:00
Mazdak Farrokhzad 40d40a3480 Rollup merge of #58621 - phansch:update_miri_links, r=oli-obk
Update miri links

Miri has been moved to `rust-lang` a couple of days ago.
2019-02-22 14:58:15 +01:00
Mazdak Farrokhzad a2a2b7b749 Rollup merge of #58620 - ssomers:btreeset_intersection_benchmarks, r=KodrAus
introduce benchmarks of BTreeSet.intersection

16 tests combining 4 kinds of contents with different sizes exposing edge cases.
The ones with asymmetric sizes are addressed by https://github.com/rust-lang/rust/pull/58577.
The pos_vs_neg cases seems (are were meant to be) the same as the neg_vs_pos case (same thing, reverse order) but reality shows a surprsing 25% difference.
2019-02-22 14:58:14 +01:00
Mazdak Farrokhzad 9695b80647 Rollup merge of #58615 - RalfJung:ref-to-place-alignment, r=oli-obk
miri: explain why we use static alignment in ref-to-place conversion

@eddyb @oli-obk do you think this makes sense? Or should we use the run-time alignment (`align_of_val`)? I am a bit worried about custom DSTs, but that affects way more areas of Miri so I'd ignore them for now.

r? @oli-obk
2019-02-22 14:58:12 +01:00
Mazdak Farrokhzad 59f1a563d5 Rollup merge of #58607 - gurgalex:fail_E0505_for_2018_edition, r=matthewjasper
Fixes #58586: Make E0505 erronous example fail for the 2018 edition

The original example worked for 2015, but not the 2018 edition of Rust.

Borrowing the moved value after ownership is transferred seems required for 2018.

[this](https://github.com/rust-lang/rust/compare/rust-lang:f66e469...gurgalex:b2a02c8#diff-4ca866aea4a6efecd732f1975faaad88R1564) line though is correct for 2018, but not for the 2015 edition.

Fix #58586
2019-02-22 14:58:11 +01:00
Mazdak Farrokhzad b28a32fba7 Rollup merge of #58606 - stjepang:put-future-into-spotlight, r=alexcrichton
Docs: put Future trait into spotlight

If a function returns a type that implements `Future`, there should be a small "i" symbol next to it indicating the return type implements an important trait.
2019-02-22 14:58:09 +01:00
Mazdak Farrokhzad 555df2bba1 Rollup merge of #58601 - gnzlbg:json_error, r=oli-obk
Search for target_triple.json only if builtin target not found

Before this commit, if the builtin target was found, but an error
happened when instantiating it (e.g. validating the target
specification file failed, etc.), then we ignored those errors
and proceeded to try to find a `target_triple.json` file, and if
that failed, reported that as an error.

With this commit, if rustc is supposed to provide the builtin target,
and something fails while instantiating it, that error will
get properly propagated.

r? @oli-obk
2019-02-22 14:58:08 +01:00
Mazdak Farrokhzad 575a209624 Rollup merge of #58600 - llogiq:documentation-tests-typo, r=frewsxcv
fix small documentation typo

Thanks to @stjepang for catching my mistake.
2019-02-22 14:58:07 +01:00
Mazdak Farrokhzad 1d0d94a650 Rollup merge of #58591 - dwijnand:dedup-a-rustdoc-diag-construction, r=GuillaumeGomez
Dedup a rustdoc diagnostic construction

None
2019-02-22 14:58:06 +01:00
Mazdak Farrokhzad aa3779b4e9 Rollup merge of #58589 - matklad:remove-hack, r=petrochenkov
cleanup macro after 2018 transition

We can now use `?`
2019-02-22 14:58:04 +01:00
Mazdak Farrokhzad 94817aa87a Rollup merge of #58588 - matklad:dead-code, r=petrochenkov
remove a bit of dead code

[Six years](https://github.com/rust-lang/rust/commit/5dc5efefd47527067ab5b7862d89a99da4824f49) seem to be a long enough transition period 🤣
2019-02-22 14:58:03 +01:00
Mazdak Farrokhzad bcb7dce75c Rollup merge of #58555 - scottmcm:try-2015, r=Centril
Add a note about 2018e if someone uses `try {` in 2015e

Inspired by https://github.com/rust-lang/rust/issues/58491, where a `try_blocks` example was accidentally run in 2015, which of course produces a bunch of errors.

What's the philosophy about gating for this?  The keyword is stably a keyword in 2018, so I haven't gated it for now but am not mentioning what the keyword _does_.  Let me know if I should do differently.

Resolves #53672
2019-02-22 14:58:02 +01:00
Mazdak Farrokhzad 42b9a046d4 Rollup merge of #58431 - RalfJung:btree, r=Mark-Simulacrum
fix overlapping references in BTree

This fixes two kinds of overlapping references in BTree (both found by running the BTree test suite in Miri).

In `into_slices_mut`, we did `k.into_key_slice_mut()` followed by `self.into_val_slice_mut()` (where `k` is a copy of `self`). Calling `into_val_slice_mut` calls `self.len()`, which creates a shared reference to `NodeHeader`, which unfortunately (due to padding) overlaps with the mutable reference returned by `into_key_slice_mut`.  Hence the key slice got (partially) invalidated.  The fix is to avoid creating an `&NodeHeader` after the first slice got created.

In the iterators, we used to first create the references that will be returned, and then perform the walk on the tree.  Walking the tree creates references (such as `&mut InternalNode`) that overlap with all of the keys and values stored in a pointer; in particular, they overlap with the references the iterator will later return. This is fixed by reordering the operations of walking the tree and obtaining the inner references.

The test suite still passes (and it passes in Miri now!), but there is a lot of code here that I do not understand...
2019-02-22 14:58:00 +01:00
Mazdak Farrokhzad 894141b57d Rollup merge of #58198 - igorsdv:suggest-removing-parentheses-surrounding-lifetimes, r=estebank
Suggest removing parentheses surrounding lifetimes

Fixes #57386.

r? @estebank
2019-02-22 14:57:59 +01:00
Mazdak Farrokhzad 70cc6c980c Rollup merge of #58064 - llogiq:vec-deque-try-rfold, r=scottmcm
override `VecDeque::try_rfold`, also update iterator

This keeps the slice based iteration and updates the iterator state after each slice. It also uses a loop to reduce the amount of code.

This uses unsafe code, so some thorough review would be appreciated. Cc @RalfJung
2019-02-22 14:57:58 +01:00
Mazdak Farrokhzad ec8ef1836a Rollup merge of #58059 - RalfJung:before_exec, r=alexcrichton
deprecate before_exec in favor of unsafe pre_exec

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

As per the [lang team decision](https://github.com/rust-lang/rust/issues/39575#issuecomment-442993358):

> The language team agreed that before_exec should be unsafe, and leaves the details of a transition plan to the libs team.

Cc @alexcrichton @rust-lang/libs how would you like to proceed?
2019-02-22 14:57:56 +01:00
Mazdak Farrokhzad 0bcb66469c Rollup merge of #57656 - scottmcm:deprecate-resize_default, r=SimonSapin
Deprecate the unstable Vec::resize_default

As a way to either get additional feedback to stabilize or help move nightly users off it.

Tracking issue: https://github.com/rust-lang/rust/issues/41758#issuecomment-449719961

r? @SimonSapin
2019-02-22 14:57:55 +01:00
bors e1c6d00574 Auto merge of #57997 - nitnelave:master, r=RalfJung
Wrap write_bytes in a function. Move docs

This will allow us to add debug assertions.
See issue #53871.
2019-02-22 13:52:41 +00:00
Aleksey Kladov 88d55f537d Make std feature list sorted
This helps to avoid merge conflicts when concurrent PRs append
features to the end of the list.
2019-02-22 11:04:10 +03:00
bors 1005f3bac7 Auto merge of #56113 - spastorino:erroneous-loop-diagnostic-in-nll, r=pnkfelix
Erroneous loop diagnostic in nll

Closes #53773

r? @nikomatsakis
2019-02-22 06:52:39 +00:00
bors c6fd02772b Auto merge of #58574 - RalfJung:pin, r=Mark-Simulacrum
improve Pin documentation

Incorporates a bunch of the documentation-related comments that came up when discussing `Pin` stabilization.

Cc @alexcrichton @withoutboats @cramertj @jonhoo

Fixes https://github.com/rust-lang/rust/issues/58130
2019-02-22 04:11:23 +00:00
bors d1f8970bd1 Auto merge of #58616 - vertexclique:destabilize-fixed-width-atomic-integers, r=dtolnay
Destabilize fixed-width const defined atomic integers

With this PR version 1.34.0 onwards const declarations of atomic integers will be unstable.

* Closes https://github.com/rust-lang/rust/issues/58089
* Reverts partially: https://github.com/rust-lang/rust/pull/57425
2019-02-22 01:29:34 +00:00
Ralf Jung 497439c199 take a bit more space for new_unchecked examples 2019-02-21 23:13:49 +01:00
bors 8a1d0defdf Auto merge of #58592 - nikomatsakis:universe-leak-check, r=aturon
Re-implement leak check in terms of universes

This PR temporarily restores the leak-check, but implemented in terms of universes. This is not because the leak check behavior was necessarily **correct**, but because (a) we may want to have a transition period and because (b) we want to have more breathing room to work through the full implications of handling higher-ranked types correctly. Note that this PR builds atop https://github.com/rust-lang/rust/pull/58056.

Fixes #58451
Fixes #46989
Fixes #57639

r? @aturon
cc @arielb1, @lqd

~~Temporary note: I've not finished running `./x.py test` locally -- I'm confident a lot of error messages in tests will need updating. I sort of expect them to revert to the older, (imo) less good error messages, which is mildly unfortunate. There might be a way to preserve the new error messages, not sure.~~
2019-02-21 21:35:21 +00:00
Philipp Hansch 36f665239d Fix more nursery links in CONTRIBUTING.md 2019-02-21 20:58:56 +01:00
Philipp Hansch 4867a8c4fa Update miri links
Miri has been moved to `rust-lang` a couple of days ago.
2019-02-21 19:26:45 +01:00
Niko Matsakis 33d3598e3b partially revert 904a0bde93
This preserves the error you currently get on stable for the
old-lub-glb-object.rs test.
2019-02-21 12:50:13 -05:00
bors 633d75ac17 Auto merge of #58584 - ehuss:update-cargo, r=alexcrichton
Update cargo

9 commits in 865cb70106a6b1171a500ff68f93ab52eea56e72..b33ce7fc9092962b0657b4c25354984b5e5c47e4
2019-02-10 15:49:37 +0000 to 2019-02-19 18:42:50 +0000
- Don't retry invalid credentials from git credential helpers (rust-lang/cargo#6681)
- Fix some typos in resolver tests (rust-lang/cargo#6682)
- Add an unstable option to build proc macros for both the host and the target (rust-lang/cargo#6547)
- Test cases proving RUSTC_WRAPPER can be a relative path (rust-lang/cargo#6638)
- Add support for Azure DevOps (rust-lang/cargo#6264)
- Update docs for removed `patch` restriction. (rust-lang/cargo#6663)
- Fix incorrect help message (rust-lang/cargo#6555)
- Stabilize Alternative Registries (rust-lang/cargo#6654)
- Having a [patch] section when publishing is not an error (rust-lang/cargo#6535)
2019-02-21 17:18:53 +00:00
Niko Matsakis 21e9478366 update test files to reflect new output
One surprise: old-lub-glb-object.rs, may indicate a bug
2019-02-21 11:32:17 -05:00
Niko Matsakis 561ce442de restore the actual leak-check 2019-02-21 11:32:17 -05:00
Niko Matsakis 0c94ea0bf1 introduce a dummy leak check and invoke it in all the right places
This set of diffs was produced by combing through
b68fad670b and seeing where the
`leak_check` used to be invoked and how.
2019-02-21 11:32:17 -05:00
Niko Matsakis 2cbe07b5b3 reintroduce commit_if_ok calls to subtype_predicate 2019-02-21 11:32:17 -05:00
Niko Matsakis 6cb4ffbe14 reintroduce commit_if_ok call into higher_ranked_sub 2019-02-21 11:32:17 -05:00
Niko Matsakis 3cd286bac2 s/skol_/placeholder_/ 2019-02-21 11:32:17 -05:00
Stein Somers 09a24545a8 introduce benchmarks of BTreeSet.intersection 2019-02-21 17:26:10 +01:00
Ralf Jung 811af4289c fix link 2019-02-21 17:18:18 +01:00
Ralf Jung b01f81be74 remark about the one place where place computation calls size_and_align_of 2019-02-21 16:14:31 +01:00
Ralf Jung 32a9614a4e this is for you, tidy 2019-02-21 16:05:49 +01:00
bors fd42f24b01 Auto merge of #58597 - pietroalbini:appveyor-gce, r=alexcrichton
ci: switch appveyor to gce builders to try debugging the 259 failure

r? @alexcrichton
2019-02-21 14:34:49 +00:00
Ralf Jung 6b88007473 explain unsafe 2019-02-21 15:33:55 +01:00
Ralf Jung bcc55e5e79 we only list some examples of basic types 2019-02-21 15:31:09 +01:00
Ralf Jung 2db0e0d65c tweaks and fix weird space 2019-02-21 15:30:31 +01:00
Mazdak Farrokhzad e61a8a94f7 Apply suggestions from code review
Co-Authored-By: RalfJung <post@ralfj.de>
2019-02-21 15:28:46 +01:00
Mahmut Bulut 99d67ca3b8 Destabilize fixed-width const defined atomic integers
* With this PR 1.34.0 onwards const declarations of atomic integers will be
  unstable.
2019-02-21 13:57:51 +01:00
Ralf Jung 0f6d36375f explain why we use static alignment in ref-to-place conversion 2019-02-21 13:15:59 +01:00