Commit Graph

99517 Commits

Author SHA1 Message Date
Niko Matsakis
b2c51c24c9 avoid generating drops for moved operands of calls
Currently, after a CALL terminator is created in MIR, we insert DROP
statements for all of its operands -- even though they were just moved
shortly before! These spurious drops are later removed, but not before
causing borrow check errors.

This PR series modifies the drop code to track operands that were
moved and avoid creating drops for them.

Right now, I'm only using this mechanism for calls, but it seems
likely it could be used in more places.
2019-09-19 11:50:00 -04:00
Alex Crichton
d7f64749c0 rustbuild: Copy crate doc files fewer times
Previously when building documentation for the standard library we'd
copy all the files 5 times, and these files include libcore/libstd docs
which are huge! This commit instead only copies the files after rustdoc
has been run for each crate, reducing the number of redundant copies
we're making.
2019-09-19 08:37:53 -07:00
Alex Crichton
2fff78038c rustbuild: Don't package libstd twice
Looks like the packaging step for the standard library was happening
twice on CI, but it only needs to happen once! The `Analysis` packaging
step accidentally packaged `Std` instead of relying on compiling `Std`,
which meant that we ended up packaging it twice erroneously.
2019-09-19 07:46:24 -07:00
Niko Matsakis
e35698371d make clear that invalidate just replaces with default 2019-09-19 10:31:01 -04:00
Alex Crichton
72ea960056 azure: Convert Windows installations scripts to bash
Looks like `script`, which uses `cmd.exe`, doesn't have fail-fast
behavior and if a leading command fails the script doesn't actually fail
so long as the last command succeeds. We instead want the opposite
behavior where if any step fails the whole script fails.

I don't really know `cmd.exe` that well, nor powershell, so I've opted
to move everything to `bash` which should be a good common denominator
amongst all platforms to work with. Additionally I know that `set -e`
works to cause scripts to fail fast.

Note that some scripts remain as `script` since they don't appear to
work in` bash`. I'm not really sure why but I reorganized them slightly
to have the "meaty command" run at the end.
2019-09-19 07:29:45 -07:00
Niko Matsakis
9a447a232e replace boolean with lazy iteration
Should probably check how this performs, but it's always nicer to
track just a bit less mutable state.
2019-09-19 10:07:50 -04:00
Adrian Heine né Lang
c23e78a38b
Remove unnecessary mut in doc example 2019-09-19 13:36:10 +02:00
Ralf Jung
1de533ac1a first determine if the variant is a niche-variant, then compute absolute variant 2019-09-19 09:15:03 +02:00
bors
9b9d2aff8d Auto merge of #64545 - nnethercote:ObligForest-more, r=nmatsakis
More `ObligationForest` improvements

Following on from #64500, these commits alsomake the code both nicer and faster.

r? @nikomatsakis
2019-09-19 06:53:54 +00:00
Pietro Albini
5384a199c7
ci: split aws credentials in two separate users with scoped perms
This commit changes our CI to use two separate IAM users to
authenticate with AWS:

* ci--rust-lang--rust--sccache: has access to the rust-lang-ci-sccache2
  S3 bucket and its credentials are available during the whole build.
* ci--rust-lang--rust--upload: has access to the rust-lang-ci2 S3 bucket
  and its credentials are available just during the upload step.

The new tokens are available in the `prod-credentials` library.
2019-09-19 08:19:57 +02:00
Joshua Groves
37bafeafe7 Fix backticks in documentation 2019-09-18 23:17:36 -06:00
csmoe
2fd4c27c32 add is_async_fn query 2019-09-19 03:17:34 +00:00
bors
19d070393c Auto merge of #64598 - Centril:rollup-htmf39p, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #63630 (Update installed compiler dependencies)
 - #64536 (Update Cargo)
 - #64554 (Polonius: more `ui` test suite fixes)
 - #64566 (A more generic interface for dataflow analysis)
 - #64591 (Fix a minor grammar nit, update UI tests)

Failed merges:

r? @ghost
2019-09-19 02:54:11 +00:00
Mazdak Farrokhzad
cad2d5840b
Rollup merge of #64591 - jamesmunns:grammar-fix, r=jonas-schievink
Fix a minor grammar nit, update UI tests

Minor fix, but I noticed it while debugging some code
2019-09-19 04:53:12 +02:00
Mazdak Farrokhzad
67565ae4ae
Rollup merge of #64566 - ecstatic-morse:generic-dataflow, r=oli-obk
A more generic interface for dataflow analysis

