Commit Graph

95455 Commits

Author SHA1 Message Date
bors
848e0a23f3 Auto merge of #61922 - tmandry:moar-generator-optimization, r=matthewjasper
Don't store locals that have been moved from in generators

This avoids reserving storage in generators for locals that are moved
out of (and not re-initialized) prior to yield points. Fixes #59123.

This adds a new dataflow analysis, `RequiresStorage`, to determine whether the storage of a local can be destroyed without being observed by the program. The rules are:

1. StorageLive(x) => mark x live
2. StorageDead(x) => mark x dead
3. If a local is moved from, _and has never had its address taken_, mark it dead
4. If (any part of) a local is initialized, mark it live'

This is used to determine whether to save a local in the generator object at all, as well as which locals can be overlapped in the generator layout.

Here's the size in bytes of all testcases included in the change, before and after the change:

async fn test    |Size before |Size after
-----------------|------------|----------
single           | 1028       | 1028
single_with_noop | 2056       | 1032
joined           | 5132       | 3084
joined_with_noop | 8208       | 3084

generator test              |Size before |Size after
----------------------------|------------|----------
move_before_yield           | 1028       | 1028
move_before_yield_with_noop | 2056       | 1032
overlap_move_points         | 3080       | 2056

## Future work

Note that there is a possible extension to this optimization, which modifies rule 3 to read: "If a local is moved from, _**and either has never had its address taken, or is Freeze and has never been mutably borrowed**_, mark it dead." This was discussed at length in #59123 and then #61849. Because this would cause some behavior to be UB which was not UB before, it's a step that needs to be taken carefully.

A more immediate priority for me is inlining `std::mem::size_of_val(&x)` so it becomes apparent that the address of `x` is not taken. This way, using `size_of_val` to look at the size of your inner futures does not affect the size of your outer future.

cc @cramertj @eddyb @Matthias247 @nikomatsakis @RalfJung @Zoxc
2019-07-02 12:25:00 +00:00
bors
ef064d2f66 Auto merge of #61871 - Zoxc:no-lift-branch, r=eddyb
Don't use lift to detect local types

This overlaps with https://github.com/rust-lang/rust/pull/61392.

r? @eddyb
2019-07-02 08:09:15 +00:00
bors
99abdfa0b5 Auto merge of #62279 - pietroalbini:fix-azure-crlf, r=alexcrichton
ci: explicitly disable CRLF conversion on Windows

