Change:
<!-- Thank you for finding an Internal Compiler Error! If possible, try to provide a minimal verifiable example. You can read "Rust Bug Minimization Patterns" for how to create smaller examples. --The notable difference between this issue and others like it (, , ) are that this is happening in 1.67.0 (where the others have it in nightly), and in release mode (where at least one of them only happens in debug mode). Posting this as a separate ticket given these reasons, I hope that's okay. (Tested with v0.7.39) This only happens when building in release mode. <!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. --: <!-- Include a backtrace in the code block by setting in your environment. E.g. . --<details<summary<strongBacktrace</strong</summary<p</p</details
I just confirmed this is also fixed by , but it would be nice to have a reduced test case for this one. label E-needs-mcve
Also possibly related:
Can also confirm that this issue is fixed by , thanks!
needs to be library and release mode label -E-needs-mcve +S-bug-has-mcve
This regressed from 1.66.1 to 1.67.0. label regression-from-stable-to-stable also cc downstream

Discussion:
// which is different from how types/const are freshened. | TypeFlags::HAS_TY_FRESH.bits | TypeFlags::HAS_CT_FRESH.bits <del> | TypeFlags::HAS_FREE_LOCAL_REGIONS.bits; </del> <ins> | TypeFlags::HAS_FREE_LOCAL_REGIONS.bits | TypeFlags::HAS_RE_ERASED.bits; </ins> /// Does this have `Projection`? const HAS_TY_PROJECTION           = 1 << 10;

<ins> // build-pass #![crate_type = "lib"] pub trait StreamOnce { type Error; } pub trait ResetStream: StreamOnce { fn reset(&mut self) -> Result<(), Self::Error>; } impl<'a> ResetStream for &'a str where Self: StreamOnce { #[inline] fn reset(&mut self) -> Result<(), Self::Error> { Ok(()) } } </ins>

<ins> // build-pass // compile-flags: -C opt-level=3 #![crate_type = "lib"] pub trait Archive { type Archived; type Resolver; fn resolve(resolver: Self::Resolver, out: *mut Self::Archived); } pub type Archived<T> = <T as Archive>::Archived; pub type Resolver<T> = <T as Archive>::Resolver; pub struct Record<'a> { _payload: &'a [u8], } pub struct ArchivedRecord<'a> where &'a [u8]: Archive, { _payload: Archived<&'a [u8]>, } pub struct RecordResolver<'a> where &'a [u8]: Archive, { _payload: Resolver<&'a [u8]>, } impl<'a> Archive for Record<'a> where &'a [u8]: Archive, { type Archived = ArchivedRecord<'a>; type Resolver = RecordResolver<'a>; fn resolve(_resolver: Self::Resolver, _out: *mut Self::Archived) {} } </ins>

= help: a `loop` may express intention better if this is on purpose = note: `#[warn(unconditional_recursion)]` on by default <del> error[E0275]: overflow evaluating the requirement `Map<&mut Map<&mut Map<&mut Map<..., ...>, ...>, ...>, ...>: Iterator` </del> <ins> error[E0275]: overflow evaluating the requirement `Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:12:24: 12:27]>: Iterator` </ins> | = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_83150`) <ins> = note: required for `&mut Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:12:24: 12:27]>` to implement `Iterator` = note: 65 redundant requirements hidden </ins> = note: required for `&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<..., ...>, ...>, ...>, ...>, ...>, ...>, ...>` to implement `Iterator` = note: the full type name has been written to '$TEST_BUILD_DIR/recursion/issue-83150/issue-83150.long-type-hash.txt'