#64470 requires a transfer function that is slightly more complex than the typical `gen`/`kill` one. Namely, it must copy state bits between locals when assignments occur (see #62547 for an attempt to make this fit into the existing framework). This PR contains a dataflow interface that allows for arbitrary transfer functions. The trade-off is efficiency: we can no longer coalesce transfer functions for blocks and must visit each statement individually while iterating to fixpoint.

Another issue is that poorly behaved transfer functions can result in an analysis that fails to converge. `gen`/`kill` sets do not have this problem. I believe that, in order to guarantee convergence, flipping a bit from `false` to `true` in the entry set cannot cause an output bit to go from `true` to `false` (negate all preceding booleans when `true` is the bottom value). Perhaps someone with a more formal background can confirm and we can add a section to the docs?

This approach is not maximally generic: it still requires that the lattice used for analysis is the powerset of values of `Analysis::Idx` for the `mir::Body` of interest. This can be done at a later date. Also, this is the bare minimum to get #64470 working. I've not adapted the existing debug framework to work with the new analysis, so there are no `rustc_peek` tests either. I'm planning to do this after #64470 is merged.

Finally, my ultimate plan is to make the existing, `gen`/`kill`-based `BitDenotation` a special case of `generic::Analysis`. Currently they share a ton of code. I should be able to do this without changing any implementers of `BitDenotation`. Something like:

```rust
struct GenKillAnalysis<A: BitDenotation> {
    trans_for_block: IndexVec<BasicBlock, GenKillSet<A::Idx>>,
    analysis: A,
}

impl<A> generic::Analysis for GenKillAnalysis<A> {
    // specializations of `apply_{partial,whole}_block_effect`...
}
```

r? @pnkfelix
2019-09-19 04:53:11 +02:00
Mazdak Farrokhzad
0835100412
Rollup merge of #64554 - lqd:polonius_tests4, r=nikomatsakis
Polonius: more `ui` test suite fixes

Since #62736, new tests have been added, and the `run-pass` suite was merged into the `ui` suite.

This PR adds the missing tests expectations for Polonius, and updates the existing ones where the NLL output has changed in some manner (e.g. ordering of notes)

