Commit Graph

100030 Commits

Author SHA1 Message Date
Tyler Mandry
f7ee31e3d7
Rollup merge of #61879 - stjepang:stabilize-todo, r=withoutboats
Stabilize todo macro

The `todo!` macro is just another name for `unimplemented!`.

Tracking issue: https://github.com/rust-lang/rust/issues/59277

This PR needs a FCP to merge.

r? @withoutboats
2019-10-03 16:25:35 -07:00
bors
032a53a06c Auto merge of #64938 - estebank:ice-ice-baby, r=matthewjasper
Avoid ICE on ReFree region on where clause

Fix #64855.
2019-10-03 16:14:32 +00:00
bors
cfb6d84720 Auto merge of #64999 - nikomatsakis:issue-60424-async-return-inference, r=cramertj
extract expected return type for async fn generators

Fixes #60424

cc @Centril, I know you've been eager to see this fixed.

r? @cramertj
2019-10-03 12:19:21 +00:00
Niko Matsakis
a807032f9e ./x.py test --bless --compare-mode=nll 2019-10-03 04:20:51 -04:00
bors
0221e26562 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
2019-10-03 06:05:08 +00:00
Mazdak Farrokhzad
64ac499db5
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
2019-10-03 08:04:34 +02:00
Mazdak Farrokhzad
b131230c3b
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.
See this godbolt link: https://godbolt.org/z/-COkVS
2019-10-03 08:04:33 +02:00
bors
c6293e3598 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
2019-10-03 02:08:53 +00:00
Mazdak Farrokhzad
d5a0765f44
Rollup merge of #65010 - AnthonyMikh:fix_65001, r=estebank
Compare `primary` with maximum of `children`s' line num instead of dropping it

Fix #65001.
2019-10-03 04:08:19 +02:00
Mazdak Farrokhzad
4ea2be751c
Rollup merge of #64998 - spastorino:filter-rls-on-tidy, r=petrochenkov
Filter out RLS output directories on tidy runs

Closes #64957

r? @petrochenkov
2019-10-03 04:08:18 +02:00
Mazdak Farrokhzad
f188879a93
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
2019-10-03 04:08:17 +02:00
Mazdak Farrokhzad
c4f8fd2bf5
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!
2019-10-03 04:08:15 +02:00
Mazdak Farrokhzad
faf2e8087c
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
2019-10-03 04:08:14 +02:00
Mazdak Farrokhzad
17b1fd1a8f
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.
2019-10-03 04:08:12 +02:00
Mazdak Farrokhzad
3e15e51acd
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.
2019-10-03 04:08:11 +02:00
Esteban Küber
de815653ed review comments 2019-10-02 16:19:35 -07:00
Niko Matsakis
19c07cc2b2 fix example (le sigh) 2019-10-02 18:45:44 -04:00
Niko Matsakis
4a49351e8b add unsize slice-str coercion 2019-10-02 18:13:40 -04:00
Esteban Küber
a180294f8b review comment 2019-10-02 14:34:29 -07:00
Charles Gleason
864e6feaf8 Add test for LinkedList clone_from 2019-10-02 15:18:31 -04:00
Niko Matsakis
a96bce7c06 avoid using skip_binder and instead look for bound vars properly 2019-10-02 15:07:38 -04:00
Esteban Küber
a5cfc4011d Avoid ICE on ReFree region from malformed code 2019-10-02 11:39:46 -07:00
Niko Matsakis
3f277e1a66 s/async fn/async fn/ 2019-10-02 14:39:44 -04:00
Niko Matsakis
5fea1d279b document shallow_resolve 2019-10-02 14:35:01 -04:00
Niko Matsakis
5d64b3d329 document ret_coercion and ret_coercion_span 2019-10-02 14:32:19 -04:00
bors
2daa404e9a 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
2019-10-02 18:28:11 +00:00
Niko Matsakis
a999132113 improve comments on GeneratorKind and AsyncGeneratorKind 2019-10-02 14:26:32 -04:00
Niko Matsakis
3ae4abbaa3 correct coercion comments 2019-10-02 14:23:36 -04:00
Niko Matsakis
dce20bf62a WIP fix tests 2019-10-02 14:17:38 -04:00
AnthonyMikh
df203a297f
Compare primary with value instead of dropping it 2019-10-02 19:48:21 +03:00
Mazdak Farrokhzad
b961f962d0
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.
2019-10-02 18:24:46 +02:00
Mazdak Farrokhzad
ebbc9ce5d0
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
```
2019-10-02 18:24:45 +02:00
Mazdak Farrokhzad
34ea55908e
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
2019-10-02 18:24:43 +02:00
Mazdak Farrokhzad
028ffd1366
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.
2019-10-02 18:24:42 +02:00
Mazdak Farrokhzad
7daf2e8946
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
2019-10-02 18:24:41 +02:00
Mazdak Farrokhzad
10b0fe9c5c
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.
2019-10-02 18:24:39 +02:00
Mazdak Farrokhzad
ccf1d9ca93
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
2019-10-02 18:24:38 +02:00
Mazdak Farrokhzad
475f5d4a5c
Rollup merge of #64961 - rust-lang:spastorino-patch-1, r=oli-obk
Make comment about dummy type a bit more clear
2019-10-02 18:24:36 +02:00
Mazdak Farrokhzad
1c8ef985f2
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
2019-10-02 18:24:35 +02:00
Mazdak Farrokhzad
19d035c013
Rollup merge of #64922 - spastorino:make-place-builder, r=nikomatsakis
Use PlaceBuilder to avoid a lot of slice -> vec -> slice convertions

r? @oli-obk
2019-10-02 18:24:33 +02:00
Mazdak Farrokhzad
fe5fad8912
Rollup merge of #64914 - pnkfelix:issue-64453-regression-test, r=nikomatsakis
regression test for 64453 borrow check error.

Fix #64453
2019-10-02 18:24:31 +02:00
Mazdak Farrokhzad
b7290a0642
Rollup merge of #64850 - Mark-Simulacrum:dedup-dep-node, r=michaelwoerister
Remove inlines from DepNode code
2019-10-02 18:24:30 +02:00
Mazdak Farrokhzad
18d0c03a13
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.
2019-10-02 18:24:29 +02:00
Charles Gleason
5055d4b1c6 Use zipped iterators in clone_from for LinkedList 2019-10-02 11:29:12 -04:00
Alex Crichton
b3fe511635 Update llvm-project submodule
Bring in rust-lang/llvm-project#24 which brings in some wasm
improvements related to the bulk-memory proposal
2019-10-02 07:47:38 -07:00
Niko Matsakis
81cd596bc5 WIP rebase for shallow_resolve call 2019-10-02 10:39:58 -04:00
Niko Matsakis
094f3a844e WIP tidy hir/lowering/expr.rs 2019-10-02 10:33:07 -04:00
Niko Matsakis
f7ed53c9da extract expected return type from -> impl Future obligation 2019-10-02 10:03:40 -04:00
Niko Matsakis
c8e58512d4 improved debug output 2019-10-02 10:03:28 -04:00
Niko Matsakis
44e801aca6 thread down the body so we can check if this is an async fn body 2019-10-02 10:03:27 -04:00