]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agoAuto merge of #65045 - Centril:rollup-djvi539, r=Centril
bors [Thu, 3 Oct 2019 06:05:08 +0000 (06:05 +0000)]
Auto merge of #65045 - Centril:rollup-djvi539, r=Centril

Rollup of 2 pull requests

Successful merges:

 - #64941 (Inline `{min,max}_value` even in debug builds)
 - #65002 (Update llvm-project submodule)

Failed merges:

r? @ghost

4 years agoRollup merge of #65002 - alexcrichton:update-lvlm, r=nikic
Mazdak Farrokhzad [Thu, 3 Oct 2019 06:04:34 +0000 (08:04 +0200)]
Rollup merge of #65002 - alexcrichton:update-lvlm, r=nikic

Update llvm-project submodule

Bring in rust-lang/llvm-project#24 which brings in some wasm
improvements related to the bulk-memory proposal

4 years agoRollup merge of #64941 - lzutao:inline-max_min_value, r=nnethercote
Mazdak Farrokhzad [Thu, 3 Oct 2019 06:04:33 +0000 (08:04 +0200)]
Rollup merge of #64941 - lzutao:inline-max_min_value, r=nnethercote

Inline `{min,max}_value` even in debug builds

I think it is worth to inline `{min,max}_value` even in debug builds.
link: https://godbolt.org/z/-COkVS
4 years agoAuto merge of #65038 - Centril:rollup-m83dpfh, r=Centril
bors [Thu, 3 Oct 2019 02:08:53 +0000 (02:08 +0000)]
Auto merge of #65038 - Centril:rollup-m83dpfh, r=Centril

Rollup of 7 pull requests

Successful merges:

 - #63678 (Improve HRTB error span when -Zno-leak-check is used)
 - #64931 (Reword E0392 slightly)
 - #64959 (syntax: improve parameter without type suggestions)
 - #64975 (Implement Clone::clone_from for LinkedList)
 - #64993 (BacktraceStatus: add Eq impl)
 - #64998 (Filter out RLS output directories on tidy runs)
 - #65010 (Compare `primary` with maximum of `children`s' line num instead of dropping it)

Failed merges:

r? @ghost

4 years agoRollup merge of #65010 - AnthonyMikh:fix_65001, r=estebank
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:19 +0000 (04:08 +0200)]
Rollup merge of #65010 - AnthonyMikh:fix_65001, r=estebank

Compare `primary` with maximum of `children`s' line num instead of dropping it

Fix #65001.

4 years agoRollup merge of #64998 - spastorino:filter-rls-on-tidy, r=petrochenkov
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:18 +0000 (04:08 +0200)]
Rollup merge of #64998 - spastorino:filter-rls-on-tidy, r=petrochenkov

Filter out RLS output directories on tidy runs

Closes #64957

r? @petrochenkov

4 years agoRollup merge of #64993 - mathstuf:backtrace-status-eq, r=withoutboats
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:17 +0000 (04:08 +0200)]
Rollup merge of #64993 - mathstuf:backtrace-status-eq, r=withoutboats

BacktraceStatus: add Eq impl

See discussion on #53487.

---
Is adding `Copy` too ambitious? It's a "status", so I don't forsee any non-POD data that might go in there, but it would restrict future variants more than `Eq` does.

Cc: @withoutboats @abonander
4 years agoRollup merge of #64975 - crgl:clone-from-linked-list, r=bluss
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:15 +0000 (04:08 +0200)]
Rollup merge of #64975 - crgl:clone-from-linked-list, r=bluss

Implement Clone::clone_from for LinkedList

See #28481. This represents a substantial speedup when the list sizes are comparable, and shouldn't ever be significantly worse. Technically split_off is doing an unnecessary search, but the code is hopefully cleaner as a result. I'm happy to rework anything that needs to be changed as well!

4 years agoRollup merge of #64959 - davidtwco:issue-64252-self-type-help, r=Centril,estebank
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:14 +0000 (04:08 +0200)]
Rollup merge of #64959 - davidtwco:issue-64252-self-type-help, r=Centril,estebank

syntax: improve parameter without type suggestions

Fixes #64252.

This PR improves the suggestions provided when function parameters
do not have types:

- A new suggestion is added for arbitrary self types, which suggests
adding `self: ` before the type.

- Existing suggestions are now provided when a `<` is found where a `:`
was expected (previously only `,` and `)` or trait items), this gives
suggestions in the case where the unnamed parameter type is generic
in a free function.

- The suggestion that a type name be provided (e.g. `fn foo(HashMap<u32>)`
-> `fn foo(HashMap: TypeName<u32>)`) will no longer occur when a `<` was
found instead of `:`.

- The ident will not be used for recovery when a `<` was found instead
of `:`.

r? @Centril
cc @estebank @yoshuawuyts

4 years agoRollup merge of #64931 - estebank:missing-param-ref, r=matthewjasper,Centril
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:12 +0000 (04:08 +0200)]
Rollup merge of #64931 - estebank:missing-param-ref, r=matthewjasper,Centril

Reword E0392 slightly

Make it clearer that a type or lifetime argument not being used can be
fixed by referencing it in a struct's fields, not just using `PhathomData`.

CC #53589.

4 years agoRollup merge of #63678 - Aaron1011:fix/hrtb-leak, r=nikomatsakis
Mazdak Farrokhzad [Thu, 3 Oct 2019 02:08:11 +0000 (04:08 +0200)]
Rollup merge of #63678 - Aaron1011:fix/hrtb-leak, r=nikomatsakis

Improve HRTB error span when -Zno-leak-check is used

As described in #57374, NLL currently produces unhelpful higher-ranked
trait bound (HRTB) errors when '-Zno-leak-check' is enabled.

This PR tackles one half of this issue - making the error message point
at the proper span. The error message itself is still the very generic
"higher-ranked subtype error", but this can be improved in a follow-up
PR.

The root cause of the bad spans lies in how NLL attempts to compute the
'blamed' region, for which it will retrieve a span for.
Consider the following code, which (correctly) does not compile:

```rust
let my_val: u8 = 25;
let a: &u8 = &my_val;
let b = a;
let c = b;
let d: &'static u8 = c;
```

