Commit Graph

105237 Commits

Author SHA1 Message Date
Dylan DPC
68130dd2ae
Rollup merge of #71905 - mibac138:x-cmd-alias, r=Mark-Simulacrum
Add command aliases from Cargo to x.py commands

Fixes #71357
2020-05-06 13:22:19 +02:00
Dylan DPC
e4bda619d5
Rollup merge of #71889 - RalfJung:rwlock, r=Amanieu
Explain our RwLock implementation

Turns out that [with the latest POSIX docs](https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_wrlock.html), our `RwLock` implementation is actually correct. However, we cannot fully rely on that due to bugs in older glibc (fix released in 2016). Update the comments to explain that.

I also clarified our Mutex docs a bit and fixed another instance of https://github.com/rust-lang/rust/pull/55865.

r? @Amanieu
Fixes https://github.com/rust-lang/rust/issues/53127
2020-05-06 13:22:17 +02:00
Dylan DPC
3f56b84182
Rollup merge of #71727 - hbina:simplified_usage, r=Mark-Simulacrum
SipHasher with keys initialized to 0 should just use new()

I believe that is what the `new()` is for, for good reasons.
2020-05-06 13:22:13 +02:00
Dylan DPC
78a25cb10e
Rollup merge of #71510 - ssomers:btreemap_iter_intertwined, r=Mark-Simulacrum
Btreemap iter intertwined

3 commits:

1. Introduced benchmarks for `BTreeMap::iter()`. Benchmarks named `iter_20` were of the whole iteration process, so I renamed them. Also the benchmarks of `range` that I wrote earlier weren't very good. I included an (awkwardly named) one that compares `iter()` to `range(..)` on the same set, because the contrast is surprising:
```
 name                                           ns/iter
 btree::map::range_unbounded_unbounded          28,176
 btree::map::range_unbounded_vs_iter            89,369
```
Both dig up the same pair of leaf edges. `range(..)` also checks that some keys are correctly ordered, the only thing `iter()` does more is to copy the map's length.

2. Slightly refactoring the code to what I find more readable (not in chronological order of discovery), boosts performance:
```
>cargo-benchcmp.exe benchcmp a1 a2 --threshold 5
 name                                   a1 ns/iter  a2 ns/iter  diff ns/iter   diff %  speedup
 btree::map::find_rand_100              18          17                    -1   -5.56%   x 1.06
 btree::map::first_and_last_10k         64          71                     7   10.94%   x 0.90
 btree::map::iter_0                     2,939       2,209               -730  -24.84%   x 1.33
 btree::map::iter_1                     6,845       2,696             -4,149  -60.61%   x 2.54
 btree::map::iter_100                   8,556       3,672             -4,884  -57.08%   x 2.33
 btree::map::iter_10k                   9,292       5,884             -3,408  -36.68%   x 1.58
 btree::map::iter_1m                    10,268      6,510             -3,758  -36.60%   x 1.58
 btree::map::iteration_mut_100000       478,575     453,050          -25,525   -5.33%   x 1.06
 btree::map::range_unbounded_unbounded  28,176      36,169             7,993   28.37%   x 0.78
 btree::map::range_unbounded_vs_iter    89,369      38,290           -51,079  -57.16%   x 2.33
 btree::set::clone_100_and_remove_all   4,801       4,245               -556  -11.58%   x 1.13
 btree::set::clone_10k_and_remove_all   529,450     496,030          -33,420   -6.31%   x 1.07
```
But you can tell from the `range_unbounded_*` lines that, despite an unwarranted, vengeful attack on the range_unbounded_unbounded benchmark, this change still doesn't allow `iter()` to catch up with `range(..)`.

