Commit Graph

101312 Commits

Author SHA1 Message Date
Mazdak Farrokhzad dae8ded9f5
Rollup merge of #65839 - ecstatic-morse:promo-sanity-fixes, r=eddyb
Clean up `check_consts` now that new promotion pass is implemented

`check_consts::resolver` contained a layer of abstraction (`QualifResolver`) to allow the existing, eager style of qualif propagation to work with either a dataflow results cursor or by applying the transfer function directly (if dataflow was not needed e.g. for promotion). However, #63812 uses a different, lazy paradigm for checking promotability, which makes this unnecessary. This PR cleans up `check_consts::validation` to use `FlowSensitiveResolver` directly, instead of through the now obselete `QualifResolver` API.

Also, this contains a few commits (the first four) that address some FIXMEs in #63812 regarding code duplication. They could be split out, but I think they will be relatively noncontroversial? Notably, `validation::Mode` is renamed to `ConstKind` and used in `promote_consts` to denote what kind of item we are in.

This is best reviewed commit-by-commit and is low priority.

r? @eddyb
2019-10-27 16:46:56 +01:00
Mazdak Farrokhzad 0982060a69
Rollup merge of #65834 - Mark-Simulacrum:driver-clean, r=nikomatsakis
Remove lint callback from driver

This is leftover from a restructuring of lint registration for drivers; it should now happen via the register_lints field on Config rather than this function.

This is not used by anyone to my knowledge (including the compiler itself); it was introduced in an abandoned refactor in #65193.
2019-10-27 16:46:55 +01:00
Mazdak Farrokhzad 5406f7ad49
Rollup merge of #65777 - matthewjasper:allow-impl-trait-expansion, r=davidtwco
Don't ICE for completely unexpandable `impl Trait` types

Save the resolution of these types (to themselves) to the typeck tables so that they will eventually reach E0720.

closes #65561
2019-10-27 16:46:54 +01:00
Mazdak Farrokhzad 53568f3fb3
Rollup merge of #65738 - ohadravid:re-rebalance-coherence-allow-fundamental-local, r=nikomatsakis
Coherence should allow fundamental types to impl traits when they are local

After #64414, `impl<T> Remote for Box<T> { }` is disallowed, but it is also disallowed in liballoc, where `Box` is a local type!

Enabling `#![feature(re_rebalance_coherence)]` in `liballoc` results in:
```
error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct<F>`)
    --> src\liballoc\boxed.rs:1098:1
     |