Those are the trivial cases, but a more-detailed explanation is available [in this write-up](https://hackmd.io/CjYB0fs4Q9CweyeTdKWyEg?both#26-async-awaitasync-borrowck-escaping-closure-errorrs-outputs-from-NLL-Polonius-diff) starting at test case 26: they are only differing in diagnostics and instances of other existing test cases differences.

Only 3 of the 9020 tests are still "failing" at the moment (1 failure, 2 OOMs).

r? @nikomatsakis
2019-09-19 04:53:09 +02:00
Mazdak Farrokhzad
11a0b968c2
Rollup merge of #64536 - Aaron1011:cargo-crate-type, r=ehuss
Update Cargo

This pulls in https://github.com/rust-lang/cargo/pull/7159, which
ensures that documenting proc macros works correctly.
2019-09-19 04:53:08 +02:00
Mazdak Farrokhzad
d2b555eef3
Rollup merge of #63630 - andjo403:bump_compiler, r=nikomatsakis
Update installed compiler dependencies

As llvm have updated the minimum toolchain
https://reviews.llvm.org/D66188
2019-09-19 04:53:07 +02:00
Aaron Hill
d67528ff7d
Merge inherent impl blocks for `Diverges 2019-09-18 21:57:50 -04:00
Aaron Hill
d440e136e7
Update Cargo
This pulls in https://github.com/rust-lang/cargo/pull/7159, which
ensures that documenting proc macros works correctly.
2019-09-18 21:53:50 -04:00
Esteban Küber
479ce39939 Add explanation to type mismatch involving type params and assoc types 2019-09-18 17:30:35 -07:00
Aaron Hill
034a8fd1df
Another formatting fix
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-09-18 20:14:56 -04:00
Aaron Hill
41e1128969
Use 'if let' instead of 'match' 2019-09-18 20:07:33 -04:00
Aaron Hill
a8ce93e13a
Introduce Diverges::always constructor
Rename the existing Diverges.always method to Diverges.is_always
2019-09-18 20:04:01 -04:00
Aaron Hill
6edcfbe59a
Apply formatting fixes
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-09-18 19:48:37 -04:00
Aaron Hill
9e777eb45d
Some formatting cleanup 2019-09-18 19:31:38 -04:00
Aaron Hill
cd4b468e07
Make note better when all arms in a match diverge 2019-09-18 19:19:55 -04:00
James Munns
333230fd14 Restore whitespace 2019-09-19 00:50:03 +02:00
Aaron Hill
822393d690
Point at original span when emitting unreachable lint
Fixes #64590

When we emit an 'unreachable' lint, we now add a note pointing at the
expression that actually causes the code to be unreachable (e.g.
`return`, `break`, `panic`).

This is especially useful when macros are involved, since a diverging
expression might be hidden inside of a macro invocation.
2019-09-18 18:35:10 -04:00
James Munns
f233a4c18b Fix a minor grammar nit, update UI tests 2019-09-19 00:16:16 +02:00
Nicholas Nethercote
2521189438 Add a comment to Compiler::compile().
`Compiler::compile()` is different to all the other `Compiler` methods
because it lacks a `Queries` entry. It only has one call site, which is
in a test that doesn't need its specific characteristics.

This patch replaces that call with a call to `Compile::link()`, which is
similar enough for the test's purposes. It also notes that the method is
an illustrative example of how `Compiler` can be used.
2019-09-19 06:56:52 +10:00
Nicholas Nethercote
3b85597d22 Add a specialized version of shallow_resolve().
The super-hot call site of `inlined_shallow_resolve()` basically does
`r.inlined_shallow_resolve(ty) != ty`. This commit introduces a
version of that function specialized for that particular call pattern,
`shallow_resolve_changed()`. Incredibly, this reduces the instruction
count for `keccak` by 5%.

The commit also renames `inlined_shallow_resolve()` as
`shallow_resolve()` and removes the `inline(always)` annotation, as it's
no longer nearly so hot.
2019-09-19 06:36:06 +10:00
Nicholas Nethercote
82e5c6ee65 Use explicit iteration instead of all() in process_obligation().
Amazingly enough, this is a 3.5% instruction count win on `keccak`.
2019-09-19 06:35:11 +10:00
Niko Matsakis
d95a7768a1 don't record all intermediate adjustment types
That's way more than is needed, and winds up recording types
that will never appear in MIR.
2019-09-18 14:33:14 -04:00
bors
eceec57f72 Auto merge of #64583 - tmandry:rollup-b793x81, r=tmandry
Rollup of 5 pull requests

Successful merges:

 - #64207 (Make rustc_mir::dataflow module pub (for clippy))
 - #64348 (PR: documentation spin loop hint)
 - #64532 (Replace `state_for_location` with `DataflowResultsCursor`)
 - #64578 (Fix issue22656 with LLDB 8)
 - #64580 (Update books)

Failed merges:

r? @ghost
2019-09-18 17:58:45 +00:00
Tyler Mandry
eeda31385d
Rollup merge of #64580 - ehuss:update-books, r=ehuss
Update books

## book

24 commits in 7ddc46460f09a5cd9bd2a620565bdc20b3315ea9..871416b85c1a73717d65d6f4a9ea29e5aef3db0e
2019-06-27 09:50:36 -0400 to 2019-09-16 09:46:20 -0400
- Ch16-2 add missing Ferris (rust-lang/book#2033)
- Update version mentioned on the front page
- Update error messages (rust-lang/book#1737)
- Update version of Rust used to 1.37
- Replace Cargo docs link with a more specific link (rust-lang/book#2066)
- Added missing await reserved keyword (rust-lang/book#2064)
- add does_not_compile for a snippet (rust-lang/book#2056)
- Added second missing dyn (rust-lang/book#2046)
- Removed unnecessary & in function call (rust-lang/book#2038)
- Printing non-Display structs is a *compile* error (rust-lang/book#2031)
- Update Readme mdBook version to match linked file (rust-lang/book#2012)
- Update loose mdbook version reference (rust-lang/book#2003)
- Added a bullet point to have list of things unsafe allows for match u… (rust-lang/book#1993)
- Rewrote a confusing sentence (rust-lang/book#1986)
- Replace deprecated `...` range syntax with `..=` (rust-lang/book#1977)
- correct wording for integration test doc (rust-lang/book#1971)
- Mark the dangle function as does_not_compile (rust-lang/book#1965)
- Add more words to the quote from the actual Go documentation (rust-lang/book#1960)
- Remove unused import in lfp (rust-lang/book#1944)
- A small typo? (rust-lang/book#1931)
- Make the code not compile to match the text (rust-lang/book#1926)
- Ferris does-not-compile added (ch9.2) (rust-lang/book#1925)
- ch07 - remove note regarding use and relative path (rust-lang/book#1820)
- tweak opening paragraph of deref coercions (rust-lang/book#1749)

## rust-by-example

9 commits in e76be6b2dc84c6a992e186157efe29d625e29b94..67cfbf31df880728dcf7cb35b15b028ec92caf31
2019-09-03 07:42:26 -0300 to 2019-09-18 09:36:40 -0300
- Fix rust-lang/rust-by-example#90: Add supertraits and Fully Qualified syntax (rust-lang/rust-by-example#1259)
- Fix some broken links. (rust-lang/rust-by-example#1258)
- Fix rust-lang/rust-by-example#1253: Document enum type aliases (rust-lang/rust-by-example#1255)
- Inline code in some new/changed chapters (rust-lang/rust-by-example#1254)
- fix rust-lang/rust-by-example#1067: explain that unit tests can return Result&lt;()&gt; (rust-lang/rust-by-example#1252)
- Fix rust-lang/rust-by-example#1060: add page on Impl Trait (rust-lang/rust-by-example#1251)
- Fix rust-lang/rust-by-example#1053: Added a page about the dyn keyword (rust-lang/rust-by-example#1249)
- Fix rust-lang/rust-by-example#1110: add examples of ? and Option (rust-lang/rust-by-example#1250)
- fix 1037: add the TryFrom chapter back in (rust-lang/rust-by-example#1247)
2019-09-18 10:58:09 -07:00
Tyler Mandry
0fd7a2db3d
Rollup merge of #64578 - max-sixty:22656-lldb-8, r=alexcrichton
Fix issue22656 with LLDB 8

Closes https://github.com/rust-lang/rust/issues/64074
2019-09-18 10:58:07 -07:00
Tyler Mandry
68096ccb3f
Rollup merge of #64532 - ecstatic-morse:dataflow-cursor-get, r=tmandry
Replace `state_for_location` with `DataflowResultsCursor`

These are two different ways of getting the same data from the result of a dataflow analysis. However, `state_for_location` goes quadratic if you try to call it for every statement in the body.
2019-09-18 10:58:06 -07:00
Tyler Mandry
05d93a7d06
Rollup merge of #64348 - arnohaase:pr_documentation_spin_loop_hint, r=alexcrichton
PR: documentation spin loop hint

The documentation for 'spin loop hint' explains that yield is better if the lock holder is running on the same CPU. I suggest that 'CPU or core' would be clearer.
2019-09-18 10:58:05 -07:00
Tyler Mandry
e8ded849ef
Rollup merge of #64207 - sinkuu:pub_dataflow, r=tmandry
Make rustc_mir::dataflow module pub (for clippy)

I'm working on fixing false-positives of a MIR-based clippy lint (https://github.com/rust-lang/rust-clippy/pull/4509), and in need of the dataflow infrastructure.
2019-09-18 10:58:03 -07:00
Dylan MacKenzie
b4e94d9a3a Fix bug where is_call_return_effect_applied was never set 2019-09-18 09:22:02 -07:00
Eric Huss
003fcda6a9 Update books 2019-09-18 08:54:06 -07:00
Dylan MacKenzie
a7f52520d5 Add summary of the current state and future plans 2019-09-18 08:41:38 -07:00
Maximilian Roos
445af68c23
fix debuginfo/issue22656 with LLDB 8 2019-09-18 10:42:55 -04:00
Dylan MacKenzie
08aff1afe5 Publish rustc_mir::dataflow and remove #[allow(unused)] 2019-09-18 07:35:44 -07:00
Dylan MacKenzie
19bf0f4c90 Fix typo 2019-09-18 07:32:57 -07:00
Dylan MacKenzie
a526e4faa6 Use an associated const for name 2019-09-18 07:32:42 -07:00
Dylan MacKenzie
cbaaf05b94 Fix Analysis example 2019-09-18 07:32:15 -07:00
bors
dece57302a Auto merge of #64575 - lzutao:fmt-primitives-doc, r=jonas-schievink
doc: Format some primitives examples

r? @jonas-schievink
2019-09-18 12:31:00 +00:00
Arno Haase
eb48b5d983 broken hyperlinks in documentation 2019-09-18 12:31:34 +02:00