bors [Sat, 4 May 2019 10:22:05 +0000 (10:22 +0000)]
Auto merge of #60117 - sunfishcode:wasi-os, r=sunfishcode
Categorize WASI as an "OS" rather than as an "environment".
This distinction is fairly abstract, but in practice, the main advantage
here is that LLVM's triple code considers WASI to be an OS, so this
makes rustc agree with that.
Rollup merge of #60527 - davidtwco:issue-60518, r=cramertj
Fix async fn lowering ICE with APIT.
Fixes #60518.
This PR fixes an ICE where simple bindings (which aren't replaced with replacement arguments during async fn lowering) were not being visited in the def collector and thus caused an ICE during HIR lowering for types that use their `DefId` at that point - such as `impl Trait`.
Rollup merge of #60520 - matklad:rustfmt-all-the-new-things, r=Centril
Add rustfmt toml
This commit adds an rustfmt.toml for using for **new** code.
Old code should continut to use old style, until we put automated
style checks in place.
See
https://internals.rust-lang.org/t/running-rustfmt-on-rust-lang-rust-and-other-rust-lang-repositories/8732/81
for the reason why we deviate from the default formatting. The TL;DR
is that currently compiler uses a pretty condensed style of code, and
default settings both create a huge diff and inflate the number of
lines. use_small_heuristics=Max fixes that.
version=Two is required for bug-fixes, which technically can't be made
to the stable first version
cc @Centril: I guess adding config file with agreed-upon formatting doesn't hurt :-)
Rollup merge of #60486 - spastorino:place-related-refactors, r=oli-obk
Place related refactors
Meanwhile I was working on Place 2 I'm finding some little things that I had on my branch but preferred to land a separate PR for things that are simpler to merge.
Rollup merge of #60449 - matthewjasper:impl-trait-outlives, r=pnkfelix
Constrain all regions in the concrete type for an opaque type
`push_outlives_components` skips some regions in a type, notably the signature
of a closure is ignored. Most of the time this is OK, but for opaque types the
concrete type is used when checking auto-trait bounds in other functions.
Rollup merge of #60429 - estebank:pub-path, r=michaelwoerister
Account for paths in incorrect pub qualifier help
Handle case where incorrect pub qualifier with a mod path is used and provide the same help given for all other incorrect qualifiers by making the `pub(crate)` parse check more specific.
Dan Gohman [Fri, 19 Apr 2019 16:59:35 +0000 (09:59 -0700)]
Categorize WASI as an "OS" rather than as an "environment".
This distinction is fairly abstract, but in practice, the main advantage
here is that LLVM's triple code considers WASI to be an OS, so this
makes rustc agree with that.
bors [Sat, 4 May 2019 03:18:14 +0000 (03:18 +0000)]
Auto merge of #59897 - tmandry:variantful-generators, r=eddyb
Multi-variant layouts for generators
This allows generators to overlap fields using variants, but doesn't do any such overlapping yet. It creates one variant for every state of the generator (unresumed, returned, panicked, plus one for every yield), and puts every stored local in each of the yield-point variants.
Required for optimizing generator layouts (#52924).
There was quite a lot of refactoring needed for this change. I've done my best in later commits to eliminate assumptions in the code that only certain kinds of types are multi-variant, and to centralize knowledge of the inner mechanics of generators in as few places as possible.
This change also emits debuginfo about the fields contained in each variant, as well as preserving debuginfo about stored locals while running in the generator.
Also, fixes #59972.
Future work:
- Use this change for an optimization pass that actually overlaps locals within the generator struct (#52924)
- In the type layout fields, don't include locals that are uninitialized for a particular variant, so miri and UB sanitizers can check our memory (see https://github.com/rust-lang/rust/issues/59972#issuecomment-483058172)
- Preserve debuginfo scopes across generator yield points
bors [Fri, 3 May 2019 23:11:17 +0000 (23:11 +0000)]
Auto merge of #60462 - eddyb:def-1-a-mere-resolution, r=petrochenkov
rustc: factor out most of hir::def::Def's variants into DefKind, and rename to Res.
The first two commits are about introducing `DefKind`, both to simplify/orthogonalize `hir::def::Def`, and to allow reasoning about the kind of a definition without dealing with the redundant `DefId`.
(There are likely more changes to be made, such as adding enough `DefKind` variants for `tcx.def_kind(def_id)` to return just `DefKind`, not `Option<DefKind>`, but this is pretty big as-is)
The third commit frees up the `Def` name (which we may want to use in the future for "definitions", in the sense of "entities with a `DefId`") by renaming `hir::def::Def` to `Res` ("resolution").
IMO this fits, as it represents all the possible name resolution results, not just "definitions (with a `DefId`)".
Quick examples:
```rust
// Before:
if tcx.describe_def(def_id) == Some(Def::Struct(def_id)) {...}
if let Def::Struct(def_id) = path.def {...}
```
```rust
// After:
if tcx.def_kind(def_id) == Some(DefKind::Struct) {...}
if let Res::Def(DefKind::Struct, def_id) = path.res {...}
```
David Wood [Fri, 3 May 2019 21:36:35 +0000 (22:36 +0100)]
Fix async fn lowering ICE with APIT.
This commit fixes an ICE where simple bindings (which aren't replaced
with replacement arguments during async fn lowering) were not being
visited in the def collector and thus caused an ICE during HIR lowering
for types that use their `DefId` at that point - such as `impl Trait`.
Aleksey Kladov [Fri, 3 May 2019 18:35:21 +0000 (21:35 +0300)]
Add rustfmt toml
This commit adds an rustfmt.toml for using for **new** code.
Old code should continut to use old style, until we put automated
style checks in place.
See
https://internals.rust-lang.org/t/running-rustfmt-on-rust-lang-rust-and-other-rust-lang-repositories/8732/81
for the reason why we deviate from the default formatting. The TL;DR
is that currently compiler uses a pretty condensed style of code, and
default settings both create a huge diff and inflate the number of
lines. use_small_heuristics=Max fixes that.
version=Two is required for bug-fixes, which technically can't be made
to the stable first version
bors [Fri, 3 May 2019 15:10:16 +0000 (15:10 +0000)]
Auto merge of #60510 - Centril:rollup-gsndjbp, r=Centril
Rollup of 12 pull requests
Successful merges:
- #59928 (Make deprecation lint `ambiguous_associated_items` deny-by-default)
- #60220 (report fatal errors during doctest parsing)
- #60373 (Tidy: ensure lang features are sorted by since)
- #60388 (Disallow non-explicit elided lifetimes in async fn)
- #60393 ( Do not suggest incorrect syntax on pattern type error due to borrow)
- #60401 (Rename `RUST_LOG` to `RUSTC_LOG`)
- #60409 (Require a trait in the bounds of existential types)
- #60455 (Resolve match arm ty when arms diverge)
- #60457 (Const prop refactoring)
- #60467 (Avoid repeated interning of static strings.)
- #60478 (minor compiler doc tweaks)
- #60501 (Propagate mutability from arguments to local bindings in async fn)
Rollup merge of #60467 - nnethercote:less-symbol-interning, r=davidtwco
Avoid repeated interning of static strings.
`file_metadata_raw` interns the strings `"<unknown>"` and `""` very
frequently. This commit avoids that, which reduces the number of symbols
interned significantly and reduces instruction counts by up to 0.5% on
some workloads.
bors [Fri, 3 May 2019 10:15:48 +0000 (10:15 +0000)]
Auto merge of #60423 - varkor:update-getopts, r=alexcrichton
Update getopts
This is a prerequisite to fixing https://github.com/rust-lang/rust/issues/32352. The rustbuild fix has been pulled out of https://github.com/rust-lang/rust/pull/59440.
bors [Fri, 3 May 2019 07:26:46 +0000 (07:26 +0000)]
Auto merge of #59883 - ebarnard:clonefile, r=sfackler
Make `std::fs::copy` attempt to create copy-on-write clones of files on MacOS
The behaviour of MacOS now matches Linux which uses `copy_file_range` to perform CoW file copies where available and supported by the underlying filesystem.
`file_metadata_raw` interns the strings `"<unknown>"` and `""` very
frequently. This commit avoids that, which reduces the number of symbols
interned significantly and reduces instruction counts by up to 0.5% on
some workloads.
bors [Thu, 2 May 2019 07:38:36 +0000 (07:38 +0000)]
Auto merge of #60156 - RalfJung:macos-rand, r=oli-obk,alexcrichton
use SecRandomCopyBytes on macOS in Miri
This is a hack to fix https://github.com/rust-lang/miri/issues/686: on macOS, rustc will open `/dev/urandom` to initialize a `HashMap`. That's quite hard to emulate properly in Miri without a full-blown implementation of file descriptors. However, Miri needs an implementation of `SecRandomCopyBytes` anyway to support [getrandom](https://crates.io/crates/getrandom), so using it here should work just as well.
This will only have an effect when libstd is compiled specifically for Miri, but that will generally be the case when people use `cargo miri`.
This is clearly a hack, so I am opening this to start a discussion about whether we are okay with such a hack or not.
bors [Thu, 2 May 2019 04:47:36 +0000 (04:47 +0000)]
Auto merge of #59008 - varkor:const-generics-infer, r=eddyb
Add const generics to infer (and transitive dependencies)
Split out from #53645. This work is a collaborative effort with @yodaldevoid.
There are a number of stubs. These are mainly to ensure we don't overlook them when completing the implementation, but are not necessary for the initial implementation. We plan to address these in follow up PRs.
bors [Thu, 2 May 2019 02:01:31 +0000 (02:01 +0000)]
Auto merge of #60460 - Centril:rollup-gz5bc8i, r=Centril
Rollup of 7 pull requests
Successful merges:
- #59634 (Added an explanation for the E0704 error.)
- #60348 (move some functions from parser.rs to diagostics.rs)
- #60385 (Emit metadata files earlier)
- #60428 (Refactor `eval_body_using_ecx` so that it doesn't need to query for MIR)
- #60437 (Ensure that drop order of `async fn` matches `fn` and that users cannot refer to generated arguments.)
- #60439 (doc: Warn about possible zombie apocalypse)
- #60452 (Remove Context and ContextKind)
Rollup merge of #60439 - vorner:zombie-apocalypse-warn, r=TimNN
doc: Warn about possible zombie apocalypse
Extend the std::process::Child docs with warning about possible zombies.
The previous version mentioned that when dropping the Child, the
process is not killed. However, the wording gave the impression that
such behaviour is fine to do (leaving the reader believe low-level
details like reaping zombies of the dead processes is taken over by std
somehow; or simply leaving the reader unaware about the problem).
Rollup merge of #60348 - agnxy:refactor-parser, r=petrochenkov
move some functions from parser.rs to diagostics.rs
Starting with a few functions mentioned in https://github.com/rust-lang/rust/issues/60015#issuecomment-484259773. We might refactor parser.rs further in subsequent changes.
r? @petrochenkov
Rollup merge of #59634 - DevQps:explain-E0704, r=estebank
Added an explanation for the E0704 error.
# Description
Adds an explanation on the E0704 error. I tried to stick as closely to the message that the compiler generates. It's the first time I am fixing error messages here, so if there is something I did wrong or should improve, please let me know.