Change:
The following ICE's on nightly and beta: <details<summaryBacktrace:</summary</details
Reduced: ICE most likely occurs in: I cannot seem to reproduce this without an , so cc
Reduced even more: (Please include all 3 variants thus far in a regression test.)
I looked into this briefly and found that on this line: has the value: Digging a bit deeper, the generics appear to be empty because of the following lines: I can confirm that adding makes this code compile, so I suspect that this is blocked on .
What would be the consequences of always returning the DefId?
It causes query cycle errors at the moment.
Discussed at T-compiler meeting. Due to all the known examples being compile-time errors, the ICE here does not seem so strong a hazard as to warrant weekly visits during triage. (Certainly failing more gracefully would be great. But its not something we're going to e.g. block a release on.) Downgrading priority to P-medium.
Some relevant examples. This gives an (incorrect) error on stable that does not hold: This ICEs on stable:
Is there a reason why we can't just disallow type parameters from appearing within constants during resolve, like we do for type parameters from outer functions? Obviously const generics/lazy normization willl loosen this rule.
good point, I imagine that might work.
Another variant on this bug:
Triage: The two examples that Centril posted ( and ) are no longer ICEs in the latest nightly. Possibly related to ?
Maybe we should just add tests then?
Sounds good! I'll do later.
Another variant (though likely the same): This gives a different to the original, despite being essentially the same code.
Triage: All the snippets including the original are no longer ICE with the latest nightly:

Discussion:
<ins> error: overly complex generic constant --> $DIR/issue-67945-3.rs:10:13 | LL |       A: [(); { |  _____________^ LL | |         let x: Option<S> = None; LL | | LL | |         0 LL | |     }], | |_____^ blocks are not supported in generic constant | = help: consider moving this anonymous constant into a `const` function = note: this operation may be supported in the future error: aborting due to previous error </ins>

<ins> error: generic parameters may not be used in const operations --> $DIR/issue-67945-3.rs:11:23 | LL |         let x: Option<S> = None; |                       ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions = help: use `#![feature(generic_const_exprs)]` to allow generic const expressions error[E0392]: parameter `S` is never used --> $DIR/issue-67945-3.rs:9:12 | LL | struct Bug<S> { |            ^ unused parameter | = help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData` = help: if you intended `S` to be a const parameter, use `const S: usize` instead error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0392`. </ins>

<ins> // Regression test for // https://github.com/rust-lang/rust/issues/67945#issuecomment-572617285 // Make sure we don't emit an E0277 error. // revisions: full min #![cfg_attr(full, feature(generic_const_exprs))] #![cfg_attr(full, allow(incomplete_features))] struct Bug<S> { //[min]~ ERROR: parameter `S` is never used A: [(); { //[full]~ ERROR: overly complex generic constant let x: Option<S> = None; //[min]~^ ERROR: generic parameters may not be used in const operations 0 }], } fn main() {} </ins>

<ins> error: overly complex generic constant --> $DIR/issue-67945-4.rs:9:13 | LL |       A: [(); { |  _____________^ LL | |         let x: Option<Box<S>> = None; LL | | LL | |         0 LL | |     }], | |_____^ blocks are not supported in generic constant | = help: consider moving this anonymous constant into a `const` function = note: this operation may be supported in the future error: aborting due to previous error </ins>

<ins> error: generic parameters may not be used in const operations --> $DIR/issue-67945-4.rs:10:27 | LL |         let x: Option<Box<S>> = None; |                           ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions = help: use `#![feature(generic_const_exprs)]` to allow generic const expressions error[E0392]: parameter `S` is never used --> $DIR/issue-67945-4.rs:8:12 | LL | struct Bug<S> { |            ^ unused parameter | = help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData` = help: if you intended `S` to be a const parameter, use `const S: usize` instead error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0392`. </ins>

<ins> // Regression test for // https://github.com/rust-lang/rust/issues/67945#issuecomment-572617285 // revisions: full min #![cfg_attr(full, feature(generic_const_exprs))] #![cfg_attr(full, allow(incomplete_features))] struct Bug<S> { //[min]~ ERROR: parameter `S` is never used A: [(); { //[full]~ ERROR: overly complex generic constant let x: Option<Box<S>> = None; //[min]~^ ERROR: generic parameters may not be used in const operations 0 }], } fn main() {} </ins>