3. I guess that `range(..)` copes so well because it intertwines the leftmost and rightmost descend towards leaf edges, doing the two root node accesses close together, perhaps exploiting a CPU's internal pipelining? So the third commit distils a version of `range_search` (which we can't use directly because of the `Ord` bound), and we get another boost:
```
cargo-benchcmp.exe benchcmp a2 a3 --threshold 5
 name                                   a2 ns/iter  a3 ns/iter  diff ns/iter   diff %  speedup
 btree::map::first_and_last_100         40          43                     3    7.50%   x 0.93
 btree::map::first_and_last_10k         71          64                    -7   -9.86%   x 1.11
 btree::map::iter_0                     2,209       1,719               -490  -22.18%   x 1.29
 btree::map::iter_1                     2,696       2,205               -491  -18.21%   x 1.22
 btree::map::iter_100                   3,672       2,943               -729  -19.85%   x 1.25
 btree::map::iter_10k                   5,884       3,929             -1,955  -33.23%   x 1.50
 btree::map::iter_1m                    6,510       5,532               -978  -15.02%   x 1.18
 btree::map::iteration_mut_100000       453,050     476,667           23,617    5.21%   x 0.95
 btree::map::range_included_excluded    405,075     371,297          -33,778   -8.34%   x 1.09
 btree::map::range_included_included    427,577     397,440          -30,137   -7.05%   x 1.08
 btree::map::range_unbounded_unbounded  36,169      28,175            -7,994  -22.10%   x 1.28
 btree::map::range_unbounded_vs_iter    38,290      30,838            -7,452  -19.46%   x 1.24
```
But I think this is just fake news from the microbenchmarking media. `iter()` is still trying to catch up with `range(..)`. And we can sure do without another function. So I would skip this 3rd commit.

r? @Mark-Simulacrum
2020-05-06 13:22:05 +02:00
bors
8da5869fb7 Auto merge of #69464 - Marwes:detach_undo_log, r=nikomatsakis
perf: Unify the undo log of all snapshot types

Extracted from #69218 and extended to all the current snapshot types.

Since snapshotting is such a frequent action in the compiler and many of the scopes execute so little work, the act of creating the snapshot and rolling back empty/small snapshots end up showing in perf. By unifying all the logs into one the creation of snapshots becomes significantly cheaper at the cost of some complexity when combining the log with the specific data structures that are being mutated.

Depends on https://github.com/rust-lang-nursery/ena/pull/29
2020-05-06 07:03:31 +00:00
bors
43271a39ad Auto merge of #71875 - Xanewok:update-rls, r=tmandry
Update RLS

In addition to fixing the toolstate, this also changes the default
compilation model to the out-of-process one, which should hopefully
target considerable memory usage for long-running instances of the RLS.

Fixes #71753

r? @ghost
2020-05-05 23:52:56 +00:00
Tyler Mandry
3b8358e682 Unify winapi features for tools 2020-05-05 12:50:58 -07:00
Igor Matuszewski
b512b1c7af Unify some syn 1.0 et al. features for tools 2020-05-05 15:29:15 +02:00
Igor Matuszewski
1dd0e3c38f Update RLS
In addition to fixing the toolstate, this also changes the default
compilation model to the out-of-process one, which should hopefully
target considerable memory usage for long-running instances of the RLS.
2020-05-05 14:16:26 +02:00
Dylan DPC
3efcba693a
Rollup merge of #71897 - alexcrichton:embed-bitcode-docs, r=nnethercote
Improve docs for embed-bitcode and linker-plugin-lto

Follow-up from #71716 I wasn't able to add in time.
2020-05-05 12:55:13 +02:00
Dylan DPC
67a7b7a329
Rollup merge of #71894 - mibac138:semicolon-not-always-helpful, r=estebank
Suggest removing semicolon in last expression only if it's type is known

Fixes #67971

Is there a syntax for explicitly checking if a note doesn't exist in test output? Something like `//~ !NOTE ...`

I believe r? @estebank deals with diagnostics.
2020-05-05 12:55:11 +02:00
Dylan DPC
a49d2b7a74
Rollup merge of #71830 - oli-obk:subrepo_funness, r=Mark-Simulacrum
Remove clippy from some leftover lists of "possibly failing" tools

https://github.com/rust-lang/rust/pull/70655 successfully made clippy get built and tested on CI on every merge, but the lack of emitted toolstate info caused the toolstate to get updated to test-fail. We should remove clippy entirely from toolstate, as it now is always test-pass.

The changes made in this PR reflect what we do for `rustdoc`, which is our preexisting tool that is gated on CI.