This will cause NLL to generate the following subtype constraints:

d :< c
c :< b
b <: a

Since normal Rust lifetimes are covariant, this results in the following
region constraints (I'm using 'd to denote the lifetime of 'd',
'c to denote the lifetime of 'c, etc.):

'c: 'd
'b: 'c
'a: 'b

From this, we can derive that 'a: 'd holds, which implies that 'a: 'static
must hold. However, this is not the case, since 'a refers to 'my_val',
which does not outlive the current function.

When NLL attempts to infer regions for this code, it will see that the
region 'a has grown 'too large' - it will be inferred to outlive
'static, despite the fact that is not declared as outliving 'static
We can find the region responsible, 'd, by starting at the *end* of
the 'constraint chain' we generated above. This works because for normal
(non-higher-ranked) lifetimes, we generally build up a 'chain' of
lifetime constraints *away* from the original variable/lifetime.
That is, our original lifetime 'a is required to outlive progressively
more regions. If it ends up living for too long, we can look at the
'end' of this chain to determine the 'most recent' usage that caused
the lifetime to grow too large.

However, this logic does not work correctly when higher-ranked trait
bounds (HRTBs) come into play. This is because HRTBs have
*contravariance* with respect to their bound regions. For example,
this code snippet compiles:

```rust
let a: for<'a> fn(&'a ()) = |_| {};
let b: fn(&'static ()) = a;
```

Here, we require that 'a' is a subtype of 'b'. Because of
contravariance, we end up with the region constraint 'static: 'a,
*not* 'a: 'static

This means that our 'constraint chains' grow in the opposite direction
of 'normal lifetime' constraint chains. As we introduce subtypes, our
lifetime ends up being outlived by other lifetimes, rather than
outliving other lifetimes. Therefore, starting at the end of the
'constraint chain' will cause us to 'blame' a lifetime close to the original
definition of a variable, instead of close to where the bad lifetime
constraint is introduced.

This PR improves how we select the region to blame for 'too large'
universal lifetimes, when bound lifetimes are involved. If the region
we're checking is a 'placeholder' region (e.g. the region 'a' in
for<'a>, or the implicit region in fn(&())), we start traversing the
constraint chain from the beginning, rather than the end.

There are two (maybe more) different ways we generate region constraints for NLL:
requirements generated from trait queries, and requirements generated
from MIR subtype constraints. While the former always use explicit
placeholder regions, the latter is more tricky. In order to implement
contravariance for HRTBs, TypeRelating replaces placeholder regions with
existential regions. This requires us to keep track of whether or not an
existential region was originally a placeholder region. When we look for
a region to blame, we check if our starting region is either a
placeholder region or is an existential region created from a
placeholder region. If so, we start iterating from the beginning of the
constraint chain, rather than the end.

4 years agoreview comment
Esteban Küber [Wed, 2 Oct 2019 19:26:49 +0000 (12:26 -0700)]
review comment

4 years agoAdd test for LinkedList clone_from
Charles Gleason [Wed, 2 Oct 2019 19:18:31 +0000 (15:18 -0400)]
Add test for LinkedList clone_from

4 years agoAuto merge of #65009 - Centril:rollup-06g05xj, r=Centril
bors [Wed, 2 Oct 2019 18:28:11 +0000 (18:28 +0000)]
Auto merge of #65009 - Centril:rollup-06g05xj, r=Centril

Rollup of 13 pull requests

Successful merges:

 - #64581 (Fix unreachable_code warnings for try{} block ok-wrapped expressions)
 - #64850 (Remove inlines from DepNode code)
 - #64914 (regression test for 64453 borrow check error.)
 - #64922 (Use PlaceBuilder to avoid a lot of slice -> vec -> slice convertions)
 - #64948 (Improve sidebar styling to make its integration easier)
 - #64961 (Make comment about dummy type a bit more clear)
 - #64967 (Don't mark borrows of zero-sized arrays as indirectly mutable)
 - #64973 (Fix typo while setting `compile-flags` in test)
 - #64980 (Enable support for `IndirectlyMutableLocals` in `rustc_peek` )
 - #64989 (Fix ICE #64964)
 - #64991 ([const-prop] Correctly handle locals that can't be propagated)
 - #64995 (Remove rustdoc warning)
 - #64997 (rustc book: nitpick SLP vectorization)

Failed merges:

r? @ghost

4 years agoCompare primary with value instead of dropping it
AnthonyMikh [Wed, 2 Oct 2019 16:48:21 +0000 (19:48 +0300)]
Compare primary with value instead of dropping it

4 years agoRollup merge of #64997 - rust-lang:nitpick-slp, r=jonas-schievink
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:46 +0000 (18:24 +0200)]
Rollup merge of #64997 - rust-lang:nitpick-slp, r=jonas-schievink

rustc book: nitpick SLP vectorization

SLP vectorization (in general and as implemented in LLVM) is not limited to loops.

4 years agoRollup merge of #64995 - GuillaumeGomez:libtest-rustdoc-warning, r=Mark-Simulacrum
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:45 +0000 (18:24 +0200)]
Rollup merge of #64995 - GuillaumeGomez:libtest-rustdoc-warning, r=Mark-Simulacrum

Remove rustdoc warning

Removes this warning:

```bash
    Finished release [optimized] target(s) in 2.62s
 Documenting core v0.0.0 (/home/imperio/rust/rust/src/libcore)
    Finished release [optimized] target(s) in 15.23s
 Documenting std v0.0.0 (/home/imperio/rust/rust/src/libstd)
    Finished release [optimized] target(s) in 17.30s
 Documenting proc_macro v0.0.0 (/home/imperio/rust/rust/src/libproc_macro)
    Finished release [optimized] target(s) in 2.36s
 Documenting test v0.0.0 (/home/imperio/rust/rust/src/libtest)
warning: `[0]` cannot be resolved, ignoring it...
    --> src/libtest/lib.rs:1112:41
     |
1112 |     /// supplied channel. Requires argv[0] to exist and point to the binary
     |                                         ^ cannot be resolved, ignoring
     |
     = note: `#[warn(intra_doc_link_resolution_failure)]` on by default
     = help: to escape `[` and `]` characters, just add '\' before them like `\[` or `\]`

    Finished release [optimized] target(s) in 1.64s
