bors [Fri, 20 Dec 2019 16:24:12 +0000 (16:24 +0000)]
Auto merge of #67455 - Centril:rollup-mf0yc81, r=Centril
Rollup of 5 pull requests
Successful merges:
- #64588 (Add a raw "address of" operator)
- #67031 (Update tokio crates to latest versions)
- #67131 (Merge `TraitItem` & `ImplItem into `AssocItem`)
- #67354 (Fix pointing at arg when cause is outside of call)
- #67363 (Fix handling of wasm import modules and names)
Rollup merge of #67363 - alexcrichton:wasm-import-modules, r=eddyb
Fix handling of wasm import modules and names
The WebAssembly targets of rustc have weird issues around name mangling
and import the same name from different modules. This all largely stems
from the fact that we're using literal symbol names in LLVM IR to
represent what a function is called when it's imported, and we're not
using the wasm-specific `wasm-import-name` attribute. This in turn leads
to two issues:
* If, in the same codegen unit, the same FFI symbol is referenced twice
then rustc, when translating to LLVM IR, will only reference one
symbol from the first wasm module referenced.
* There's also a bug in LLD [1] where even if two codegen units
reference different modules, having the same symbol names means that
LLD coalesces the symbols and only refers to one wasm module.
Put another way, all our imported wasm symbols from the environment are
keyed off their LLVM IR symbol name, which has lots of collisions today.
This commit fixes the issue by implementing two changes:
1. All wasm symbols with `#[link(wasm_import_module = "...")]` are
mangled by default in LLVM IR. This means they're all given unique names.
2. Symbols then use the `wasm-import-name` attribute to ensure that the
WebAssembly file uses the correct import name.
When put together this should ensure we don't trip over the LLD bug [1]
and we also codegen IR correctly always referencing the right symbols
with the right import module/name pairs.
Rollup merge of #67031 - mati865:tokio-update, r=nikomatsakis
Update tokio crates to latest versions
Drops few old crates from the workspace (they are only used during tests, not in Rust itself) and allows to remove even more crates during next `rustc-ap-*` update.
Rollup merge of #64588 - matthewjasper:mir-address-of, r=oli-obk
Add a raw "address of" operator
* Parse and feature gate `&raw [const | mut] expr` (feature gate name is `raw_address_of`)
* Add `mir::Rvalue::AddressOf`
* Use the new `Rvalue` for:
* the new syntax
* reference to pointer casts
* drop shims for slices and arrays
* Stop using `mir::Rvalue::Cast` with a reference as the operand
* Correctly evaluate `mir::Rvalue::{Ref, AddressOf}` in constant propagation
bors [Fri, 20 Dec 2019 11:17:47 +0000 (11:17 +0000)]
Auto merge of #67449 - Centril:rollup-04hvg57, r=Centril
Rollup of 7 pull requests
Successful merges:
- #66755 (Remove a const-if-hack in RawVec)
- #67127 (Use structured suggestion for disambiguating method calls)
- #67219 (Fix up Command Debug output when arg0 is specified.)
- #67285 (Indicate origin of where type parameter for uninferred types )
- #67328 (Remove now-redundant range check on u128 -> f32 casts)
- #67367 (Move command line option definitions into a dedicated file)
- #67442 (Remove `SOCK_CLOEXEC` dummy variable on platforms that don't use it.)
Rollup merge of #67367 - 0dvictor:options, r=Centril
Move command line option definitions into a dedicated file
config.rs has reached the 3000 line tidy limit, this commit moves command line option definitions into a new file - options.rs, and leaves the rest of configuration infrastructure in config.rs.
Rollup merge of #67328 - rkruppe:simplify-u128-f32-cast, r=matthewjasper
Remove now-redundant range check on u128 -> f32 casts
This code was added to avoid UB in LLVM 6 and earlier, but we no longer support those LLVM versions.
Since https://reviews.llvm.org/D47807 (released in LLVM 7), uitofp does exactly what we need.
Rollup merge of #67285 - ohadravid:indicate-origin-of-where-type-parameter, r=estebank
Indicate origin of where type parameter for uninferred types
Based on #65951 (which is not merge yet), fixes #67277.
This PR improves a little the diagnostic for code like:
```
async fn foo() {
bar().await;
}
async fn bar<T>() -> () {}
```
by showing:
```
error[E0698]: type inside `async fn` body must be known in this context
--> unresolved_type_param.rs:9:5
|
9 | bar().await;
| ^^^ cannot infer type for type parameter `T` declared on the function `bar`
|
...
```
(The
```
declared on the function `bar`
```
part is new)
A small side note: `Vec` and `slice` seem to resist this change, because querying `item_name()` panics, and `get_opt_name()` returns `None`.
Rollup merge of #67219 - jsgf:command-argv0-debug, r=joshtriplett
Fix up Command Debug output when arg0 is specified.
PR https://github.com/rust-lang/rust/pull/66512 added the ability to set argv[0] on
Command. As a side effect, it changed the Debug output to print both the program and
argv[0], which in practice results in stuttery output (`"echo" "echo" "foo"`).
This PR reverts the behaviour to the the old one, so that the command is only printed
once - unless arg0 has been set. In that case it emits `"[command]" "arg0" "arg1" ...`.
Victor Ding [Tue, 17 Dec 2019 12:22:55 +0000 (23:22 +1100)]
Move command line option definitions into a dedicated file
config.rs has reached the 3000 line tidy limit, this commit moves
command line option definitions into a new file - options.rs, and
leaves the rest of configuration infrastructure in config.rs.
Mark Rousskov [Thu, 19 Dec 2019 22:53:54 +0000 (17:53 -0500)]
Rollup merge of #67351 - Mark-Simulacrum:always-channel, r=pietroalbini
Set release channel on non-dist builders
Toolstate publication only runs if the channel is "nightly" and
previously the toolstate builders did not know that the channel was
nightly (since they are not dist builders).
A look through bootstrap seems to indicate that nothing should directly
depend on the channel being set to `-dev` on the test builders, though
this may cause some problems with UI tests (if for some reason they're
dumping the channel into stderr), but we cannot find evidence of such so
hopefully this is fine.
Mark Rousskov [Thu, 19 Dec 2019 22:53:52 +0000 (17:53 -0500)]
Rollup merge of #67253 - elichai:2019-12-fmt, r=Dylan-DPC
Add more delegations to the fmt docs and add doctests
HI,
this is a continuation to #67021
I replaced the `Debug` example with one that use the `Debug*` helpers so that padding etc will work too.
I also added asserts for the doctests as @RalfJung asked :)
The only thing I left with the `write!` macro is the `Display` example as I didn't know if there's a better way to do that.
bors [Thu, 19 Dec 2019 11:33:00 +0000 (11:33 +0000)]
Auto merge of #67419 - Centril:rollup-v7b0ypv, r=Centril
Rollup of 8 pull requests
Successful merges:
- #67189 (Unify binop wording)
- #67270 (std: Implement `LineWriter::write_vectored`)
- #67286 (Fix the configure.py TOML field for a couple LLVM options)
- #67321 (make htons const fn)
- #67382 (Remove some unnecessary `ATTR_*` constants.)
- #67389 (Remove `SO_NOSIGPIPE` dummy variable on platforms that don't use it.)
- #67394 (Remove outdated references to @T from comments)
- #67406 (Suggest associated type when the specified one cannot be found)
Rollup merge of #67406 - ohadravid:suggest-assoc-type, r=estebank
Suggest associated type when the specified one cannot be found
Fixes #67386, so code like this:
```
use std::ops::Deref;
fn homura<T: Deref<Trget = i32>>(_: T) {}
fn main() {}
```
results in:
```
error[E0220]: associated type `Trget` not found for `std::ops::Deref`
--> type-binding.rs:6:20
|
6 | fn homura<T: Deref<Trget = i32>>(_: T) {}
| ^^^^^^^^^^^ help: there is an associated type with a similar name: `Target`
error: aborting due to previous error
```
(The `help` is new)
I used an `all_candidates: impl Fn() -> Iterator<...>` instead of `collect`ing to avoid the cost of allocating the Vec when no errors are found, at the expense of a little added complexity.
Rollup merge of #67270 - alexcrichton:write-more-line-writer, r=sfackler
std: Implement `LineWriter::write_vectored`
This commit implements the `write_vectored` method of the `LineWriter`
type. First discovered in bytecodealliance/wasmtime#629 the
`write_vectored` method of `Stdout` bottoms out here but only ends up
writing the first buffer due to the default implementation of
`write_vectored`.
Like `BufWriter`, however, `LineWriter` can have a non-default
implementation of `write_vectored` which tries to preserve the
vectored-ness as much as possible. Namely we can have a vectored write
for everything before the newline and everything after the newline if
all the stars align well.
Also like `BufWriter`, though, special care is taken to ensure that
whenever bytes are written we're sure to signal success since that
represents a "commit" of writing bytes.
Mark Rousskov [Mon, 16 Dec 2019 13:52:50 +0000 (08:52 -0500)]
Set release channel on non-dist builders
Toolstate publication only runs if the channel is "nightly" and
previously the toolstate builders did not know that the channel was
nightly (since they are not dist builders).
A look through bootstrap seems to indicate that nothing should directly
depend on the channel being set to `-dev` on the test builders, though
this may cause some problems with UI tests (if for some reason they're
dumping the channel into stderr), but we cannot find evidence of such so
hopefully this is fine.
bors [Wed, 18 Dec 2019 22:03:29 +0000 (22:03 +0000)]
Auto merge of #67402 - Mark-Simulacrum:stage0-step, r=alexcrichton
Switch bootstrap to 1.41
This updates the version number for master to 1.42 and switches the bootstrap compiler to yesterday's beta. Fallout of cfg(bootstrap) changes is also dealt with.
Matthew Jasper [Sat, 20 Apr 2019 17:06:03 +0000 (18:06 +0100)]
Start generating AddressOf rvalues in MIR
`hir::BorrowKind::Raw` borrows and casting a reference to a raw
pointer no longer do a reborrow followed by a cast. Instead we
dereference and take the address.
bors [Wed, 18 Dec 2019 11:04:07 +0000 (11:04 +0000)]
Auto merge of #67379 - Mark-Simulacrum:revert-par-4-default, r=Mark-Simulacrum
Revert enabling parallelism by default
We will re-land a similar patch at a future date but for now we should get a nightly
released in a few hours with the parallel patch, so this should be
reverted to make sure that the next nightly is not parallel-enabled.
We will reland a similar patch at a future date but for now we should get a nightly
released in a few hours with the parallel patch, so this should be
reverted to make sure that the next nightly is not parallel-enabled.
Mark Rousskov [Tue, 17 Dec 2019 17:47:10 +0000 (12:47 -0500)]
Disable cargo tests for now
These depend on rustc being bug-free and it looks like that's not
currently entirely the case (e.g., we know of at least one bug that
introduces nondeterminism).
Mark Rousskov [Mon, 16 Dec 2019 21:27:35 +0000 (16:27 -0500)]
Always build and ship parallel-enabled compilers
This also removes the unused NO_PARALLEL_COMPILER flag; if we want that
functionality we can readd it but this makes sure we really are parallel
everywhere.
This also patches a test that has differing output in the parallel case
(hopefully deterministically so!).
Mark Rousskov [Mon, 16 Dec 2019 21:23:07 +0000 (16:23 -0500)]
Change the default thread count to min(4, vCPUs)
This avoids the problems of high thread counts (i.e., contention in the
kernel on the jobserver pipe due to thundering herd of readers) while
stil giving rustc some parallelism to work with.
Fix up Command Debug output when arg0 is specified.
PR https://github.com/rust-lang/rust/pull/66512 added the ability to set argv[0] on
Command. As a side effect, it changed the Debug output to print both the program and
argv[0], which in practice results in stuttery output ("echo echo foo").
This PR reverts the behaviour to the the old one, so that the command is only printed
once - unless arg0 has been set. In that case it emits "[command] arg0 arg1 ...".
Alex Crichton [Mon, 16 Dec 2019 22:15:57 +0000 (14:15 -0800)]
Fix handling of wasm import modules and names
The WebAssembly targets of rustc have weird issues around name mangling
and import the same name from different modules. This all largely stems
from the fact that we're using literal symbol names in LLVM IR to
represent what a function is called when it's imported, and we're not
using the wasm-specific `wasm-import-name` attribute. This in turn leads
to two issues:
* If, in the same codegen unit, the same FFI symbol is referenced twice
then rustc, when translating to LLVM IR, will only reference one
symbol from the first wasm module referenced.
* There's also a bug in LLD [1] where even if two codegen units
reference different modules, having the same symbol names means that
LLD coalesces the symbols and only refers to one wasm module.
Put another way, all our imported wasm symbols from the environment are
keyed off their LLVM IR symbol name, which has lots of collisions today.
This commit fixes the issue by implementing two changes:
1. All wasm symbols with `#[link(wasm_import_module = "...")]` are
mangled by default in LLVM IR. This means they're all given unique names.
2. Symbols then use the `wasm-import-name` attribute to ensure that the
WebAssembly file uses the correct import name.
When put together this should ensure we don't trip over the LLD bug [1]
and we also codegen IR correctly always referencing the right symbols
with the right import module/name pairs.
bors [Mon, 16 Dec 2019 18:55:07 +0000 (18:55 +0000)]
Auto merge of #67356 - Centril:rollup-paaw3ju, r=Centril
Rollup of 8 pull requests
Successful merges:
- #67249 (Improve code generated for `starts_with(<literal char>)`)
- #67308 (Delete flaky test net::tcp::tests::fast_rebind)
- #67318 (Improve typeck & lowering docs for slice patterns)
- #67322 (use Self alias in place of macros)
- #67323 (make transparent enums more ordinary)
- #67336 (Fix JS error when loading page with search)
- #67344 (.gitignore: Don't ignore a file that exists in the repository)
- #67349 (Minor: update Unsize docs for dyn syntax)
Rollup merge of #67308 - dtolnay:fast_rebind, r=alexcrichton
Delete flaky test net::tcp::tests::fast_rebind
This test is unreliable for at least 3 users on two platforms: see #57509 and #51006. It was added 5 years ago in #22015. Do we know whether this is testing something important that would indicate a bug in our implementation, or if it's fine to remove?
r? @sfackler @alexcrichton because this somewhat resembles #59018
Rollup merge of #67249 - ranma42:improve-starts-with-literal-char, r=BurntSushi
Improve code generated for `starts_with(<literal char>)`
This PR includes two minor improvements to the code generated when checking for string prefix/suffix.
The first commit simplifies the str/str operation, by taking advantage of the raw UTF-8 representation.
The second commit replaces the current str/char matching logic with a char->str encoding and then the previous method.
The resulting code should be equivalent in the generic case (one char is being encoded versus one char being decoded), but it becomes easy to optimize in the case of a literal char, which in most cases a developer might expect to be at least as simple as that of a literal string.