r? @Mark-Simulacrum
2020-05-05 12:55:09 +02:00
Dylan DPC
12fc1e0fa5
Rollup merge of #69984 - lenary:lenary/force-uwtables, r=hanna-kruppe
Add Option to Force Unwind Tables

When panic != unwind, `nounwind` is added to all functions for a target.
This can cause issues when a panic happens with RUST_BACKTRACE=1, as
there needs to be a way to reconstruct the backtrace. There are three
possible sources of this information: forcing frame pointers (for which
an option exists already), debug info (for which an option exists), or
unwind tables.

Especially for embedded devices, forcing frame pointers can have code
size overheads (RISC-V sees ~10% overheads, ARM sees ~2-3% overheads).
In production code, it can be the case that debug info is not kept, so it is useful
to provide this third option, unwind tables, that users can use to
reconstruct the call stack. Reconstructing this stack is harder than
with frame pointers, but it is still possible.

---

This came up in discussion on #69890, and turned out to be a fairly simple addition.

r? @hanna-kruppe
2020-05-05 12:55:08 +02:00
Markus Westerlind
3f85338f3f Restore the snapshot/rollback optimization for region constraints 2020-05-05 11:25:12 +02:00
Markus Westerlind
f7f62452e4 refactor: Replace probe_fudge by an explict call for the lengths 2020-05-05 11:25:12 +02:00
Markus Westerlind
4a2a6bcfb1 refactor: Move probe_fudge into fudge.rs 2020-05-05 11:25:12 +02:00
Markus Westerlind
6f495f3466 Improve naming 2020-05-05 11:25:12 +02:00
Markus Westerlind
0d448cfcf8 Generate the UndoLog upcasts with a macro 2020-05-05 11:25:12 +02:00
Markus Westerlind
bc2fc7fb80 Fix review comments 2020-05-05 11:25:12 +02:00
Markus Westerlind
b61a28b2a1 Rebase and use ena 0.14 2020-05-05 11:25:12 +02:00
Markus Westerlind
fba241fc66 refactor: simplify 2020-05-05 11:25:12 +02:00
Markus Westerlind
729d16f010 Prevent modifications without an undo log 2020-05-05 11:25:12 +02:00
Markus Westerlind
6e06535468 Fix import 2020-05-05 11:24:58 +02:00
Markus Westerlind
204c9154e2 refactor: Extract the undo log to its own modules 2020-05-05 11:24:36 +02:00
Markus Westerlind
bc7f7b2d4d refactor: Rename Logs to InferCtxtUndoLogs 2020-05-05 11:24:36 +02:00
Markus Westerlind
e6d7f1584d simplify 2020-05-05 11:24:36 +02:00
Markus Westerlind
f45d852dcc perf: Merge region_obligations snapshotting into the undo log 2020-05-05 11:24:36 +02:00
Markus Westerlind
04f5d54d13 perf: Limit leak check snapshotting to probe_maybe_skip_leak_check 2020-05-05 11:24:36 +02:00
Markus Westerlind
eb7ed0c917 perf: Lazily recive the Rollback argument in rollback_to 2020-05-05 11:24:36 +02:00
Markus Westerlind
a457566154 perf: Separate CombinedSnapshot into a FullSnapshot for probing 2020-05-05 11:24:23 +02:00
Markus Westerlind
0c5d833812 Move projection_cache into the combined undo log 2020-05-05 11:24:23 +02:00
Markus Westerlind
c50fc6e113 Allow SnapshotMap to have a separate undo_log 2020-05-05 11:24:22 +02:00
Markus Westerlind
caacdd2024 Move region_constraint to the unified undo log 2020-05-05 11:23:54 +02:00
Markus Westerlind
1506b1fc6a perf: Reduce snapshot/rollback overhead
By merging the undo_log of all structures part of the snapshot the cost
of creating a snapshot becomes much cheaper. Since snapshots with no or
few changes are so frequent this ends up mattering more than the slight
overhead of dispatching on the variants that map to each field.
2020-05-05 10:03:13 +02:00
John Kåre Alsaker
61621e2667 Allow hir().find to return None 2020-05-05 10:03:13 +02:00
Ralf Jung
f9866f95af rely on rdlock/wrlock not returning anything but the specified error codes 2020-05-05 09:08:00 +02:00
bors
de27cd7649 Auto merge of #71846 - petrochenkov:fresh2, r=davidtwco
resolve: Relax fresh binding disambiguation slightly to fix regression

