101560 Commits

Author SHA1 Message Date
Tyler Mandry
1ea66850af
Rollup merge of #65995 - GuillaumeGomez:add-err-code-E0743, r=estebank
Add error code E0743 for "C-variadic has been used on a non-foreign function"

Fixes https://github.com/rust-lang/rust/issues/65967
2019-11-01 11:20:24 -07:00
Tyler Mandry
959a563803
Rollup merge of #65977 - ohadravid:fix-incorrect-diagnostics-with-an-associated-type, r=estebank
Fix incorrect diagnostics for expected type in E0271 with an associated type

With code like the following code:

```rust
#[derive(Debug)]
struct Data {}

fn do_stuff<'a>(iterator: impl Iterator<Item = &'a Data>) {
    for item in iterator {
        println!("{:?}", item)
    }
}

fn main() {
    let v = vec![Data {}];

    do_stuff(v.into_iter());
}
```

the diagnostic (in nightly & stable) wrongly complains about the expected type:

```
error[E0271]: type mismatch resolving `<std::vec::IntoIter<Data> as std::iter::Iterator>::Item == &Data`
  --> src/main.rs:15:5
   |
5  | fn do_stuff<'a>(iterator: impl Iterator<Item = &'a Data>) {
   |    --------                             --------------- required by this bound in `do_stuff`
...
15 |     do_stuff(v.into_iter());
   |     ^^^^^^^^ expected struct `Data`, found &Data
   |
   = note: expected type `Data`
              found type `&Data`
```

This PR fixes this issue by flipping the expected/actual values where appropriate, so it looks like this:

```
error[E0271]: type mismatch resolving `<std::vec::IntoIter<Data> as std::iter::Iterator>::Item == &Data`
  --> main.rs:15:5
   |
5  | fn do_stuff<'a>(iterator: impl Iterator<Item = &'a Data>) {
   |    --------                             --------------- required by this bound in `do_stuff`
...
15 |     do_stuff(v.into_iter());
   |     ^^^^^^^^ expected &Data, found struct `Data`
   |
   = note: expected type `&Data`
              found type `Data`
```

This improves the output of a lot of existing tests (check out `associated-types-binding-to-type-defined-in-supertrait`!).

The only change which I wasn't too sure about is in the test `associated-types-overridden-binding-2`, but I think it's an improvement and the underlying problem is with handling of `trait_alias`.

Fix #57226, fix #64760, fix #58092.
2019-11-01 11:20:22 -07:00
Tyler Mandry
05de0d7c9f
Rollup merge of #65972 - braiins:vkr-arm-panicking, r=alexcrichton
Fix libunwind build: Define __LITTLE_ENDIAN__ for LE targets

If `__LITTLE_ENDIAN__` is missing, libunwind assumes big endian
and reads unwinding instructions wrong on ARM EHABI.

Fix #65765

Technical background in referenced bug.

I didn't run any automated tests, just built a simple panicking program using the fixed toolchain and panicking started to work. Tried with `catch_unwind()` and that seems to work now too. libunwind's log seems ok now, I can paste it if needed.
2019-11-01 11:20:21 -07:00
Tyler Mandry
9bf1613840
Rollup merge of #65963 - steveklabnik:update-submodules, r=Centril
update submodules to rust-lang

These are the repositories I've moved from rust-lang-nursery to
rust-lang, so we should update the submodules too.

I have not tested that this builds at all, so please make sure CI is green!
2019-11-01 11:20:20 -07:00
Tyler Mandry
723f0ef518
Rollup merge of #65960 - lzutao:doc-iter-example, r=Centril
doc: reword iter module example and mention other methods
2019-11-01 11:20:18 -07:00
Tyler Mandry
4160e5aaba
Rollup merge of #65946 - ecstatic-morse:refactor-promotion2, r=eddyb
Make `promote_consts` emit the errors when required promotion fails

A very minimal version of #65942.