Build completed successfully in 0:02:07
```

4 years agoRollup merge of #64991 - wesleywiser:fix_too_eager_const_prop, r=oli-obk
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:43 +0000 (18:24 +0200)]
Rollup merge of #64991 - wesleywiser:fix_too_eager_const_prop, r=oli-obk

[const-prop] Correctly handle locals that can't be propagated

`const_prop()` now handles writing the Rvalue into the Place in the
stack frame for us. So if we're not supposed to propagate that value,
we need to clear it.

r? @oli-obk

Fixes #64970

4 years agoRollup merge of #64989 - sinkuu:fix_ice_64964, r=davidtwco
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:42 +0000 (18:24 +0200)]
Rollup merge of #64989 - sinkuu:fix_ice_64964, r=davidtwco

Fix ICE #64964

Fixes #64964, which is an ICE with `await`ing in a method + incr-comp.

4 years agoRollup merge of #64980 - ecstatic-morse:better-rustc-peek, r=oli-obk
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:41 +0000 (18:24 +0200)]
Rollup merge of #64980 - ecstatic-morse:better-rustc-peek, r=oli-obk

Enable support for `IndirectlyMutableLocals` in `rustc_peek`

This PR allows `rustc_peek` tests to be written for the `IndirectlyMutableLocals` analysis implemented in #64470. See any of the tests in [`test/ui/mir-dataflow`](https://github.com/rust-lang/rust/blob/master/src/test/ui/mir-dataflow/inits-1.rs) for an example.

Included in this PR is a major rewrite of the `rustc_peek` module. This was motivated by the differences between the `IndirectlyMutableLocals` analysis and the initialized places ones.

To properly test `IndirectlyMutableLocals`, we must pass locals by-value to `rustc_peek`, since any local that is not `Freeze` will be marked as indirectly mutable as soon as a reference to it is taken. Unfortunately, `UnsafeCell` is not `Copy`, so we can only do one `rustc_peek` on each value with interior mutability inside a test. I'm not sure how to deal with this restriction; perhaps I need to special case borrows preceding a call to `rustc_peek` in the analysis itself?

`rustc_peek` also assumed that the analysis was done on move paths and that its transfer function only needed to be applied at assignment statements. This PR removes both of those restrictions by adding a trait, `RustcPeekAt`, that controls how the peeked at `Place` maps to the current dataflow state and using a dataflow cursor to retrieve the state itself.

Finally, this PR adds a test which demonstrates some unsoundness in the `IndirectlyMutableLocals` analysis by converting a reference to a `Freeze` field to a reference to a `!Freeze` field by offsetting a pointer (or in this case transmuting a pointer to a ZST field with the same address as a `!Freeze` field). This does not represent a hole in the language proper, since this analysis is only used to validate `const` bodies, in which the unsound code will only compile with `-Zunleash-the-miri-inside-of-you`. Nevertheless, this should get fixed.

r? @oli-obk

4 years agoRollup merge of #64973 - ecstatic-morse:fix-debuginfo-test, r=alexcrichton
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:39 +0000 (18:24 +0200)]
Rollup merge of #64973 - ecstatic-morse:fix-debuginfo-test, r=alexcrichton

Fix typo while setting `compile-flags` in test

This test is meant to check for an ICE when generating debug info, but didn't actually pass `-g` due to the typo.

I also removed the `FIXME`, since this needs to actually be built (not just checked) to trigger the ICE.

4 years agoRollup merge of #64967 - ecstatic-morse:issue-64945, r=oli-obk
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:38 +0000 (18:24 +0200)]
Rollup merge of #64967 - ecstatic-morse:issue-64945, r=oli-obk

Don't mark borrows of zero-sized arrays as indirectly mutable

Resolves #64945

r? @oli-obk

4 years agoRollup merge of #64961 - rust-lang:spastorino-patch-1, r=oli-obk
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:36 +0000 (18:24 +0200)]
Rollup merge of #64961 - rust-lang:spastorino-patch-1, r=oli-obk

Make comment about dummy type a bit more clear

4 years agoRollup merge of #64948 - GuillaumeGomez:improve-sidebar-styling, r=Mark-Simulacrum
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:35 +0000 (18:24 +0200)]
Rollup merge of #64948 - GuillaumeGomez:improve-sidebar-styling, r=Mark-Simulacrum

Improve sidebar styling to make its integration easier

Part of https://github.com/rust-lang/docs.rs/issues/417

Setting the height was an error: forcing the element bottom to be at the bottom allows to change to top of the sidebar.

r? @Mark-Simulacrum

4 years agoRollup merge of #64922 - spastorino:make-place-builder, r=nikomatsakis
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:33 +0000 (18:24 +0200)]
Rollup merge of #64922 - spastorino:make-place-builder, r=nikomatsakis

Use PlaceBuilder to avoid a lot of slice -> vec -> slice convertions

r? @oli-obk

4 years agoRollup merge of #64914 - pnkfelix:issue-64453-regression-test, r=nikomatsakis
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:31 +0000 (18:24 +0200)]
Rollup merge of #64914 - pnkfelix:issue-64453-regression-test, r=nikomatsakis

regression test for 64453 borrow check error.

Fix #64453

4 years agoRollup merge of #64850 - Mark-Simulacrum:dedup-dep-node, r=michaelwoerister
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:30 +0000 (18:24 +0200)]
Rollup merge of #64850 - Mark-Simulacrum:dedup-dep-node, r=michaelwoerister

Remove inlines from DepNode code

4 years agoRollup merge of #64581 - ztlpn:fix-ok-wrapping-unreachable-code, r=Centril
Mazdak Farrokhzad [Wed, 2 Oct 2019 16:24:29 +0000 (18:24 +0200)]
Rollup merge of #64581 - ztlpn:fix-ok-wrapping-unreachable-code, r=Centril

Fix unreachable_code warnings for try{} block ok-wrapped expressions

Fixes #54165 and fixes #63324.

4 years agoUse zipped iterators in clone_from for LinkedList
Charles Gleason [Wed, 2 Oct 2019 15:29:12 +0000 (11:29 -0400)]
Use zipped iterators in clone_from for LinkedList

4 years agoUpdate llvm-project submodule
Alex Crichton [Wed, 2 Oct 2019 14:47:38 +0000 (07:47 -0700)]
Update llvm-project submodule

Bring in rust-lang/llvm-project#24 which brings in some wasm
improvements related to the bulk-memory proposal

4 years agoFilter out RLS output directories on tidy runs
Santiago Pastorino [Wed, 2 Oct 2019 14:02:14 +0000 (11:02 -0300)]
Filter out RLS output directories on tidy runs

4 years agoUse PlaceBuilder to avoid a lot of slice -> vec -> slice convertions
Santiago Pastorino [Mon, 30 Sep 2019 16:09:10 +0000 (13:09 -0300)]
Use PlaceBuilder to avoid a lot of slice -> vec -> slice convertions

4 years agorustc book: nitpick SLP vectorization
Robin Kruppe [Wed, 2 Oct 2019 12:41:49 +0000 (14:41 +0200)]
rustc book: nitpick SLP vectorization

SLP vectorization (in general and as implemented in LLVM) is not limited to loops.

4 years agoRemove rustdoc warning
Guillaume Gomez [Wed, 2 Oct 2019 12:24:59 +0000 (14:24 +0200)]
Remove rustdoc warning

4 years agoBacktraceStatus: add Eq impl
Ben Boeckel [Wed, 2 Oct 2019 12:17:28 +0000 (08:17 -0400)]
BacktraceStatus: add Eq impl

See discussion on #53487.

4 years agoRemove inline annotations from dep_node
Mark Rousskov [Mon, 30 Sep 2019 17:46:41 +0000 (13:46 -0400)]
Remove inline annotations from dep_node

4 years ago[const-prop] Correctly handle locals that can't be propagated
Wesley Wiser [Wed, 2 Oct 2019 09:58:26 +0000 (05:58 -0400)]
[const-prop] Correctly handle locals that can't be propagated

`const_prop()` now handles writing the Rvalue into the Place in the
stack frame for us. So if we're not supported to propagate that value,
we need to clear it.

4 years agoDo not collect to vec for debug output
Shotaro Yamada [Wed, 2 Oct 2019 09:59:05 +0000 (18:59 +0900)]
Do not collect to vec for debug output

4 years agoFix async/await ICE #64964
Shotaro Yamada [Wed, 2 Oct 2019 06:34:31 +0000 (15:34 +0900)]
Fix async/await ICE #64964

4 years agosyntax: improve parameter without type suggestions
David Wood [Tue, 1 Oct 2019 14:17:50 +0000 (15:17 +0100)]
syntax: improve parameter without type suggestions

This commit improves the suggestions provided when function parameters
do not have types:

- A new suggestion is added for arbitrary self types, which suggests
adding `self: ` before the type.

- Existing suggestions are now provided when a `<` is found where a `:`
was expected (previously only `,` and `)` or trait items), this gives
suggestions in the case where the unnamed parameter type is generic
in a free function.

- The suggestion that a type name be provided (e.g. `fn foo(HashMap<u32>)`
-> `fn foo(HashMap: TypeName<u32>)`) will no longer occur when a `<` was
found instead of `:`.

- The ident will not be used for recovery when a `<` was found instead
of `:`.

Signed-off-by: David Wood <david@davidtw.co>
4 years agoAuto merge of #64981 - tmandry:rollup-slfkhay, r=tmandry
bors [Wed, 2 Oct 2019 06:08:24 +0000 (06:08 +0000)]
Auto merge of #64981 - tmandry:rollup-slfkhay, r=tmandry

Rollup of 11 pull requests

Successful merges:

 - #64649 (Avoid ICE on return outside of fn with literal array)
 - #64722 (Make all alt builders produce parallel-enabled compilers)
 - #64801 (Avoid `chain()` in `find_constraint_paths_between_regions()`.)
 - #64805 (Still more `ObligationForest` improvements.)
 - #64840 (SelfProfiler API refactoring and part one of event review)
 - #64885 (use try_fold instead of try_for_each to reduce compile time)
 - #64942 (Fix clippy warnings)
 - #64952 (Update cargo.)
 - #64974 (Fix zebra-striping in generic dataflow visualization)
 - #64978 (Fully clear `HandlerInner` in `Handler::reset_err_count`)
 - #64979 (Update books)

Failed merges:

 - #64959 (syntax: improve parameter without type suggestions)

r? @ghost

4 years agoRollup merge of #64979 - ehuss:update-books, r=ehuss
Tyler Mandry [Wed, 2 Oct 2019 06:06:25 +0000 (23:06 -0700)]
Rollup merge of #64979 - ehuss:update-books, r=ehuss

Update books

## reference

3 commits in fa5dfb832ef8a7568e17dabf612f486d641ff4ac..320d232b206edecb67489316f71a14e31dbc6c08
2019-09-16 20:42:56 +0200 to 2019-10-01 17:05:35 +0200
- Update async/await keywords to real keywords. (rust-lang-nursery/reference#687)
- Remove the warning that appears on every page. (rust-lang-nursery/reference#685)
- Eschew fp lit pattern (rust-lang-nursery/reference#683)

## book

9 commits in 871416b85c1a73717d65d6f4a9ea29e5aef3db0e..04806c80be0f54b1290287e3f85e84bdfc0b6ec7
2019-09-16 09:46:20 -0400 to 2019-10-01 20:20:22 -0400
- Fix tidy error. (rust-lang/book#2104)
- Fancy quotes
- Commit autogenerated cargo content
- Move all scripts into tools
- We can start lines with numbers without creating ordered lists
- ci: validate that all used references are defined (rust-lang/book#2032)
- Remove the check for unstable features
- Specify the rustc version we're using in a rust-toolchain file
- Fix broken link to Chapter 13-01 in Chapter 12-04 (rust-lang/book#2025)

## rust-by-example

9 commits in 67cfbf31df880728dcf7cb35b15b028ec92caf31..a6288e7407a6c4c19ea29de6d43f40c803883f21
2019-09-18 09:36:40 -0300 to 2019-10-01 10:09:14 -0300
- Add reference to lifetime in structs (rust-lang/rust-by-example#1274)
- Rectangle ambiguity (rust-lang/rust-by-example#1270)
- Make Parsing a String code editable (rust-lang/rust-by-example#1268)
- Fix match range pattern usage (rust-lang/rust-by-example#1269)
- Added type alias enum variant rfc (rust-lang/rust-by-example#1267)
- Chapter 9.2.5: impl FnOnce() works in 1.35 (rust-lang/rust-by-example#1266)
- Move chapters from folder "traits" to "trait" (rust-lang/rust-by-example#1263)
- Capturing changes (rust-lang/rust-by-example#1265)
- Fix rust-lang/rust-by-example#1261: document Iterator::position (rust-lang/rust-by-example#1262)

r? @ghost

4 years agoRollup merge of #64978 - AnthonyMikh:librustc_errors/lib__fully_clear_inner_handler...
Tyler Mandry [Wed, 2 Oct 2019 06:06:24 +0000 (23:06 -0700)]
Rollup merge of #64978 - AnthonyMikh:librustc_errors/lib__fully_clear_inner_handler, r=Mark-Simulacrum

Fully clear `HandlerInner` in `Handler::reset_err_count`

Address [`FIXME`](https://github.com/rust-lang/rust/blob/702b45e409495a41afcccbe87a251a692b0cefab/src/librustc_errors/lib.rs#L472) for `Handler::reset_err_count` in the way suggested by @Mark-Simulacrum, i. e. clear all the fields of `HandlerInner`.

cc @estebank

4 years agoRollup merge of #64974 - ecstatic-morse:generic-graphviz-zebra, r=petrochenkov
Tyler Mandry [Wed, 2 Oct 2019 06:06:22 +0000 (23:06 -0700)]
Rollup merge of #64974 - ecstatic-morse:generic-graphviz-zebra, r=petrochenkov

Fix zebra-striping in generic dataflow visualization

A small formatting improvement to #64828.

Prior to this, the background color of the first row of the table for each basic block changed seemingly at random. You can see this in [basic block #5](https://github.com/rust-lang/rust/pull/64828#issuecomment-536690047) under "New table". Now it is always light.

This also updates the example table to match the current output.

4 years agoRollup merge of #64952 - michaelwoerister:update-cargo, r=alexcrichton
Tyler Mandry [Wed, 2 Oct 2019 06:06:20 +0000 (23:06 -0700)]
Rollup merge of #64952 - michaelwoerister:update-cargo, r=alexcrichton

Update cargo.

Pulls https://github.com/rust-lang/cargo/pull/7417/commits/f3c92ed52e65b10444020ea453c5823ab4d5ec37 into nightly Rust.

r? @alexcrichton

4 years agoRollup merge of #64942 - JohnTitor:fix-clippy, r=eddyb
Tyler Mandry [Wed, 2 Oct 2019 06:06:19 +0000 (23:06 -0700)]
Rollup merge of #64942 - JohnTitor:fix-clippy, r=eddyb

Fix clippy warnings

* Use `match` instead of `if` chain
* Remove redundant `into_iter()`
* Use `copied()` instead of `map()`

etc.

4 years agoRollup merge of #64885 - andjo403:iter, r=scottmcm
Tyler Mandry [Wed, 2 Oct 2019 06:06:17 +0000 (23:06 -0700)]
Rollup merge of #64885 - andjo403:iter, r=scottmcm

use try_fold instead of try_for_each to reduce compile time

as it was stated in #64572 that the biggest gain was due to less code was generated I tried to reduce the number of functions to inline by using try_fold direct instead of calling try_for_each that calls try_fold.

as there is some gains with using the try_fold function this is maybe a way forward.
when I tried to compile the clap-rs benchmark I get times gains only some % from #64572

there is more function that use eg. fold that calls try_fold that also can be changed but the question is how mush "duplication" that is tolerated in std to give faster compile times

can someone start a perf run?

cc @nnethercote @scottmcm @bluss
r? @ghost

4 years agoRollup merge of #64840 - michaelwoerister:self-profiling-raii-refactor, r=wesleywiser
Tyler Mandry [Wed, 2 Oct 2019 06:06:16 +0000 (23:06 -0700)]
Rollup merge of #64840 - michaelwoerister:self-profiling-raii-refactor, r=wesleywiser

SelfProfiler API refactoring and part one of event review

This PR refactors the `SelfProfiler` a little bit so that most profiling methods are RAII-based. The codegen backend code already had something similar, this refactoring pulls this functionality up into `SelfProfiler` itself, for general use.

The second commit of this PR is a review and update of the existing events we are already recording. Names have been made more consistent. CGU names have been removed from event names. They will be added back in when function parameter recording is implemented.

There is still some work to be done for adding new events, especially around trait resolution and the incremental system.

r? @wesleywiser

4 years agoRollup merge of #64805 - nnethercote:ObligForest-still-more, r=nikomatsakis
Tyler Mandry [Wed, 2 Oct 2019 06:06:14 +0000 (23:06 -0700)]
Rollup merge of #64805 - nnethercote:ObligForest-still-more, r=nikomatsakis

Still more `ObligationForest` improvements.

Following on from #64627, more readability improvements, but negligible effects on speed.

r? @nikomatsakis

4 years agoRollup merge of #64801 - nnethercote:improve-find_constraint_paths_between_regions...
Tyler Mandry [Wed, 2 Oct 2019 06:06:12 +0000 (23:06 -0700)]
Rollup merge of #64801 - nnethercote:improve-find_constraint_paths_between_regions, r=estebank

Avoid `chain()` in `find_constraint_paths_between_regions()`.

This iterator can be hot, and chained iterators are slow. The second
half of the chain is almost always empty, so this commit specializes the
code to avoid the chained iteration.

This change reduces instruction counts for the `wg-grammar` benchmark by
up to 1.5%.

4 years agoRollup merge of #64722 - Mark-Simulacrum:alt-parallel, r=alexcrichton
Tyler Mandry [Wed, 2 Oct 2019 06:06:11 +0000 (23:06 -0700)]
Rollup merge of #64722 - Mark-Simulacrum:alt-parallel, r=alexcrichton

Make all alt builders produce parallel-enabled compilers

We're not quite ready to ship parallel compilers by default, but the alt
builders are not used too much (in theory), so we believe that shipping
a possibly-broken compiler there is not too problematic.

r? @nikomatsakis

4 years agoRollup merge of #64649 - estebank:returnator, r=varkor
Tyler Mandry [Wed, 2 Oct 2019 06:06:09 +0000 (23:06 -0700)]
Rollup merge of #64649 - estebank:returnator, r=varkor

Avoid ICE on return outside of fn with literal array

Do not ICE when encountering `enum E { A = return [0][0] }`.

Fix #64638.

4 years agoAdd test exposing unsoundness in `IndirectlyMutableLocals`
Dylan MacKenzie [Wed, 2 Oct 2019 03:14:27 +0000 (20:14 -0700)]
Add test exposing unsoundness in `IndirectlyMutableLocals`

4 years agoAdd `rustc_peek` support for `IndirectlyMutableLocals`
Dylan MacKenzie [Wed, 2 Oct 2019 03:14:01 +0000 (20:14 -0700)]
Add `rustc_peek` support for `IndirectlyMutableLocals`

4 years agoRefactor `rustc_peek`
Dylan MacKenzie [Sat, 6 Jul 2019 01:18:38 +0000 (18:18 -0700)]
Refactor `rustc_peek`

We now use `DataflowResultsCursor` to get the dataflow state before
calls to `rustc_peek`. The original version used a custom implementation
that only looked at assignment statements. This also extends
`rustc_peek` to take arguments by-value as well as by-reference, and
allows *all* dataflow analyses, not just those dependent on `MoveData`,
to be inspected.

4 years agoUpdate books
Eric Huss [Wed, 2 Oct 2019 02:35:13 +0000 (19:35 -0700)]
Update books

4 years agoAuto merge of #64963 - Manishearth:clippyup, r=Manishearth
bors [Wed, 2 Oct 2019 02:01:20 +0000 (02:01 +0000)]
Auto merge of #64963 - Manishearth:clippyup, r=Manishearth

Update clippy

r? @ghost

4 years agoAdd comments, rename variable
Aaron Hill [Wed, 2 Oct 2019 01:44:13 +0000 (21:44 -0400)]
Add comments, rename variable

4 years agoRename to `was_placeholder` to `from_forall`
Aaron Hill [Wed, 2 Oct 2019 01:39:19 +0000 (21:39 -0400)]
Rename to `was_placeholder` to `from_forall`

4 years agoFixup tests
Aaron Hill [Wed, 2 Oct 2019 01:22:46 +0000 (21:22 -0400)]
Fixup tests

4 years agoFully clear `HandlerInner` in `Handler::reset_err_count`
AnthonyMikh [Wed, 2 Oct 2019 01:13:02 +0000 (04:13 +0300)]
Fully clear `HandlerInner` in `Handler::reset_err_count`

4 years agoUpdate clippy
Manish Goregaokar [Wed, 2 Oct 2019 00:53:57 +0000 (17:53 -0700)]
Update clippy

4 years agoImprove HRTB error span when -Zno-leak-check is used
Aaron Hill [Sun, 18 Aug 2019 05:20:24 +0000 (01:20 -0400)]
Improve HRTB error span when -Zno-leak-check is used

As described in #57374, NLL currently produces unhelpful higher-ranked
trait bound (HRTB) errors when '-Zno-leak-check' is enabled.

This PR tackles one half of this issue - making the error message point
at the proper span. The error message itself is still the very generic
"higher-ranked subtype error", but this can be improved in a follow-up
PR.

The root cause of the bad spans lies in how NLL attempts to compute the
'blamed' region, for which it will retrieve a span for.
Consider the following code, which (correctly) does not compile:

```rust
let my_val: u8 = 25;
let a: &u8 = &my_val;
let b = a;
let c = b;
let d: &'static u8 = c;
```

This will cause NLL to generate the following subtype constraints:

d :< c
c :< b
b <: a

Since normal Rust lifetimes are covariant, this results in the following
region constraints (I'm using 'd to denote the lifetime of 'd',
'c to denote the lifetime of 'c, etc.):

'c: 'd
'b: 'c
'a: 'b

From this, we can derive that 'a: 'd holds, which implies that 'a: 'static
must hold. However, this is not the case, since 'a refers to 'my_val',
which does not outlive the current function.

When NLL attempts to infer regions for this code, it will see that the
region 'a has grown 'too large' - it will be inferred to outlive
'static, despite the fact that is not declared as outliving 'static
We can find the region responsible, 'd, by starting at the *end* of
the 'constraint chain' we generated above. This works because for normal
(non-higher-ranked) lifetimes, we generally build up a 'chain' of
lifetime constraints *away* from the original variable/lifetime.
That is, our original lifetime 'a is required to outlive progressively
more regions. If it ends up living for too long, we can look at the
'end' of this chain to determine the 'most recent' usage that caused
the lifetime to grow too large.

However, this logic does not work correctly when higher-ranked trait
bounds (HRTBs) come into play. This is because HRTBs have
*contravariance* with respect to their bound regions. For example,
this code snippet compiles:

```rust
let a: for<'a> fn(&'a ()) = |_| {};
let b: fn(&'static ()) = a;
```

Here, we require that 'a' is a subtype of 'b'. Because of
contravariance, we end up with the region constraint 'static: 'a,
*not* 'a: 'static

This means that our 'constraint chains' grow in the opposite direction
of 'normal lifetime' constraint chains. As we introduce subtypes, our
lifetime ends up being outlived by other lifetimes, rather than
outliving other lifetimes. Therefore, starting at the end of the
'constraint chain' will cause us to 'blame' a lifetime close to the original
definition of a variable, instead of close to where the bad lifetime
constraint is introduced.

This PR improves how we select the region to blame for 'too large'
universal lifetimes, when bound lifetimes are involved. If the region
we're checking is a 'placeholder' region (e.g. the region 'a' in
for<'a>, or the implicit region in fn(&())), we start traversing the
constraint chain from the beginning, rather than the end.

There are two (maybe more) different ways we generate region constraints for NLL:
requirements generated from trait queries, and requirements generated
from MIR subtype constraints. While the former always use explicit
placeholder regions, the latter is more tricky. In order to implement
contravariance for HRTBs, TypeRelating replaces placeholder regions with
existential regions. This requires us to keep track of whether or not an
existential region was originally a placeholder region. When we look for
a region to blame, we check if our starting region is either a
placeholder region or is an existential region created from a
placeholder region. If so, we start iterating from the beginning of the
constraint chain, rather than the end.

4 years agoImplement Clone::clone_from for LinkedList
Charles Gleason [Tue, 1 Oct 2019 22:20:46 +0000 (18:20 -0400)]
Implement Clone::clone_from for LinkedList

4 years agoUpdate example table to match current output
Dylan MacKenzie [Tue, 1 Oct 2019 22:23:04 +0000 (15:23 -0700)]
Update example table to match current output

4 years agoReset row background for each block
Dylan MacKenzie [Tue, 1 Oct 2019 22:21:58 +0000 (15:21 -0700)]
Reset row background for each block

Now the first row of each basic block is always light instead of
changing seemingly at random.

4 years agoThis needs to be build-pass since it involves debuginfo
Dylan MacKenzie [Tue, 1 Oct 2019 22:10:29 +0000 (15:10 -0700)]
This needs to be build-pass since it involves debuginfo

4 years agoFix typo passing flags to rustc
Dylan MacKenzie [Tue, 1 Oct 2019 22:09:53 +0000 (15:09 -0700)]
Fix typo passing flags to rustc

4 years agoAuto merge of #64972 - Centril:rollup-gcawast, r=Centril
bors [Tue, 1 Oct 2019 22:04:23 +0000 (22:04 +0000)]
Auto merge of #64972 - Centril:rollup-gcawast, r=Centril

Rollup of 7 pull requests

Successful merges:

 - #63416 (apfloat: improve doc comments)
 - #64820 (BTreeSet intersection, is_subset & difference optimizations)
 - #64910 (syntax: cleanup param, method, and misc parsing)
 - #64912 (Remove unneeded `fn main` blocks from docs)
 - #64933 (Fixes #64919. Suggest fix based on operator precendence.)
 - #64943 (Add lower bound doctests for `saturating_{add,sub}` signed ints)
 - #64950 (Simplify interners)

Failed merges:

r? @ghost

4 years agoUpdate rls submodule
Alex Crichton [Tue, 1 Oct 2019 22:03:25 +0000 (15:03 -0700)]
Update rls submodule

4 years agoUpdate `Cargo.lock` for cargo update
Alex Crichton [Tue, 1 Oct 2019 13:11:32 +0000 (06:11 -0700)]
Update `Cargo.lock` for cargo update

4 years agoAdd test cases for #64945
Dylan MacKenzie [Tue, 1 Oct 2019 20:27:36 +0000 (13:27 -0700)]
Add test cases for #64945

This also tests that `&&[]` no longer causes an ICE in this PR (although
the test fails the borrow checker). This could be more complete.

4 years agoRollup merge of #64950 - nnethercote:simplify-interners, r=varkor,spastorino
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:27 +0000 (23:56 +0200)]
Rollup merge of #64950 - nnethercote:simplify-interners, r=varkor,spastorino

Simplify interners

Some code readability improvements.

4 years agoRollup merge of #64943 - lzutao:doc-saturating, r=shepmaster
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:26 +0000 (23:56 +0200)]
Rollup merge of #64943 - lzutao:doc-saturating, r=shepmaster

Add lower bound doctests for `saturating_{add,sub}` signed ints

Closes #64940

4 years agoRollup merge of #64933 - sam09:master, r=estebank
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:24 +0000 (23:56 +0200)]
Rollup merge of #64933 - sam09:master, r=estebank

Fixes #64919. Suggest fix based on operator precendence.

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

4 years agoRollup merge of #64912 - lzutao:unneeded-main-doc, r=jonas-schievink
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:23 +0000 (23:56 +0200)]
Rollup merge of #64912 - lzutao:unneeded-main-doc, r=jonas-schievink

Remove unneeded `fn main` blocks from docs

## [No whitespace diff](https://github.com/rust-lang/rust/pull/64912/files?w=1)

4 years agoRollup merge of #64910 - Centril:params-cleanup, r=petrochenkov
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:21 +0000 (23:56 +0200)]
Rollup merge of #64910 - Centril:params-cleanup, r=petrochenkov

syntax: cleanup param, method, and misc parsing

Do some misc cleanup of the parser:
- Method and parameter parsing is refactored.
- A parser for `const | mut` is introduced that https://github.com/rust-lang/rust/pull/64588 can reuse.
- Some other misc parsing.

Next up in a different PR:
- ~Implementing https://github.com/rust-lang/rust/issues/64252.~ -- maybe some other time...
- Heavily restructuring up `item.rs` which is a mess (hopefully, no promises ^^).

r? @petrochenkov

4 years agoRollup merge of #64820 - ssomers:master, r=bluss
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:20 +0000 (23:56 +0200)]
Rollup merge of #64820 - ssomers:master, r=bluss

BTreeSet intersection, is_subset & difference optimizations

...based on the range of values contained; in particular, a massive improvement when these ranges are disjoint (or merely touching), like in the neg-vs-pos benchmarks already in liballoc. Inspired by #64383 but none of the ideas there worked out.

I introduced another variant in IntersectionInner and in DifferenceInner, because I couldn't find a way to initialize these iterators as empty if there's no empty set around.

Also, reduced the size of "large" sets in test cases - if Miri can't handle it, it was needlessly slowing down everyone.

4 years agoRollup merge of #63416 - RalfJung:apfloat, r=eddyb
Mazdak Farrokhzad [Tue, 1 Oct 2019 21:56:16 +0000 (23:56 +0200)]
Rollup merge of #63416 - RalfJung:apfloat, r=eddyb

apfloat: improve doc comments

r? @eddyb @nagisa

4 years agoDon't mark zero-sized arrays as indirectly mutable when borrowed
Dylan MacKenzie [Tue, 1 Oct 2019 19:01:14 +0000 (12:01 -0700)]
Don't mark zero-sized arrays as indirectly mutable when borrowed

4 years agoPass attrs to `do_dataflow` in new const checker
Dylan MacKenzie [Tue, 1 Oct 2019 18:35:50 +0000 (11:35 -0700)]
Pass attrs to `do_dataflow` in new const checker

This is needed to dump graphviz results for the `IndirectlyMutableLocals` analysis.

4 years agochange .node -> .kind after rebase
Alex Zatelepin [Tue, 1 Oct 2019 17:04:41 +0000 (20:04 +0300)]
change .node -> .kind after rebase

4 years agoUpdate src/librustc/ty/mod.rs
Santiago Pastorino [Tue, 1 Oct 2019 16:03:33 +0000 (13:03 -0300)]
Update src/librustc/ty/mod.rs

Co-Authored-By: Oliver Scherer <github35764891676564198441@oli-obk.de>
4 years agoMake comment about dummy type a bit more clear
Santiago Pastorino [Tue, 1 Oct 2019 15:51:15 +0000 (12:51 -0300)]
Make comment about dummy type a bit more clear

4 years agofix test after rebase
Alex Zatelepin [Sun, 22 Sep 2019 14:09:10 +0000 (17:09 +0300)]
fix test after rebase

4 years agoaddress review comments
Alex Zatelepin [Wed, 18 Sep 2019 22:20:18 +0000 (01:20 +0300)]
address review comments

4 years agoadd tests
Alex Zatelepin [Wed, 18 Sep 2019 15:10:19 +0000 (18:10 +0300)]
add tests

4 years agofix spurious unreachable_code lints for try{} block ok-wrapping
Alex Zatelepin [Wed, 18 Sep 2019 15:08:56 +0000 (18:08 +0300)]
fix spurious unreachable_code lints for try{} block ok-wrapping

4 years agofix typo
Alex Zatelepin [Mon, 16 Sep 2019 14:16:17 +0000 (17:16 +0300)]
fix typo

4 years agoFix clippy warnings
Yuki Okushi [Tue, 1 Oct 2019 04:43:30 +0000 (13:43 +0900)]
Fix clippy warnings

4 years agoregression test for 64453 borrow check error.
Felix S. Klock II [Mon, 30 Sep 2019 09:05:04 +0000 (11:05 +0200)]
regression test for 64453 borrow check error.

4 years agoBTreeSet intersection, difference & is_subnet optimizations
Stein Somers [Sun, 22 Sep 2019 15:45:47 +0000 (17:45 +0200)]
BTreeSet intersection, difference & is_subnet optimizations

4 years agoRemove unneeded `fn main` blocks from docs
Lzu Tao [Tue, 1 Oct 2019 11:55:46 +0000 (11:55 +0000)]
Remove unneeded `fn main` blocks from docs

4 years agoUpdate cargo.
Michael Woerister [Tue, 1 Oct 2019 11:53:17 +0000 (13:53 +0200)]
Update cargo.

4 years agoChange to use exprPrecedence instead of exprKind.
Sam Radhakrishnan [Tue, 1 Oct 2019 09:00:22 +0000 (05:00 -0400)]
Change to use exprPrecedence instead of exprKind.

4 years agoImprove sidebar styling to make its integration easier
Guillaume Gomez [Tue, 1 Oct 2019 08:32:45 +0000 (10:32 +0200)]
Improve sidebar styling to make its integration easier

4 years agoAuto merge of #64946 - Centril:rollup-66mj5o0, r=Centril
bors [Tue, 1 Oct 2019 07:56:52 +0000 (07:56 +0000)]
Auto merge of #64946 - Centril:rollup-66mj5o0, r=Centril

Rollup of 10 pull requests

Successful merges:

 - #63674 (syntax: Support modern attribute syntax in the `meta` matcher)
 - #63931 (Stabilize macros in some more positions)
 - #64887 (syntax: recover trailing `|` in or-patterns)
 - #64895 (async/await: improve not-send errors)
 - #64896 (Remove legacy grammar)
 - #64907 (A small amount of tidying-up factored out from PR #64648)
 - #64928 (Add tests for some issues)
 - #64930 (Silence unreachable code lint from await desugaring)
 - #64935 (Improve code clarity)
 - #64937 (Deduplicate closure type errors)

Failed merges:

r? @ghost

4 years agoRollup merge of #64937 - estebank:dedup-closure-err, r=Centril
Mazdak Farrokhzad [Tue, 1 Oct 2019 07:55:39 +0000 (09:55 +0200)]
Rollup merge of #64937 - estebank:dedup-closure-err, r=Centril

Deduplicate closure type errors

Closure typing obligations flow in both direcitons to properly infer
types. Because of this, we will get 2 type errors whenever there's
an unfulfilled obligation. To avoid this, we deduplicate them in the
`InferCtxt`.

4 years agoRollup merge of #64935 - AnthonyMikh:librustc_errors/emmiter__code-clarity, r=estebank
Mazdak Farrokhzad [Tue, 1 Oct 2019 07:55:38 +0000 (09:55 +0200)]
Rollup merge of #64935 - AnthonyMikh:librustc_errors/emmiter__code-clarity, r=estebank

Improve code clarity

No commit except 55b54285c811b6ab12bb0ba001126fd5b7d3bd09 address performance, just making the existing code more clear.

r? @estebank

4 years agoRollup merge of #64930 - davidtwco:issue-61798-diverging-await, r=petrochenkov
Mazdak Farrokhzad [Tue, 1 Oct 2019 07:55:37 +0000 (09:55 +0200)]
Rollup merge of #64930 - davidtwco:issue-61798-diverging-await, r=petrochenkov

Silence unreachable code lint from await desugaring

Fixes #61798.

This PR silences the unreachable code lint when it originates from within an await desugaring.