The Azure image enables CRLF conversion on Windows builders, but that caused regressions both in our test suite (the miri test suite broke) and in the ecosystem, since we started shipping install scripts with CRLF endings instead of the old LF. The [Godbolt Compiler Explorer](https://godbolt.org/) is one such case of breakage.

This adds a step to the build explicitly disabling the conversion before the repository is checked out.

r? @alexcrichton
cc @gnzlbg
2019-07-01 22:33:54 +00:00
Pietro Albini
239a404cae
ci: explicitly disable CRLF conversion on Windows
The Azure image enables CRLF conversion on Windows builders, but that
caused regressions both in our test suite (the miri test suite broke)
and in the ecosystem, since we started shipping install scripts with
CRLF endings instead of the old LF. The Godbolt Compiler Explorer is one
such case of breakage.

This adds a step to the build explicitly disabling the conversion before
the repository is checked out.
2019-07-01 21:57:08 +02:00
Tyler Mandry
a68e2c7161 Clean up extra lifetime, add assertions 2019-07-01 12:19:30 -07:00
bors
17e62f77f9 Auto merge of #62267 - GuillaumeGomez:revert-implicit-option-return, r=Centril
Revert "implicit `Option`-returning doctests"

Reverts #61279 as discussed in #61360.

cc @Centril
2019-07-01 18:49:30 +00:00
bors
6ea4036cd2 Auto merge of #62247 - pietroalbini:finish-azure-migration, r=Mark-Simulacrum
ci: finish the migration to azure

This moves to azure the last builders as we discussed on Discord last night.

r? @alexcrichton
2019-07-01 15:14:16 +00:00
Pietro Albini
dc9d2b34df
bump miri to fix line endings on azure 2019-07-01 17:12:31 +02:00
Igor Matuszewski
8c96088853
Update RLS to disable spurious client_find_definitions test
Since switching CI to Azure Pipelines it seems that this test seems
to fail more consistently, so let's disable that for now. It helps
that we have less than a week before release - we disallow PRs that
break the tools to land in this period, so this makes landing critical
PRs smoother  now.

r? @alexcrichton
2019-07-01 17:12:29 +02:00
Pietro Albini
1992931c9e
ci: finish the migration to azure 2019-07-01 17:12:28 +02:00
Guillaume Gomez
a683bb1754 Revert "implicit Option-returning doctests"
This reverts commit 6bb6c001be.
2019-07-01 16:41:37 +02:00
bors
765eebf064 Auto merge of #62253 - Centril:rollup-115uuuq, r=Centril
Rollup of 8 pull requests

Successful merges:

 - #62062 (Use a more efficient iteration order for forward dataflow)
 - #62063 (Use a more efficient iteration order for backward dataflow)
 - #62224 (rustdoc: remove unused derives and variants)
 - #62228 (Extend the #[must_use] lint to boxed types)
 - #62235 (Extend the `#[must_use]` lint to arrays)
 - #62239 (Fix a typo)
 - #62241 (Always parse 'async unsafe fn' + properly ban in 2015)
 - #62248 (before_exec actually will only get deprecated with 1.37)

Failed merges:

r? @ghost
2019-07-01 06:41:48 +00:00
bors
5748825cc8 Auto merge of #61682 - Centril:stabilize-type_alias_enum_variants, r=petrochenkov
Stabilize `type_alias_enum_variants` in Rust 1.37.0

Stabilize `#![feature(type_alias_enum_variants)]` which allows type-relative resolution with highest priority to `enum` variants in both expression and pattern contexts. For example, you may now write:

```rust
enum Option<T> {
    None,
    Some(T),
}

type OptAlias<T> = Option<T>;

fn work_on_alias(x: Option<u8>) -> u8 {
    match x {
        OptAlias::Some(y) => y + 1,
        OptAlias::None => 0,
    }
}
```

Closes https://github.com/rust-lang/rfcs/issues/2218
Closes https://github.com/rust-lang/rust/issues/52118

r? @petrochenkov
2019-07-01 03:11:19 +00:00
Mazdak Farrokhzad
1abbf4b864
Rollup merge of #62248 - RalfJung:release-notes, r=Mark-Simulacrum
before_exec actually will only get deprecated with 1.37

Not sure if we usually fix old release notes, but I just found this when scrolling over them.
2019-06-30 21:57:32 +02:00
Mazdak Farrokhzad
43eba5fef2
Rollup merge of #62241 - Centril:fix-async-unsafe-order, r=petrochenkov
Always parse 'async unsafe fn' + properly ban in 2015

Parse `async unsafe fn` not `unsafe async fn` in implementations. We also take the opportunity to properly ban `async fn` in Rust 2015 when they are inside implementations.

Closes https://github.com/rust-lang/rust/issues/62232.

cc https://github.com/rust-lang/rust/pull/61319, https://github.com/rust-lang/rust/issues/62121, and https://github.com/rust-lang/rust/issues/62149.

r? @petrochenkov
2019-06-30 21:57:30 +02:00
Mazdak Farrokhzad
690f9e422e
Rollup merge of #62239 - lcolaholicl:lcolaholicl-patch-1, r=kennytm
Fix a typo

The definition of 京 seems to be capital, but not capitol.
[reference](https://en.wiktionary.org/wiki/%E4%BA%AC#Etymology_1)
[another reference](https://jisho.org/word/%E4%BA%AC)
2019-06-30 21:57:29 +02:00
Mazdak Farrokhzad
2b313b1d32
Rollup merge of #62235 - varkor:must_use-adt-components, r=Centril
Extend the `#[must_use]` lint to arrays

Based on top of https://github.com/rust-lang/rust/pull/62228.

r? @Centril
2019-06-30 21:57:28 +02:00
Mazdak Farrokhzad
c779f4e89c
Rollup merge of #62228 - varkor:must_use-trait-in-box, r=Centril
Extend the #[must_use] lint to boxed types

Fixes https://github.com/rust-lang/rust/issues/55506#issuecomment-506940181 (cc @Nemo157).

This should have been included as part of https://github.com/rust-lang/rust/pull/55663, but was overlooked.
2019-06-30 21:57:27 +02:00
Mazdak Farrokhzad
1683bb7771
Rollup merge of #62224 - euclio:remove-derives, r=GuillaumeGomez
rustdoc: remove unused derives and variants

Though many structs in rustdoc derive `RustcEncodable` and `RustcDecodable`, the impls do not appear to be used by the crate or its dependents. Removing them revealed some enum variants that are never constructed, too.

r? @GuillaumeGomez
2019-06-30 21:57:25 +02:00
Mazdak Farrokhzad
70ea57bcb3
Rollup merge of #62063 - ecstatic-morse:dataflow-backward-order, r=nagisa
Use a more efficient iteration order for backward dataflow

This applies the same basic principle as #62062 to the reverse dataflow analysis used to compute liveness information. It is functionally equivalent, except that post-order is used instead of reverse post-order.

In the long-term, `BitDenotation` should probably be extended to support both forward and backward dataflow, but there's some more work needed to get to that point.
2019-06-30 21:57:24 +02:00
Mazdak Farrokhzad
543c4648bd
Rollup merge of #62062 - ecstatic-morse:dataflow-order, r=nagisa
Use a more efficient iteration order for forward dataflow

Currently, dataflow begins by visiting each block in order of ID (`BasicBlock(0)`, `BasicBlock(1)`, etc.). This PR changes that initial iteration to reverse post-order (see [this blog post](https://eli.thegreenplace.net/2015/directed-graph-traversal-orderings-and-applications-to-data-flow-analysis/#data-flow-analysis) for more info). This ensures that the effects of all predecessors will be applied before a basic block is visited if the CFG has no back-edges, and should result in less total iterations even when back-edges exist. This should not change the results of dataflow analysis.

The current ordering for basic blocks may be pretty close to RPO already--`BasicBlock(0)` is already the start block--in which case the cost of doing the traversal up front will outweigh the efficiency gains.
A perf run is needed to check this.

r? @pnkfelix (I think).
2019-06-30 21:57:22 +02:00
varkor
76f5b50716 Extend #[must_use] lint to arrays 2019-06-30 18:20:49 +01:00
varkor
400fd6055f Update miri 2019-06-30 18:19:28 +01:00
varkor
75f31e78b8 Fix run-pass tests 2019-06-30 18:19:28 +01:00
varkor
d066f19a79 Improve error messages for boxed trait objects in tuples 2019-06-30 18:19:28 +01:00
varkor
b613ef1436 Extend the #[must_use] lint to boxed types 2019-06-30 18:19:28 +01:00
Ralf Jung
c0fb34795a before_exec actually will only get deprecated with 1.37 2019-06-30 18:30:46 +02:00
bors
0af8e872ea Auto merge of #59722 - Zoxc:query-cache, r=eddyb
Clean up query cache code

There are a couple of queries for which we do not promote saved results, which have been removed from caching here. This was likely the cause of the regression in https://github.com/rust-lang/rust/pull/57293#issuecomment-476421298.

r? @michaelwoerister
2019-06-30 12:15:14 +00:00
John Kåre Alsaker
ede41ab4d6 Keep caching for non-promoted queries 2019-06-30 11:18:44 +02:00
John Kåre Alsaker
930ad86e3d Clean up query cache code 2019-06-30 11:18:44 +02:00
bors
c06f80a3c6 Auto merge of #61252 - indygreg:upgrade-musl, r=alexcrichton
Update musl to 1.1.22

This is the latest available version. I noticed Rust wasn't using the
latest version when I attempted to have Cargo link object files produced
outside of Cargo / Rust's toolchain and was getting missing symbol
errors. Those missing symbols were added in 1.1.21 and 1.1.22.

I'm not fully sure of the implications of this change or how
comprehensive the test coverage is. Upstream changes in 1.1.21 and
1.1.22 can be found at
https://git.musl-libc.org/cgit/musl/tree/WHATSNEW?h=v1.1.22&id=e97681d6f2c44bf5fa9ecdd30607cb63c780062e#n1989.
2019-06-30 08:42:58 +00:00
bors
3467e2120c Auto merge of #61767 - JohnTitor:update-smallvec, r=nikomatsakis
Update new_debug_unreachable

In latest master, smallvec has been updated. So we only update new_debug_unreachable to remove unmaintained dependencies.
2019-06-30 05:21:51 +00:00
bors
fd7f48b3ef Auto merge of #61459 - GuillaumeGomez:fix-rustdoc-sysroot-panic, r=ollie27,bjorn3,QuietMisdreavus
Prevent panic when sysroot cannot be computed

Fixes #61377.

cc @rotty @rust-lang/rustdoc

r? @Manishearth
2019-06-30 01:44:44 +00:00
Mazdak Farrokhzad
ce1d95af4c Always parse 'async unsafe fn' + properly ban in 2015. 2019-06-29 21:38:26 +02:00
lcolaholicl
1fd64cf9b5 fix the same typo in doctest 2019-06-30 02:46:45 +09:00
lcolaholicl
47551b1513 Fix a typo
Fix a typo in `libcore/char/methods.rs`
2019-06-30 02:02:03 +09:00
bors
9a90d03ad1 Auto merge of #62226 - Centril:rollup-rcy1alx, r=Centril
Rollup of 7 pull requests

Successful merges:

 - #61199 (Revert "Set test flag when rustdoc is running with --test option" )
 - #61755 (Add `--pass $mode` to compiletest through `./x.py`)
 - #61818 (Issue #60709 test)
 - #62023 (publish_toolstate: don't use 'new' from inside the loop)
 - #62104 (Inform the query system about properties of queries at compile time)
 - #62163 (Avoid mem::uninitialized() in std::sys::unix)
 - #62204 (doc(libcore) Fix CS)

Failed merges:

r? @ghost
2019-06-29 11:45:11 +00:00
Mazdak Farrokhzad
38801ce5d0
Rollup merge of #62204 - Hywan:patch-2, r=rkruppe
doc(libcore) Fix CS

A small PR to fix a small CS typo in `iter/traits/collect.rs`.
2019-06-29 11:18:14 +02:00
Mazdak Farrokhzad
75edfe204b
Rollup merge of #62163 - cuviper:unix-uninit, r=RalfJung
Avoid mem::uninitialized() in std::sys::unix

For `libc` types that will be initialized in FFI calls, we can just use
`MaybeUninit` and then pass around raw pointers.

For `sun_path_offset()`, which really wants `offset_of`, all callers
have a real `sockaddr_un` available, so we can use that reference.

r? @RalfJung
2019-06-29 11:18:13 +02:00
Mazdak Farrokhzad
94a066e229
Rollup merge of #62104 - Zoxc:query-info, r=eddyb
Inform the query system about properties of queries at compile time
2019-06-29 11:18:11 +02:00
Mazdak Farrokhzad
a4cf85e958
Rollup merge of #62023 - RalfJung:miri-toolstate, r=kennytm
publish_toolstate: don't use 'new' from inside the loop

I think I made a mistake in https://github.com/rust-lang/rust/pull/61938 by using `new` outside the inner loop. This PR fixes that.

However, no issue got created at all for https://github.com/rust-lang/rust/pull/62003#issuecomment-504356964, and I don't know why that is.   The script should be [triggered by Traivs](56a12b2ad0/.travis.yml (L240)), and I can find no trace of that in [the build log](https://travis-ci.com/rust-lang/rust/jobs/209880042).
2019-06-29 11:18:10 +02:00
Mazdak Farrokhzad
2238a94b96
Rollup merge of #61818 - tmandry:issue-60709-test, r=cramertj
Issue #60709 test

Adds a test for #60709, which was fixed as part of #59897.

r? @cramertj
2019-06-29 11:18:08 +02:00
Mazdak Farrokhzad
0721364f0d
Rollup merge of #61755 - Centril:compiletest-force-check, r=petrochenkov
Add `--pass $mode` to compiletest through `./x.py`

Adds a flag `--pass $mode` to compiletest, which is exposed through `./x.py`.

When `--pass $mode` is passed, `{check,build,compile,run}-pass` tests will be forced to run under the given `$mode` unless the directive `// ignore-pass` exists in the test file.

The modes are explained in https://github.com/rust-lang/rust/pull/61778:
- `check` has the same effect as `cargo check`
- `build` or `compile` have the same effect as `cargo build`
- `run` has the same effect as `cargo run`

On my machine, `./x.py -i test src/test/run-pass --stage 1 --pass check` takes 38 seconds whereas it takes 2 min 7 seconds without `--pass check`.

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

r? @petrochenkov
2019-06-29 11:18:07 +02:00
Mazdak Farrokhzad
6c0ab739fb
Rollup merge of #61199 - ollie27:rustdoc_cfg_test, r=QuietMisdreavus
Revert "Set test flag when rustdoc is running with --test option"

Reverts https://github.com/rust-lang/rust/pull/59940.

It caused doctests in this repository to no longer be tested including all of the core crate.
2019-06-29 11:18:06 +02:00
bors
8ec39423dd Auto merge of #62105 - JohnTitor:update-miri, r=RalfJung
Update miri

Fixes #62101

r? @RalfJung
2019-06-29 05:05:32 +00:00
Tyler Mandry
d8ed2e7ed4 Use RequiresStorage to determine which locals can overlap 2019-06-28 18:42:06 -07:00
Tyler Mandry
aee13574f2 Remove Clone requirement 2019-06-28 15:39:33 -07:00
Tyler Mandry
11b09e7f9e Add size tests for moved locals in generators 2019-06-28 15:39:33 -07:00
Tyler Mandry
b7397cc00b Move async-fn-size test to async-await/ 2019-06-28 15:31:19 -07:00
Tyler Mandry
65021ec928 Add regression test for #60709
Closes #60709.
2019-06-28 15:31:19 -07:00