Properly track the depth when expanding free alias types

This commit is contained in:
León Orell Valerian Liehr 2025-07-10 19:49:32 +02:00
parent e43d139a82
commit 341f12df67
No known key found for this signature in database
GPG key ID: D17A07215F68E713
2 changed files with 24 additions and 2 deletions

View file

@ -1052,9 +1052,11 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for FreeAliasTypeExpander<'tcx> {
}
self.depth += 1;
ensure_sufficient_stack(|| {
let ty = ensure_sufficient_stack(|| {
self.tcx.type_of(alias.def_id).instantiate(self.tcx, alias.args).fold_with(self)
})
});
self.depth -= 1;
ty
}
fn fold_const(&mut self, ct: ty::Const<'tcx>) -> ty::Const<'tcx> {

View file

@ -0,0 +1,20 @@
// In several type analysis passes we employ a specialized expansion procedure.
// This procedure used to incorrectly track expansion depth (growing much faster
// than normalization depth) resulting in its internal assertion triggering.
//
// issue: <https://github.com/rust-lang/rust/issues/142419>
//@ check-pass
#![feature(lazy_type_alias)]
#![expect(incomplete_features)]
type T0 = (T1, T1, T1, T1);
type T1 = (T2, T2, T2, T2);
type T2 = (T3, T3, T3, T3);
type T3 = (T4, T4, T4, T4);
type T4 = (T5, T5, T5, T5);
type T5 = (T6, T6, T6, T6);
type T6 = (T7, T7, T7, T7);
type T7 = ();
fn accept(_: T0) {}
fn main() {}