Fixes https://github.com/rust-lang/rust/issues/71765
2020-05-05 06:01:08 +00:00
mibac138
ca72352e60 Suggest removing semicolon in last expression only if it's type is known 2020-05-05 02:08:26 +02:00
Dylan DPC
8b781b0ffd
Rollup merge of #71904 - euclio:function-typo, r=jonas-schievink
fix typo in function name

Drive-by fix.
2020-05-05 01:49:52 +02:00
Dylan DPC
ad74ce9d04
Rollup merge of #71902 - mibac138:const-feature-diag, r=varkor
Suggest to add missing feature when using gated const features

Fixes #71797
2020-05-05 01:49:51 +02:00
Dylan DPC
ac84daf930
Rollup merge of #71892 - integer32llc:btreemap-entry-vacant-docs, r=jonas-schievink
Update btree_map::VacantEntry::insert docs to actually call insert

It looks like they were copied from the `or_insert` docs. This change
makes the example more like the hash_map::VacantEntry::insert docs.
2020-05-05 01:49:49 +02:00
Dylan DPC
a93cc0664f
Rollup merge of #71891 - lcnr:not-iter-any, r=Dylan-DPC
¬∃x. ¬y => ∀x. y
2020-05-05 01:49:48 +02:00
Dylan DPC
4b0b6e357b
Rollup merge of #71883 - Dante-Broggi:patch-1, r=Dylan-DPC
add a missing "at" in a comment
2020-05-05 01:49:46 +02:00
Dylan DPC
c1b2fd2121
Rollup merge of #71881 - IsaacWoods:master, r=petrochenkov
Correctly handle UEFI targets as Windows-like when emitting sections for LLVM bitcode

This handles UEFI handles when emitting inline assembly for sections containing LLVM bitcode. See details in #71880. I have locally confirmed that this change fixes compilation of projects using the `x86_64-unknown-uefi` target compiling with `cargo-xbuild`, but I am not very familiar with LLVM bitcode so this may not be the correct approach.

r? @alexcrichton as they wrote the initial LLVM bitcode emitting code?
2020-05-05 01:49:44 +02:00
Dylan DPC
faccb0f07a
Rollup merge of #71878 - main--:patch-2, r=Amanieu
Add remove_current_as_list to LinkedList's CursorMut

The `remove_current` method only returns the inner `T` and deallocates the list node. This is unnecessary for move operations, where the element is going to be linked back into this (or even a different) `LinkedList`. The `remove_current_as_list` method avoids this by returning the unlinked list node as a new single-element `LinkedList` structure.

(per https://github.com/rust-lang/rust/issues/58533#issuecomment-623010157)
2020-05-05 01:49:43 +02:00
Dylan DPC
db7b38181c
Rollup merge of #71845 - steveklabnik:add-const-examples, r=dtolnay
Add const examples

I only added them to `std::f32` to get feedback on this approach before adding the other constants.

When looking at https://github.com/rust-lang/rust/pull/68952, I found the docs a little confusing. Unless you're intimately aware of what's going on here, I don't think it's super clear what is deprecated and what you're supposed to do instead. I think short examples really clarify what's meant here, so that's what I did.
2020-05-05 01:49:41 +02:00
Dylan DPC
04776b15a7
Rollup merge of #71711 - Mark-Simulacrum:deignore-tests, r=nikomatsakis
Updates to some ignored tests

This removes or fixes some ignored test cases.

cc #13745
2020-05-05 01:49:37 +02:00
Dylan DPC
4bde46e0e3
Rollup merge of #71587 - matthewjasper:promoted-move-errors, r=nikomatsakis
Report cannot move errors in promoted MIR

Closes #70934
2020-05-05 01:49:32 +02:00
mibac138
b83853d617 Add command aliases from Cargo to x.py commands 2020-05-05 00:37:50 +02:00
Andy Russell
36f51f97c7
fix typo in function name 2020-05-04 18:27:23 -04:00