This will cause a generic "argument X is required to be a constant" message for `simd_shuffle` LLVM intrinsics instead of the [custom one](caa1f8d7b3/src/librustc_mir/transform/qualify_consts.rs (L1616)). It may be possible to remove this special-casing altogether after rust-lang/stdarch#825.

r? @eddyb
2019-11-01 11:20:17 -07:00
Tyler Mandry
b7416348c8
Rollup merge of #65914 - estebank:type-alias-bounds-sugg, r=davidtwco
Use structured suggestion for unnecessary bounds in type aliases
2019-11-01 11:20:15 -07:00
Tyler Mandry
d75338e630
Rollup merge of #65902 - gilescope:issue62570, r=estebank
Make ItemContext available for better diagnositcs

Fix #62570
2019-11-01 11:20:14 -07:00
Tyler Mandry
48a9f59ae7
Rollup merge of #65857 - kinnison:kinnison/issue-55364, r=Manisheart,GuillaumeGomez
rustdoc: Resolve module-level doc references more locally

Module level docs should resolve intra-doc links as locally as
possible.  As such, this commit alters the heuristic for finding
intra-doc links such that we attempt to resolve names mentioned
in *inner* documentation comments within the (sub-)module rather
that from the context of its parent.

I'm hoping that this fixes #55364 though right now I'm not sure it's the right fix.

r? @GuillaumeGomez
2019-11-01 11:20:12 -07:00
Tyler Mandry
1918205891
Rollup merge of #65471 - GuillaumeGomez:long-err-explanation-E0578, r=Dylan-DPC
Add long error explanation for E0578

Part of #61137

r? @kinnison
2019-11-01 11:20:11 -07:00
Tyler Mandry
7297cd8d92
Rollup merge of #65470 - traxys:fix_65401, r=michaelwoerister
Don't hide ICEs from previous incremental compiles

I think this fixes #65401, the compiler does not fail to ICE after the first compilation, tested on the last snippet of [this comment](https://github.com/rust-lang/rust/issues/63154#issuecomment-541592381).
I am not very sure of the fix as I don't understand much of the structure of the compiler.
2019-11-01 11:20:09 -07:00
Tyler Mandry
9175247e72
Rollup merge of #65112 - jack-t:type-parens-lint, r=varkor
Add lint and tests for unnecessary parens around types

This is my first contribution to the Rust project, so I apologize if I'm not doing things the right way.

The PR fixes #64169. It adds a lint and tests for unnecessary parentheses around types. I've run `tidy` and `rustfmt` &mdash; I'm not totally sure it worked right, though &mdash; and I've tried to follow the instructions linked in the readme.

I tried to think through all the variants of `ast::TyKind` to find exceptions to this lint, and I could only find the one mentioned in the original issue, which concerns types with `dyn`. I'm not a Rust expert, thought, so I may well be missing something.

There's also a problem with getting this to build. The new lint catches several things in the, e.g., `core`. Because `x.py` seems to build with an equivalent of `-Werror`, what would have been warnings cause the build to break. I got it to build and the tests to pass with `--warnings warn` on my `x.py build` and `x.py test` commands.
2019-11-01 11:20:07 -07:00
bors
01e5d91482 Auto merge of #65718 - eddyb:codegen-var-debuginfo, r=nikomatsakis
rustc_codegen_ssa: introduce MIR VarDebugInfo, but only for codegen.

These are all the codegen changes necessary for #56231.

