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

do not ICE on bound variables, return TooGeneric instead #76581

Merged
merged 3 commits into from
Sep 22, 2020

Conversation

lcnr
Copy link
Contributor

@lcnr lcnr commented Sep 10, 2020

fixes #73260, fixes #74634, fixes #76595

r? @nikomatsakis

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Sep 10, 2020
@lcnr lcnr added A-const-generics Area: const generics (parameters and arguments) F-const_generics `#![feature(const_generics)]` labels Sep 10, 2020
@lcnr
Copy link
Contributor Author

lcnr commented Sep 11, 2020

I am actually not even sure if this PR is correct, as ty::Bound is a lot closer to ty::Infer than to ty::Param.

So the bug is probably somewhere else 🤔

@lcnr
Copy link
Contributor Author

lcnr commented Sep 11, 2020

So if we call a function which has a generic constant either in its predicates or its signatures, we have an unevaluated constant which depends on inference variables...

We replace these inference variables with ty::ConstKind::Bound before calling the relevant const eval queries. If we now encounter these bound variables we panic because we can't handle them 🤔

I think dealing with this by emitting TooGeneric seems fine, but I don't yet know enough about this to be absolutely sure

@lcnr lcnr force-pushed the bound-too-generic branch from 548d468 to ae85bbb Compare September 11, 2020 17:36
@lcnr lcnr changed the title miri: correctly deal with ConstKind::Bound do not ice on bound variables, return TooGeneric instead Sep 12, 2020
@lcnr lcnr changed the title do not ice on bound variables, return TooGeneric instead do not ICE on bound variables, return TooGeneric instead Sep 12, 2020
Comment on lines -1266 to 1267
ty::Param(_) | ty::Error(_) => {
ty::Bound(..) | ty::Param(_) | ty::Error(_) => {
return Err(LayoutError::Unknown(ty));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is something I suggested in the past so it's probably fine.

@eddyb
Copy link
Member

eddyb commented Sep 19, 2020

@bors r+ cc @nikomatsakis

@bors
Copy link
Contributor

bors commented Sep 19, 2020

📌 Commit ae85bbb has been approved by eddyb

@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 19, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Sep 19, 2020
do not ICE on bound variables, return `TooGeneric` instead

fixes rust-lang#73260, fixes rust-lang#74634, fixes rust-lang#76595

r? @nikomatsakis
@Dylan-DPC-zz
Copy link

failed in rollup

@bors r-

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Sep 19, 2020
@lcnr lcnr force-pushed the bound-too-generic branch from ae85bbb to 6734230 Compare September 20, 2020 06:36
@lcnr lcnr force-pushed the bound-too-generic branch from 62378b7 to 65b3419 Compare September 20, 2020 08:03
@lcnr
Copy link
Contributor Author

lcnr commented Sep 20, 2020

@bors r=eddyb

@bors
Copy link
Contributor

bors commented Sep 20, 2020

📌 Commit 65b3419 has been approved by eddyb

@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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Sep 20, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Sep 21, 2020
do not ICE on bound variables, return `TooGeneric` instead

fixes rust-lang#73260, fixes rust-lang#74634, fixes rust-lang#76595

r? @nikomatsakis
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Sep 21, 2020
do not ICE on bound variables, return `TooGeneric` instead

fixes rust-lang#73260, fixes rust-lang#74634, fixes rust-lang#76595

r? @nikomatsakis
@lcnr lcnr assigned eddyb and unassigned nikomatsakis Sep 21, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Sep 22, 2020
do not ICE on bound variables, return `TooGeneric` instead

fixes rust-lang#73260, fixes rust-lang#74634, fixes rust-lang#76595

r? @nikomatsakis
ecstatic-morse added a commit to ecstatic-morse/rust that referenced this pull request Sep 22, 2020
do not ICE on bound variables, return `TooGeneric` instead

fixes rust-lang#73260, fixes rust-lang#74634, fixes rust-lang#76595

r? @nikomatsakis
bors added a commit to rust-lang-ci/rust that referenced this pull request Sep 22, 2020
…atic-morse

Rollup of 13 pull requests

Successful merges:

 - rust-lang#72734 (Reduce duplicate in liballoc reserve error handling)
 - rust-lang#76131 (Don't use `zip` to compare iterators during pretty-print hack)
 - rust-lang#76150 (Don't recommend ManuallyDrop to customize drop order)
 - rust-lang#76275 (Implementation of Write for some immutable ref structs)
 - rust-lang#76489 (Add explanation for E0756)
 - rust-lang#76581 (do not ICE on bound variables, return `TooGeneric` instead)
 - rust-lang#76655 (Make some methods of `Pin` unstable const)
 - rust-lang#76783 (Only get ImplKind::Impl once)
 - rust-lang#76807 (Use const-checking to forbid use of unstable features in const-stable functions)
 - rust-lang#76888 (use if let instead of single match arm expressions)
 - rust-lang#76914 (extend `Ty` and `TyCtxt` lints to self types)
 - rust-lang#77022 (Reduce boilerplate for BytePos and CharPos)
 - rust-lang#77032 (lint missing docs for extern items)

Failed merges:

r? `@ghost`
@bors bors merged commit 30f1bab into rust-lang:master Sep 22, 2020
@rustbot rustbot added this to the 1.48.0 milestone Sep 22, 2020
@lcnr lcnr deleted the bound-too-generic branch September 22, 2020 06:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-const-generics Area: const generics (parameters and arguments) F-const_generics `#![feature(const_generics)]` S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
7 participants