1098 | impl<F: ?Sized + Future + Unpin> Future for Box<F> {
     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `F` must be used as the type parameter for some local type
```

This PR relaxes `uncover_fundamental_ty` to skip local fundamental types.
I didn't add a test since `liballoc` already fails to compile, but I can add one if needed.

r? @nikomatsakis

cc #63599
2019-10-27 16:46:52 +01:00
Mazdak Farrokhzad a466f014b5
Rollup merge of #65566 - estebank:let-expr-as-ty, r=Centril
Use heuristics to suggest assignment

When detecting a possible `=` -> `:` typo in a `let` binding, suggest
assigning instead of setting the type.

Partially address #57828.
2019-10-27 16:46:51 +01:00
bors b7176b44a2 Auto merge of #65519 - pnkfelix:issue-63438-trait-based-structural-match, r=matthewjasper
trait-based structural match implementation

Moves from using a `#[structural_match]` attribute to using a marker trait (or pair of such traits, really) instead.

Fix #63438.

(This however does not remove the hacks that I believe were put into place to support the previous approach of injecting the attribute based on the presence of both derives... I have left that for follow-on work.)
2019-10-27 09:35:12 +00:00
bors cf148a717a Auto merge of #65288 - estebank:point-at-assoc-type, r=nikomatsakis
Point at associated type for some obligations

Partially address #57663.
2019-10-27 03:34:54 +00:00
bors fcf516d827 Auto merge of #65852 - flip1995:clippyup, r=Manishearth
Update Clippy

Fixes https://github.com/rust-lang/rust/pull/65845#issuecomment-546633123

r? @Manishearth
2019-10-26 23:37:08 +00:00
Esteban Küber b579c5a2d6 Fix rebase 2019-10-26 15:34:28 -07:00
Esteban Küber 7ea28e761f review comment: use `Default` 2019-10-26 15:26:08 -07:00
Esteban Küber 93bb780e38 review comments and tweaks 2019-10-26 15:26:08 -07:00
Esteban Küber 55e4e2d52e Remove unnecessary error in test 2019-10-26 15:26:08 -07:00
Esteban Küber 6206a5a1b4 Use heuristics to suggest assignment
When detecting a possible `=` -> `:` typo in a `let` binding, suggest
assigning instead of setting the type.
2019-10-26 15:26:08 -07:00
flip1995 e85980ddfa
Update Clippy 2019-10-26 23:02:23 +02:00
bors fae75cd216 Auto merge of #65167 - hermitcore:rusty-hermit, r=alexcrichton
Redesign the interface to the unikernel HermitCore

We are developing the unikernel HermitCore, where the kernel is written in Rust and is already part of the Rust Standard Library. The interface between the standard library and the kernel based on a small C library. With this pull request, we remove completely the dependency to C and use lld as linker. Currently, the kernel will be linked to the application as static library, which is published at https://github.com/hermitcore/libhermit-rs.

We don’t longer support the C interface to the kernel. Consequently, we remove this part from the Rust Standard Library.
2019-10-26 19:35:59 +00:00
bors 46e6c533d0 Auto merge of #65845 - Centril:rollup-28jtjfc, r=Centril
Rollup of 8 pull requests

Successful merges:

 - #65743 (rustc_typeck: don't record direct callees in generator_interior.)
 - #65761 (libsyntax: Enhance documentation of the AST module)
 - #65772 (Remove the last remaining READMEs)
 - #65773 (Increase spacing for suggestions in diagnostics)
 - #65791 (Adding doc on keyword continue)
 - #65824 (rustc: make DefPathData (and friends) Copy (now that it uses Symbol).)
 - #65828 (Derive Eq and Hash for SourceInfo again)
 - #65842 (Add more information on rustdoc search)

Failed merges:

 - #65825 (rustc: use IndexVec<DefIndex, T> instead of Vec<T>.)

r? @ghost
2019-10-26 16:14:16 +00:00
Mazdak Farrokhzad d319ba2ccc
Rollup merge of #65842 - GuillaumeGomez:more-search-information, r=Dylan-DPC
Add more information on rustdoc search

Fixes #65735.

r? @kinnison
2019-10-26 14:17:51 +02:00
Mazdak Farrokhzad d0d284eb39
Rollup merge of #65828 - bjorn3:add_source_info_eq_hash, r=petrochenkov
Derive Eq and Hash for SourceInfo again

In 75c24b9c96/src/common.rs (L368) I store it in a `indexmap::IndexSet`, which requires `Eq` and `Hash`. Unfortunately they were removed in https://github.com/rust-lang/rust/pull/65647, so I can't update to latest nightly.
2019-10-26 14:17:50 +02:00
Mazdak Farrokhzad 84b62a08b9
Rollup merge of #65824 - eddyb:def-key-copy, r=varkor
rustc: make DefPathData (and friends) Copy (now that it uses Symbol).

Spotted this while working on something else.
2019-10-26 14:17:48 +02:00
Mazdak Farrokhzad 7325a886e2
Rollup merge of #65791 - dorfsmay:doc_keyword_continue, r=Mark-Simulacrum
Adding doc on keyword continue

Partial solution of issue #34601.
2019-10-26 14:17:46 +02:00
Mazdak Farrokhzad 0aa7c6f96b
Rollup merge of #65773 - estebank:sugg-whitespace, r=Centril
Increase spacing for suggestions in diagnostics

Make the spacing between the code snippet and verbose structured
suggestions consistent with note and help messages.

r? @Centril
2019-10-26 14:17:45 +02:00
Mazdak Farrokhzad 78a4f8c8ce
Rollup merge of #65772 - mark-i-m:final-readmes, r=nikomatsakis
Remove the last remaining READMEs

cc https://github.com/rust-lang/rustc-guide/pull/481

closes #48478

r? @nikomatsakis
2019-10-26 14:17:43 +02:00
Mazdak Farrokhzad d51a84259e
Rollup merge of #65761 - popzxc:document-ast, r=petrochenkov
libsyntax: Enhance documentation of the AST module

This PR enhances documentation state to the `libsyntax/ast.rs` (as initiative caused by [rustc-guide#474](https://github.com/rust-lang/rustc-guide/issues/474)), by adding:
- Module documentation.
- Doc-comments (and a bit of usual comments) in non-obvious (as for me) places.
- Minor style fixes to improve module readability.
2019-10-26 14:17:42 +02:00
Mazdak Farrokhzad 4f43352964
Rollup merge of #65743 - eddyb:generator-on-call, r=matthewjasper
rustc_typeck: don't record direct callees in generator_interior.

For expressions like `f(g().await)` we were recording `f` as needing to be kept in a temporary (and therefore be tracked by the generator type) across the suspend, even if a function/method path.
However, this is never needed, and can cause issues with complex function types (see #65244).

cc @Zoxc @nikomatsakis
2019-10-26 14:17:40 +02:00
Ohad Ravid 8f988bd92c Coherence should allow fundamental types to impl traits 2019-10-26 13:08:50 +02:00
Guillaume Gomez 1f25fd74a0 Add more information on search 2019-10-26 12:59:54 +02:00
bors 8318ef26c1 Auto merge of #65758 - RalfJung:miri, r=oli-obk
update Miri

Fixes https://github.com/rust-lang/rust/issues/65684
2019-10-26 09:19:48 +00:00
Ralf Jung 58da335e83 update miri 2019-10-26 10:15:06 +02:00
Ralf Jung 327ae38a0b use plain cargo to install xargo 2019-10-26 10:15:06 +02:00
Ralf Jung f809f9e08f bootstrap now takes care of installing xargo 2019-10-26 10:15:06 +02:00
Ralf Jung 1166db7603 update Miri 2019-10-26 10:15:06 +02:00
Dylan MacKenzie b93cdbce36 Remove `QualifResolver` abstraction
This is a relic from earlier attempts at dataflow-based const validation
that attempted to do promotion at the same time. #63812 takes a
different approach: `IsNotPromotable` is no longer a `Qualif` and is
computed lazily instead of eagerly. As a result, there's no need for an
eager `TempPromotionResolver`, and we can use the only implementer of
`QualifResolver` directly instead of through a trait.
2019-10-25 23:23:24 -07:00
Dylan MacKenzie 653865658d Use `is_lang_panic_fn` from `check_consts` in `promote_consts` 2019-10-25 20:57:07 -07:00
Dylan MacKenzie 748bbf259a Deduplicate `promote_consts::Validator` and `check_consts::Item` 2019-10-25 20:57:04 -07:00
Dylan MacKenzie 8a462ff24a Make `Item` fields pub 2019-10-25 20:57:01 -07:00
Dylan MacKenzie b2d021aa2b Make `check_consts::Item` work on non-const fns
This was originally only needed for validation, which is never run on
non-const `fn`s. The new promotion pass wants to use it, however.
2019-10-25 20:56:56 -07:00
Igor Aleksanov ae5203a142 libsyntax: Document ast module
Apply review suggestions

Remove links in the module docs

Flatten imports

Apply review suggestions

Remove useless comments

Fix nits
2019-10-26 06:56:11 +03:00
bors 084edc426f Auto merge of #63812 - eddyb:promo-sanity, r=oli-obk
rustc_mir: double-check const-promotion candidates for sanity.

Previously, const promotion involved tracking information about the value in a MIR local (or any part of the computation leading up to that value), aka "qualifs", in a quite stateful manner, which is hard to extend to arbitrary CFGs without a dataflow pass.

However, the nature of the promotion we do is that it's effectively an SSA-like "tree" (or DAG, really), of assigned-once locals - which is how we can take them from the original MIR in the first place.
This structure means that the subset of the MIR responsible for computing any given part of a const-promoted value is readily analyzable by walking that tree/DAG.

This PR implements such an analysis in `promote_consts`, reusing the `HasMutInterior` / `NeedsDrop` computation from `qualify_consts`, but reimplementing the equivalent of `IsNotPromotable` / `IsNotImplicitlyPromotable`.

Eventually we should be able to remove `IsNotPromotable` / `IsNotImplicitlyPromotable` from `qualify_consts`, which will simplify @ecstatic-morse's dataflow-based const-checking efforts.

But currently this is mainly for a crater check-only run - it will compare the results from the old promotion collection and the new promotion validation and ICE if they don't match.

r? @oli-obk
2019-10-26 00:11:36 +00:00
Mark Rousskov 402a8af1d5 Remove lint callback from driver
This is leftover from a restructuring of lint registration for drivers;
it should now happen via the register_lints field on Config rather than
this function.
2019-10-25 19:27:57 -04:00
Eduard-Mihai Burtescu f2c8628920 rustc_mir: use the new validator's Qualif in promotion. 2019-10-26 01:45:54 +03:00
Eduard-Mihai Burtescu 6c55fb8227 rustc_mir: double-check const-promotion candidates for sanity. 2019-10-26 01:45:53 +03:00
bors 246be7e1a5 Auto merge of #65826 - JohnTitor:rollup-mr6crka, r=JohnTitor
Rollup of 6 pull requests

Successful merges:

 - #65705 (Add {String,Vec}::into_raw_parts)
 - #65749 (Insurance policy in case `iter.size_hint()` lies.)
 - #65799 (Fill tracking issue number for `array_value_iter`)
 - #65800 (self-profiling: Update measureme to 0.4.0 and remove non-RAII methods from profiler.)
 - #65806 (Add [T]::as_ptr_range() and [T]::as_mut_ptr_range().)
 - #65810 (SGX: Clear additional flag on enclave entry)

Failed merges:

r? @ghost
2019-10-25 20:41:28 +00:00
bjorn3 f04867cafb Derive Eq and Hash for SourceInfo again 2019-10-25 21:39:02 +02:00
matthewjasper 0c05ed29fd
Apply suggestions from code review
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-10-25 18:50:40 +01:00
Yuki Okushi d40c6afba0
Rollup merge of #65810 - raoulstrackx:ac_mitigation, r=nagisa
SGX: Clear additional flag on enclave entry

An attacker could set both the AC flag in CR0 as in rflags. This causes the enclave to perform an AEX upon a misaligned memory access, and an attacker learns some information about the internal enclave state.
The AC flag in rflags is copied from userspace upon an enclave entry. Upon AEX it is copied and later restored. This patch forces the rflag.AC bit to be reset right after an enter.
2019-10-26 02:46:02 +09:00
Yuki Okushi f0c58e9d85
Rollup merge of #65806 - fusion-engineering-forks:slice-ptr-range, r=Centril
Add [T]::as_ptr_range() and [T]::as_mut_ptr_range().

Implementation of https://github.com/rust-lang/rfcs/pull/2791
2019-10-26 02:46:01 +09:00
Yuki Okushi 574b0780ab
Rollup merge of #65800 - michaelwoerister:measureme-0.4.0, r=wesleywiser
self-profiling: Update measureme to 0.4.0 and remove non-RAII methods from profiler.

This PR removes all non-RAII based profiling methods from `SelfProfilerRef` 🎉
It also delegates the `TimingGuard` implementation to `measureme`, now that that is available there.

r? @wesleywiser
2019-10-26 02:45:59 +09:00
Yuki Okushi 9192f3625d
Rollup merge of #65799 - LukasKalbertodt:fill-array-value-iter-tracking-issue, r=Centril
Fill tracking issue number for `array_value_iter`

Thanks for [noticing](https://github.com/rust-lang/rust/pull/62959#discussion_r338930448)!

r? @Centril
2019-10-26 02:45:58 +09:00
Yuki Okushi 7068c2d4e9
Rollup merge of #65749 - Centril:insurance-policy, r=RalfJung
Insurance policy in case `iter.size_hint()` lies.

Follow up to https://github.com/rust-lang/rust/pull/64949/files#r334235076.
(If the perf impact is bad we can use `debug_assert!` instead.)

The good news is that the UI tests pass locally so `iter.size_hint()` seems to be honest *thus far*.
On the other hand, with the status quo we do not have an insurance policy should that change in some case. This is problematic because a) this could possibly make some program be accepted which shouldn't, b) the compiler itself could have memory unsafety if the correctness of the iterator is assumed in `unsafe { ... }` code (even though the blame lies with the `unsafe { ... }` block in question.)

r? @RalfJung
cc @nnethercote
2019-10-26 02:45:57 +09:00
Yuki Okushi a808ba374f
Rollup merge of #65705 - shepmaster:vec-into-raw, r=SimonSapin
Add {String,Vec}::into_raw_parts

Aspects to address:

- [x] Create a tracking issue
  - #65816
2019-10-26 02:45:56 +09:00