The refactors were performed locally to codegen, and in several steps, to ease reviewing and avoid introducing changes in behavior (as I'm not sure our debuginfo tests cover enough).

r? @michaelwoerister cc @nagisa @rkruppe @oli-obk
2019-11-01 11:34:51 +00:00
bors
253fc0ed74 Auto merge of #65698 - msizanoen1:dual-proc-macro-hash, r=petrochenkov
Dual proc macro hash

This PR changes current `-Z dual-proc-macro` mechanism from resolving only by name to including the hash of the host crate inside the transistive dependency information to prevent name conflicts.
Fix partially #62558
2019-11-01 06:35:40 +00:00
bors
472e6787f0 Auto merge of #65459 - ecstatic-morse:graphviz-subgraph, r=estebank
Fix `-Zunpretty=mir-cfg` to render multiple items

`-Zunpretty=mir-cfg` outputs DOT to stdout for all items being compiled. However, it puts all of these items in separate `digraph`s, which means the result of redirecting that output to a file is not valid. Most dot renderers (I have tried `dot` and `xdot`) cannot render the output.

This PR checks to see if `write_mir_graphviz` will  process multiple items, and writes them each as a `subgraph` in a single, top-level `digraph`. As a result, DOT can be viewed without manually editing the output file. The output is unchanged when printing a single item (e.g.`-Zunpretty=mir-cfg=item_name`).

Here's the output of `xdot` for a rust file containing three items:
![three-items](https://user-images.githubusercontent.com/29463364/66889712-4bf62200-ef98-11e9-83b5-60faa2a300dd.png)

The borders are a result of the nonstandard–but well-supported–[`cluster` prefix](https://graphviz.gitlab.io/_pages/doc/info/lang.html) (search for "Subgraphs and Clusters"). They will not appear if your renderer does not support this extension, but the graph will still render properly.
2019-11-01 03:15:31 +00:00
Eduard-Mihai Burtescu
60a22665c8 rustc_codegen_ssa: introduce MIR VarDebugInfo, but only for codegen. 2019-10-31 20:25:57 +02:00
Eduard-Mihai Burtescu
1e42072673 rustc_codegen_ssa: hide address ops from the declare_local interface. 2019-10-31 20:25:56 +02:00
Eduard-Mihai Burtescu
c2e7743da8 rustc_codegen_ssa: move debuginfo scopes into FunctionDebugContext. 2019-10-31 20:25:55 +02:00
Eduard-Mihai Burtescu
06869b8d17 rustc_codegen_ssa: change set_var_name back to taking a &str. 2019-10-31 20:25:54 +02:00
Eduard-Mihai Burtescu
5f4ee36e03 rustc_codegen_ssa: move all set_var_name calls to mir::debuginfo. 2019-10-31 20:25:42 +02:00
Eduard-Mihai Burtescu
c58e6b5752 rustc_codegen_ssa: move local variable debuginfo to mir::debuginfo. 2019-10-31 20:00:16 +02:00
Eduard-Mihai Burtescu
5059a3c7d4 rustc_codegen_ssa: move debuginfo-related things to a new mir::debuginfo module. 2019-10-31 20:00:15 +02:00
bors
aa4e57ca8f Auto merge of #65091 - sekineh:into-iter-sorted, r=KodrAus
Implement ordered/sorted iterators on BinaryHeap as per #59278

I've implemented the ordered version of iterator on BinaryHeap as per #59278.

# Added methods:

* `.into_iter_sorted()`
  * like `.into_iter()`; but returns elements in heap order
* `.drain_sorted()`
  * like `.drain()`; but returns elements in heap order
  * It's a bit _lazy_; elements are removed on drop. (Edit: it’s similar to vec::Drain)

For `DrainSorted` struct, I implemented `Drop` trait following @scottmcm 's [suggestion](https://github.com/rust-lang/rust/issues/59278#issuecomment-537306925)

# ~TODO~ DONE
* ~I think I need to add more tests other than doctest.~

# **Notes:**
* we renamed `_ordered` to `_sorted`, because the latter is more common in rust libs. (as suggested by @KodrAus )
2019-10-31 15:15:53 +00:00
Guillaume Gomez
bfe9c9e429 update ui tests 2019-10-31 14:27:16 +01:00
Guillaume Gomez
9c2f1dd377 Add long error explanation for E0578 2019-10-31 14:27:16 +01:00
bors
92df638162 Auto merge of #63803 - GuillaumeGomez:stabilize-doctest, r=ollie27,QuietMisdreavus,Mark-Simulacrum
[rustdoc] stabilize cfg(doctest)

Fixes #62210.

Since we removed rustdoc from providing cfg(test) on test runs, it's been replaced by cfg(doctest). It'd be nice to have it in not too far in the future.
2019-10-31 11:51:42 +00:00
Guillaume Gomez
fcbf77ef16 Update ui tests 2019-10-31 10:39:46 +01:00
Guillaume Gomez
5dfb167bf3 Create new error E0743 2019-10-31 10:39:38 +01:00
bors
b3a0350c2b Auto merge of #65982 - RalfJung:miri, r=alexcrichton
update miri

As a side-effect, this bumps env_logger from 0.7.0 to 0.7.1.

Fixes https://github.com/rust-lang/rust/issues/65889
2019-10-31 08:31:27 +00:00
Ohad Ravid
8bb5450128 Fix incorrect diagnostics for expected type in E0271 with an associated type 2019-10-31 09:30:14 +01:00
Daniel Silverstone
c24a099e8b
rustdoc: Resolve module-level doc references more locally
Module level docs should resolve intra-doc links as locally as
possible.  As such, this commit alters the heuristic for finding
intra-doc links such that we attempt to resolve names mentioned
in *inner* documentation comments within the (sub-)module rather
that from the context of its parent.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-10-31 07:49:54 +00:00
Ralf Jung
9cd1edea4a rebase and re-update lock file 2019-10-31 07:50:54 +01:00
Ralf Jung
64cf596ca6 update miri 2019-10-31 07:50:27 +01:00
msizanoen1
8a0d2332f9 Adjust rustc-workspace-hack 2019-10-31 13:12:35 +07:00
msizanoen
0a21018d14 Implement dual proc macro hashing
This changes the mechanism of `-Z dual-proc-macro` to record the host
proc macro hash in the transistive dependency information and use it
during dependency resolution instead of resolving only by name.
2019-10-31 13:12:35 +07:00
bors
2f16be42dd Auto merge of #65990 - Centril:rollup-v843h4a, r=Centril
Rollup of 7 pull requests

Successful merges:

 - #65274 (Upload toolstates.json to rust-lang-ci2)
 - #65434 (Add long error explanation for E0577)
 - #65850 (Update comments re type parameter hack in object safety)
 - #65955 (ci: revert msys2 ca-certificates hack)
 - #65959 (Fix an incorrect docstring for Immediate in librustc_mir/interpret.)
 - #65979 (Switch CrateMetadata's source_map_import_info from RwLock to Once)
 - #65981 (work around aggressive syntax feature gating)

Failed merges:

r? @ghost
2019-10-31 02:20:30 +00:00
Mazdak Farrokhzad
83000c29ba
Rollup merge of #65981 - RalfJung:check-your-gates, r=Centril
work around aggressive syntax feature gating

This works around https://github.com/rust-lang/rust/issues/65860; fixing `rustc +nightly lib.rs --test --edition 2018` for libcore and thus unblocking https://github.com/RalfJung/miri-test-libstd.
2019-10-31 02:54:12 +01:00
Mazdak Farrokhzad
30ed544948
Rollup merge of #65979 - spastorino:crate-metadata-mutexes, r=Mark-Simulacrum
Switch CrateMetadata's source_map_import_info from RwLock to Once
2019-10-31 02:54:11 +01:00
Mazdak Farrokhzad
60fa6d8ac2
Rollup merge of #65959 - vext01:immediate-docstring, r=davidtwco
Fix an incorrect docstring for Immediate in librustc_mir/interpret.

I suspect `Immediate` was once called `Value`?
2019-10-31 02:54:10 +01:00
Mazdak Farrokhzad
ce64b170eb
Rollup merge of #65955 - pietroalbini:master-revert-msys2-hack, r=Mark-Simulacrum
ci: revert msys2 ca-certificates hack

The hack was added because upstream msys2 broke the ca-certificates package, but since then it has been fixed. This reverts CI to use the upstream package.

Part of #65767
2019-10-31 02:54:08 +01:00
Mazdak Farrokhzad
97b9d1023d
Rollup merge of #65850 - mikeyhew:patch-1, r=nikomatsakis
Update comments re type parameter hack in object safety

To check if a method's receiver type is object safe, we create a new receiver type by substituting in a bogus type parameter (let's call it `U`) for `Self`, and checking that the unmodified receiver type implements `DispatchFromDyn<receiver type with Self = U>`. It would be better to use `dyn Trait` directly, and the only reason we don't is because it triggers another check that `Trait` is object safe, resulting in a query cycle. Once the feature `object_safe_for_dispatch` (tracking issue https://github.com/rust-lang/rust/issues/43561) is stabilized, this will no longer be the case, and we'll be able to use `dyn Trait` as the unsized `Self` type. I've updated the comments in object_safety.rs accordingly.

cc @Centril @nikomatsakis @bovinebuddha
2019-10-31 02:54:07 +01:00
Mazdak Farrokhzad
0bd4037931
Rollup merge of #65434 - GuillaumeGomez:long-err-explanation-E0577, r=Dylan-DPC
Add long error explanation for E0577

Part of #61137.

r? @kinnison
2019-10-31 02:54:05 +01:00
Mazdak Farrokhzad
6cee78c4f0
Rollup merge of #65274 - pietroalbini:ci-upload-toolstate, r=alexcrichton
Upload toolstates.json to rust-lang-ci2

This PR does two things:

* Following up with https://github.com/rust-lang/rust/pull/65202, it migrates deploying artifacts to CI in a script. Both uploading release artifacts and CPU stats were merged into the same script, designing it to be easily extended.
* Uploads the toolstate JSON to `rust-lang-ci2` along with the release artifacts, both for Linux and Windows. This is needed because @RalfJung wants to stop shipping MIRI when its tests are failing, and the toolstate repo doesn't have entries for each commit. Having the toolstate data (just for that specific commit) on `rust-lang-ci2` will simplify the code a lot.

r? @alexcrichton
cc @RalfJung
2019-10-31 02:54:04 +01:00
bors
03d537ef22 Auto merge of #65957 - Xanewok:update-rls, r=Xanewok
submodules: Bump RLS to 58869107ec162a821a4bee53cdd3f51c84cda3ea

Most importantly it contains d267b49c2f which fixes the RLS build whenever Clippy is built successfully in Rust CI.

Closes #65944

r? @ghost
2019-10-30 22:37:21 +00:00
Santiago Pastorino
12273cb7f6
Make init_locking return a reference to the initialized data 2019-10-30 18:35:54 -03:00
Ralf Jung
4819cba461 work around aggressive syntax feature gating 2019-10-30 20:59:15 +01:00
Santiago Pastorino
a6ac22e7e8
Change CrateMetadata's source_map_import_info from RwLock to Once
This field is created lazily on first use and after that is read only.
That's exactly what Once is for.
2019-10-30 16:51:14 -03:00
Santiago Pastorino
308c4a620d
Correctly indent get_predicates function 2019-10-30 16:28:56 -03:00
Pietro Albini
ca3468768d
ci: move toolstates.json to /tmp/toolstate/ and docker mount it
Before this commit toolstates.json was stored in /tmp and it wasn't
mounted outside the build container. That caused uploading the file in
the upload-artifacts task to fail, as the file was missing on the host.

Mounting /tmp/toolstates.json alone is not the best approach: if the
file is missing when the container is started the Docker engine will
create a *directory* named /tmp/toolstates.json.

The Docker issue could be solved by pre-creating an empty file named
/tmp/toolstates.json, but doing that could cause problems if bootstrap
fails to generate the file and the toolstate scripts receive an empty
JSON.

The approach I took in this commit is to instead mount a /tmp/toolstate
directory inside Docker, and create the toolstates.json file in it. That
also required a small bootstrap change to ensure the directory is
created if it's missing.
2019-10-30 19:41:22 +01:00
Vojtech Kral
e9e4836532 Fix libunwind build: Define __LITTLE_ENDIAN__ for LE targets
If __LITTLE_ENDIAN__ is missing, libunwind assumes big endian
and reads unwinding instructions wrong on ARM EHABI.

Fix #65765
2019-10-30 18:09:05 +01:00