120686 Commits

Author SHA1 Message Date
Gary Guo
e04baed0db Fix ice-72487 2020-05-23 07:33:09 +01:00
bors
7f940ef5d9 Auto merge of #72256 - ecstatic-morse:once-cell, r=Mark-Simulacrum
Use `once_cell` crate instead of custom data structure

Internally, we use the [`Once`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/sync/struct.Once.html) type for shared data that is initialized exactly once and only read from afterwards. `Once` uses a `parking_lot::Mutex` when the parallel compiler is enabled and a `RefCell` when it is not. This PR switches to the [`once_cell`](https://crates.io/crates/once_cell) crate, which also uses a `parking_lot::Mutex` for its `sync` version (because we enable the `parking_lot` feature) but has zero overhead for its `unsync` one.

This PR adds `once_cell` to the list of whitelisted dependencies. I think this is acceptable because it is already used in `rustc_driver`, is owned by a well-known community member (cc @matklad), and has a stable release. cc @rust-lang/compiler

`once_cell` has a slightly more minimal API than `Once`, which allows for initialization to be either optimistic (evaluate the initializer and then synchronize) or pessimistic (synchronize and then evaluate the initializer). `once_cell`'s `get_or_init` is always pessimistic. The optimistic version is only used once in the current `master`.

r? @Mark-Simulacrum
2020-05-23 03:30:07 +00:00
Aaron Hill
d277904582
Remove macro_defs map
We store store the `DefId` directly in `ExpnData`. This will allow us to
serialize `ExpnData` in PR #72121 without needing to manage a side
table.
2020-05-22 16:57:25 -04:00
Dylan MacKenzie
1fad3b7a05 Use mk_trait_obligation_with_new_self_ty for new suggestion 2020-05-22 13:34:41 -07:00
Dylan MacKenzie
f99519bebb Bail out if output_ty has bound variables 2020-05-22 13:34:41 -07:00
Dylan MacKenzie
7278e29592 Document invariants of mk_trait_obligation_with_new_self_ty 2020-05-22 13:34:41 -07:00
Dylan MacKenzie
d2bacb18d2 Ensure that new_self_ty has no escaping bound vars
Otherwise inserting it to the `Binder` used by `trait_ref` would cause
problems. This is just to be extra carefult: we aren't going to
start recommending that the user start using HKTs anytime soon.
2020-05-22 13:34:41 -07:00
Dylan MacKenzie
4d9e9c6d4e Bless other example of #71394 2020-05-22 13:34:41 -07:00
Dylan MacKenzie
8ea828be2f Add regression test for #71394 2020-05-22 13:34:41 -07:00
Dylan MacKenzie
730c6f3e57 Preserve substitutions when trying to prove trait obligation
`mk_obligation_for_def_id` is only correct if the trait and self type do
not have any substitutions. Use a different method,
`mk_trait_obligation_with_new_self_ty` that is more clear about what is
happening.
2020-05-22 13:34:38 -07:00
Dylan MacKenzie
307153e611 Switch to non-doc comment 2020-05-22 13:31:02 -07:00
Dylan MacKenzie
f17e2c93a6 Use OnceCell for predecessor cache 2020-05-22 13:31:02 -07:00
Dylan MacKenzie
c282c1c654 Use OnceCell instead of Once 2020-05-22 13:31:02 -07:00
Dylan MacKenzie
9f82785c81 Replace rustc_data_structures::sync::Once with OnceCell 2020-05-22 13:26:39 -07:00
Dylan DPC
bf1b998be6
Rollup merge of #72461 - GuillaumeGomez:cleanup-e0600, r=Dylan-DPC
Clean up E0600 explanation

r? @Dylan-DPC
2020-05-22 21:45:04 +02:00
Dylan DPC
141ce5f2ad
Rollup merge of #72459 - yoshuawuyts:into-future, r=nikomatsakis
Add core::future::IntoFuture

This patch reintroduces the `core::future::IntoFuture` trait. However unlike earlier PRs this patch does not integrate it into the `async/.await` lowering since that lead to performance regressions. By introducing the trait separately from the integration, the integration PR can be more narrowly scoped, and people can start trying out the `IntoFuture` trait today. Thanks heaps!

cc/ @rust-lang/wg-async-foundations

## References
- Original PR adding `IntoFuture` https://github.com/rust-lang/rust/pull/65244
- Open issue to re-land `IntoFuture` (assigned to me) https://github.com/rust-lang/rust/issues/67982
- Tracking issue for `IntoFuture` https://github.com/rust-lang/rust/issues/67644
2020-05-22 21:45:01 +02:00
Dylan DPC
3083ce7ab1
Rollup merge of #72453 - dtolnay:open, r=Mark-Simulacrum
Add flag to open docs:  x.py doc --open

This aligns with Cargo's flag `cargo doc --open`.

Tested with:

```bash
   # opens doc/index.html
x.py doc --stage 0 --open
x.py doc --stage 0 --open src/doc

   # opens doc/book/index.html
x.py doc --stage 0 --open src/doc/book

   # opens doc/std/index.html
x.py doc --stage 0 --open src/libstd

   # opens doc/proc_macro/index.html
x.py doc --stage 0 --open src/libproc_macro

   # opens both
x.py doc --stage 0 --open src/libstd src/libproc_macro
```
2020-05-22 21:45:00 +02:00
Dylan DPC
01adfe1bc3
Rollup merge of #72395 - Elinvynia:highfive, r=Mark-Simulacrum
Allow rust-highfive to label issues it creates.

This is my first meaningful PR, I am unsure how to test this code so any pointers would be welcome!

I am about 50% sure it works.
2020-05-22 21:44:58 +02:00
Dylan DPC
84fbbded1e
Rollup merge of #72385 - spastorino:add-exclude-labels, r=Mark-Simulacrum
Add some teams to prioritization exclude_labels

r? @Mark-Simulacrum @LeSeulArtichaut
2020-05-22 21:44:56 +02:00
Dylan DPC
47f3c440ec
Rollup merge of #72375 - GuillaumeGomez:cleanup-e0599, r=Dylan-DPC
Improve E0599 explanation

r? @Dylan-DPC
2020-05-22 21:44:54 +02:00
Dylan DPC
dd78839432
Rollup merge of #71289 - xliiv:70802-intra-self, r=GuillaumeGomez
Allow using `Self::` in doc

Closes #70802
2020-05-22 21:44:52 +02:00
Aaron Hill
5685e4dd90
Fix rebase fallout 2020-05-22 15:12:11 -04:00
Aaron Hill
30c00fd26a
Add test for macro_rules! invoking a proc-macro with capture groups 2020-05-22 15:07:41 -04:00
Aaron Hill
2af0218bf1
Recursively expand nonterminals 2020-05-22 15:07:36 -04:00
Aaron Hill
7a4c1865fb
Move functions to librustc_parse 2020-05-22 15:01:08 -04:00
Mateusz Mikuła
4b516279a9 Revert MSYS2 CI workaround 2020-05-22 19:08:39 +02:00
Matthew Jasper
9754b3fc1d Document collect_bounding_regions 2020-05-22 18:03:08 +01:00
Matthew Jasper
f9f3063cfa Update tests 2020-05-22 18:03:08 +01:00
Matthew Jasper
3d8a0733ae Remove dead ScopeTree code 2020-05-22 18:03:08 +01:00
Matthew Jasper
52d628f250 Remove unused error reporting code 2020-05-22 18:03:08 +01:00
Matthew Jasper
7d73e4cc47 Remove ReScope 2020-05-22 18:03:08 +01:00
David Tolnay
07b1de4e9a
Report error from opener in bootstrap
On my machine, an error looks like:

    Finished release [optimized] target(s) in 0.29s
    Opening doc /git/rust/build/x86_64-unknown-linux-gnu/doc/std/index.html
    command 'xdg-open (internal)' did not execute successfully; exit code: 4
    command stderr:
    gio: file:///git/rust/build/x86_64-unknown-linux-gnu/doc/std/index.html: Error when getting information for file “/git/rust/build/x86_64-unknown-linux-gnu/doc/std/index.html”: No such file or directory

    Build completed successfully in 0:00:08
2020-05-22 09:51:46 -07:00
Matthew Jasper
c102312c2b Remove the parts of regionck referencing ReScope 2020-05-22 17:38:20 +01:00
Matthew Jasper
187bfb333b Improve the error when an opaque type captures ReEmtpty 2020-05-22 17:38:20 +01:00
Matthew Jasper
33f90f213d Check for upper bound universe errors more carefully 2020-05-22 17:38:20 +01:00
LeSeulArtichaut
01630b26dd Implement Sync for `process::Command on unix and vxworks 2020-05-22 18:33:12 +02:00
bors
215f2d3294 Auto merge of #72464 - RalfJung:rollup-xhm7w7u, r=RalfJung
Rollup of 7 pull requests

Successful merges:

 - #71829 (Fix suggestion to borrow in struct)
 - #72123 (Stabilize process_set_argv0 feature for Unix)
 - #72235 (Clean up E0590 explanation)
 - #72345 (Clean up E0593 explanation)
 - #72376 ([self-profling] Record the cgu name when doing codegen for a module)
 - #72399 (Add fast-path optimization for Ipv4Addr::fmt)
 - #72435 (rustllvm: Fix warnings about unused function parameters)

Failed merges:

r? @ghost
2020-05-22 15:33:32 +00:00
Elinvynia
dc4b9fd863 Allow rust-highfive to label issues it creates.
Replace sets with lists.
2020-05-22 17:28:22 +02:00
Ralf Jung
e7503ca7bf
Rollup merge of #72435 - petrochenkov:cratetypesopt, r=Mark-Simulacrum
rustllvm: Fix warnings about unused function parameters

And then perform corresponding cleanups on Rust side.

Fixes https://github.com/rust-lang/rust/issues/72427
2020-05-22 16:58:37 +02:00
Ralf Jung
37587af8d5
Rollup merge of #72399 - Lucretiel:ipv4-display-fast, r=kennytm
Add fast-path optimization for Ipv4Addr::fmt

Don't use an intermediary buffer when writing an IPv4 address without any specific alignment options
2020-05-22 16:58:36 +02:00
Ralf Jung
a116e7b02f
Rollup merge of #72376 - wesleywiser:record_cgu_name, r=Mark-Simulacrum
[self-profling] Record the cgu name when doing codegen for a module
2020-05-22 16:58:31 +02:00
Ralf Jung
f7ed13b6a5
Rollup merge of #72345 - GuillaumeGomez:cleanup-e0593, r=Dylan-DPC
Clean up E0593 explanation

r? @Dylan-DPC
2020-05-22 16:58:29 +02:00
Ralf Jung
02eb002ee3
Rollup merge of #72235 - GuillaumeGomez:cleanup-E0590, r=Dylan-DPC
Clean up E0590 explanation

r? @Dylan-DPC
2020-05-22 16:58:26 +02:00
Ralf Jung
53d0046983
Rollup merge of #72123 - jsgf:stabilize-arg0, r=sfackler
Stabilize process_set_argv0 feature for Unix

This stabilizes process_set_argv0 targeting 1.45.0. It has been
useful in practice and seems useful as-is.

The equivalent feature could be implemented for Windows, but as far as I
know nobody has. That can be done separately.

Tracking issue: #66510
2020-05-22 16:58:24 +02:00
Ralf Jung
9c34481c49
Rollup merge of #71829 - kper:issue71136, r=matthewjasper
Fix suggestion to borrow in struct

The corresponding issue is #71136.
The compiler suggests that borrowing `the_foos` might solve the problem. This is obviously incorrect.
```
struct Foo(u8);

#[derive(Clone)]
struct FooHolster {
    the_foos: Vec<Foo>,
}
```

I propose as fix to check if there is any colon in the span. However, there might a case where `my_method(B { a: 1, b : foo })` would be appropriate to show a suggestion for `&B ...`.  To fix that too, we can simply check if there is a bracket in the span. This is only possible because both spans are different.
Issue's span: `the_foos: Vec<Foo>`
other's span: `B { a : 1, b : foo }`
2020-05-22 16:58:19 +02:00
Tymoteusz Jankowski
fc0675bf75
Allow using Self:: in doc 2020-05-22 13:57:05 +02:00
Guillaume Gomez
985ebf2c4a Clean up E0590 explanation 2020-05-22 13:26:11 +02:00
Guillaume Gomez
6e5cb37b66 Clean up E0600 explanation 2020-05-22 13:24:34 +02:00
bors
a9ca1ec928 Auto merge of #72460 - RalfJung:rollup-28fs06y, r=RalfJung
Rollup of 4 pull requests

Successful merges:

 - #71610 (InvalidUndefBytes: Track size of undef region used)
 - #72161 (Replace fcntl-based file lock with flock)
 - #72306 (Break tokens before checking if they are 'probably equal')
 - #72325 (Always generated object code for `#![no_builtins]`)

Failed merges:

r? @ghost
2020-05-22 11:24:24 +00:00
Ralf Jung
1119421e26
Rollup merge of #72325 - alexcrichton:ignore-linker-plugin-lto, r=nnethercote
Always generated object code for `#![no_builtins]`

This commit updates the code generation for `#![no_builtins]` to always
produce object files instead of conditionally respecting
`-Clinker-plugin-lto` and sometimes producing bitcode. This is intended
to address rust-lang/cargo#8239.

The issue at hand here is that Cargo has tried to get "smarter" about
codegen in whole crate graph scenarios. When LTO is enabled it attempts
to avoid codegen on as many crates as possible, opting to pass
`-Clinker-plugin-lto` where it can to only generate bitcode. When this
is combined with `-Zbuild-std`, however, it means that
`compiler-builtins` only generates LLVM bitcode instead of object files.
Rustc's own LTO passes then explicitly skip `compiler-builtins` (because
it wouldn't work anyway) which means that LLVM bitcode gets sent to the
linker, which chokes most of the time.

The fix in this PR is to not actually respect `-Clinker-plugin-lto` for
`#![no_builtins]` crates. These crates, even if slurped up by the linker
rather than rustc, will not work with LTO. They define symbols which are
only referenced as part of codegen, so LTO's aggressive internalization
would trivially remove the symbols only to have the linker realize later
that the symbol is undefined. Since pure-bitcode never makes sense for
these libraries, the `-Clinker-plugin-lto` flag is silently ignored.
2020-05-22 11:32:25 +02:00