Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Recover on const X = 42; and infer type + Error Stash API #64698

Merged
merged 4 commits into from
Sep 25, 2019

Conversation

Centril
Copy link
Contributor

@Centril Centril commented Sep 23, 2019

Here we:

  1. Introduce a notion of the "error stash".

    This is a map in the Handler to which you can err.stash(...) away your diagnostics and then steal them in a later "phase" of the compiler (e.g. stash in parser, steal in typeck) to enrich them with more information that isn't available in the previous "phase".

    I believe I've covered all the bases to make sure these diagnostics are actually emitted eventually even under #[cfg(FALSE)] but please check my logic.

  2. Recover when parsing [const | static mut?] $ident = $expr; which has a missing type.

    Use the "error stash" to stash away the error and later steal the error in typeck where we emit the error as MachineApplicable with the actual inferred type. This builds on rustc_typeck: improve diagnostics for _ const/static declarations #62804.

cc rust-lang/rfcs#2545

r? @estebank

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Sep 23, 2019
src/librustc_errors/lib.rs Show resolved Hide resolved
src/librustc_errors/lib.rs Outdated Show resolved Hide resolved
src/librustc_errors/lib.rs Show resolved Hide resolved
src/librustc_errors/lib.rs Show resolved Hide resolved
@estebank
Copy link
Contributor

r=me, but will need a rebase shortly.

@bors

This comment has been minimized.

src/librustc_errors/lib.rs Outdated Show resolved Hide resolved
Then use the diagnostics-stealing API to stash parser
errors and enrich them with type information in typeck.
@Centril Centril force-pushed the infer-const-with-stash branch from adb880a to 62d8584 Compare September 23, 2019 15:56
@Centril
Copy link
Contributor Author

Centril commented Sep 23, 2019

@estebank Adjusted the ICE mechanism and threw in some refactoring in the last commit, can you review again?

@estebank
Copy link
Contributor

@bors r+

@bors
Copy link
Contributor

bors commented Sep 24, 2019

📌 Commit f70665a has been approved by estebank

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 24, 2019
Centril added a commit to Centril/rust that referenced this pull request Sep 24, 2019
…stebank

Recover on `const X = 42;` and infer type + Error Stash API

Here we:

1. Introduce a notion of the "error stash".

   This is a map in the `Handler` to which you can `err.stash(...)` away your diagnostics and then steal them in a later "phase" of the compiler (e.g. stash in parser, steal in typeck) to enrich them with more information that isn't available in the previous "phase".

    I believe I've covered all the bases to make sure these diagnostics are actually emitted eventually even under `#[cfg(FALSE)]` but please check my logic.

2. Recover when parsing `[const | static mut?] $ident = $expr;` which has a missing type.

    Use the "error stash" to stash away the error and later steal the error in typeck where we emit the error as `MachineApplicable` with the actual inferred type. This builds on rust-lang#62804.

cc rust-lang/rfcs#2545

r? @estebank
bors added a commit that referenced this pull request Sep 24, 2019
Rollup of 16 pull requests

Successful merges:

 - #63356 (Issue#63183: Add fs::read_dir() and ReadDir warning about iterator order + example)
 - #63934 (Fix coherence checking for impl trait in type aliases)
 - #64016 (Streamline `Compiler`)
 - #64296 (Document the unstable iter_order_by library feature)
 - #64443 (rustdoc: general cleanup)
 - #64622 (Add a cycle detector for generic `Graph`s and `mir::Body`s)
 - #64689 (Refactor macro by example)
 - #64698 (Recover on `const X = 42;` and infer type + Error Stash API)
 - #64702 (Remove unused dependencies)
 - #64717 (update mem::discriminant test to use assert_eq and assert_ne over comparison operators)
 - #64720 ( remove rtp.rs, and move rtpSpawn and RTP_ID_ERROR to libc)
 - #64721 (Fixed issue from #64447)
 - #64725 (fix one typo)
 - #64737 (fix several issues in String docs)
 - #64742 (relnotes: make compatibility section more sterile and fix rustc version)
 - #64748 (Fix #64744. Account for the Zero sub-pattern case.)

Failed merges:

r? @ghost
@bors bors merged commit f70665a into rust-lang:master Sep 25, 2019
@Centril Centril deleted the infer-const-with-stash branch September 25, 2019 01:50
@eddyb
Copy link
Member

eddyb commented Sep 30, 2019

This is a neat trick, cc @rust-lang/compiler for awareness of the new API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants