Change:
Reduced test case () from : Another repro case: Original bug report follows If I run on , I get an ICE: I'm using 2018 edition syntax, so I can only test on beta and nightly. <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOT_END --
Commenting out the function in makes the ICE go away. The ICE occurs on a as well as a .
Replacing both instances of Self::FRAGMENTLEN in the function with the literal integer 13 makes the ICE go away.
Still reproduces on 1.35.0 and nightly (). <details<summaryClick for backtrace</summaryBacktrace: </details
triage: P-high, removing nomination, assigning to self for initial investigation.
Note: While I replicate the ICE as described on beta, I see a different ICE on nightly on this branch, namely: For reference (in case it matters e.g. for a hypothetical backport) was injected between +nightly-2019-05-25 and +nightly-2019-05-26. Further bisection thanks to rustup-toolchain-install-master "pinpointed" the change to this rollup PR: Auto merge of - Centril:rollup-wmm7qga, r=Centril I'm pretty sure the change in behavior is due to PR . <details<summaryClick for stack trace</summary</details
Okay here is reduced test case ():
another workaround, by the way, is to move the out of the (and then change the use to say instead of )
And yet another workaround is to say instead of in the return type.
I am taking a break for a few months and I wont be able to look at this; unassigning self.
from duplicate :
Another occurrence in
I've been trying to trace this down, and I think it's due to (or at least it's the same code that needs fixed there, in rustctypeck::collect::genericsof). I believe the UniversalRegionIndices aren't being properly populated for the constant, because in the HIR the constant doesn't have a parent. ConstraintConversion needs the UniversalRegionIndices to convert the ReEarlyBound into a RegionVid, but it's missing due to the previous problem. Simply replacing with makes the last Memory examples compile, but the original example fails later in freescope. I'm super new to the rust compiler, but hopefully someone else can use this information to fix the problem :) I also believe that the const generics issue is separate, but it's possible that I'm simply trying to solve this in the wrong manner, and a correct solution would also solve the const generics issue.
triage: It would be good to at least figure out a way to give a better error message in these array length cases. (other cases include , ...)
Another case in
Triage: is now fixed in the latest nightly (rustc 1.45.0-nightly ( 2020-05-24)) (fixed by ).
Triage: is now fixed in the latest nightly (I think it's fixed by ). (And I've hidden comment as resolved to make the un-fixed ICEs easier to find.)
Triage: The reduced snippet () and are no longer ICE with the latest nightly:
claim

Discussion:
<ins> warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes --> $DIR/issue-56445-1.rs:3:27 | LL | #![cfg_attr(full, feature(const_generics))] |                           ^^^^^^^^^^^^^^ | = note: `#[warn(incomplete_features)]` on by default = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information error[E0771]: use of non-static lifetime `'a` in const generic --> $DIR/issue-56445-1.rs:8:26 | LL | struct Bug<'a, const S: &'a str>(PhantomData<&'a ()>); |                          ^^ | = note: for more information, see issue #74052 <https://github.com/rust-lang/rust/issues/74052> error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0771`. </ins>

<ins> error[E0771]: use of non-static lifetime `'a` in const generic --> $DIR/issue-56445-1.rs:8:26 | LL | struct Bug<'a, const S: &'a str>(PhantomData<&'a ()>); |                          ^^ | = note: for more information, see issue #74052 <https://github.com/rust-lang/rust/issues/74052> error: aborting due to previous error For more information about this error, try `rustc --explain E0771`. </ins>

<ins> // Regression test for https://github.com/rust-lang/rust/issues/56445#issuecomment-518402995. // revisions: full min #![cfg_attr(full, feature(const_generics))] //[full]~WARN the feature `const_generics` is incomplete #![crate_type = "lib"] use std::marker::PhantomData; struct Bug<'a, const S: &'a str>(PhantomData<&'a ()>); //~^ ERROR: use of non-static lifetime `'a` in const generic impl Bug<'_, ""> {} </ins>

<ins> // Regression test for https://github.com/rust-lang/rust/issues/56445#issuecomment-502095133 struct OnDiskDirEntry<'a> { _s: &'a usize } impl<'a> OnDiskDirEntry<'a> { const LFN_FRAGMENT_LEN: usize = 2; fn lfn_contents(&self) -> [char; Self::LFN_FRAGMENT_LEN] { loop { } } //~^ ERROR: generic `Self` types are currently not permitted in anonymous constants } fn main() {} </ins>

<ins> error: generic `Self` types are currently not permitted in anonymous constants --> $DIR/issue-56445-2.rs:7:38 | LL |     fn lfn_contents(&self) -> [char; Self::LFN_FRAGMENT_LEN] { loop { } } |                                      ^^^^ | note: not a concrete type --> $DIR/issue-56445-2.rs:4:10 | LL | impl<'a> OnDiskDirEntry<'a> { |          ^^^^^^^^^^^^^^^^^^ error: aborting due to previous error </ins>

<ins> // Regression test for https://github.com/rust-lang/rust/issues/56445#issuecomment-524494170 pub struct Memory<'rom> { rom: &'rom [u8], ram: [u8; Self::SIZE], //~^ ERROR: generic `Self` types are currently not permitted in anonymous constants } impl<'rom> Memory<'rom> { pub const SIZE: usize = 0x8000; } fn main() {} </ins>

<ins> error: generic `Self` types are currently not permitted in anonymous constants --> $DIR/issue-56445-3.rs:4:15 | LL |     ram: [u8; Self::SIZE], |               ^^^^ error: aborting due to previous error </ins>

<del> warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes --> $DIR/issue-56445.rs:3:27 | LL | #![cfg_attr(full, feature(const_generics))] |                           ^^^^^^^^^^^^^^ | = note: `#[warn(incomplete_features)]` on by default = note: see issue #44580 <https://github.com/rust-lang/rust/issues/44580> for more information error[E0771]: use of non-static lifetime `'a` in const generic --> $DIR/issue-56445.rs:8:26 | LL | struct Bug<'a, const S: &'a str>(PhantomData<&'a ()>); |                          ^^ | = note: for more information, see issue #74052 <https://github.com/rust-lang/rust/issues/74052> error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0771`. </del>

<del> error[E0771]: use of non-static lifetime `'a` in const generic --> $DIR/issue-56445.rs:8:26 | LL | struct Bug<'a, const S: &'a str>(PhantomData<&'a ()>); |                          ^^ | = note: for more information, see issue #74052 <https://github.com/rust-lang/rust/issues/74052> error: aborting due to previous error For more information about this error, try `rustc --explain E0771`. </del>

<del> // Regression test for https://github.com/rust-lang/rust/issues/56445#issuecomment-518402995. // revisions: full min #![cfg_attr(full, feature(const_generics))] //[full]~WARN the feature `const_generics` is incomplete #![crate_type = "lib"] use std::marker::PhantomData; struct Bug<'a, const S: &'a str>(PhantomData<&'a ()>); //~^ ERROR: use of non-static lifetime `'a` in const generic impl Bug<'_, ""> {} </del>