Properly track the depth when expanding free alias types
This commit is contained in:
parent
e43d139a82
commit
341f12df67
2 changed files with 24 additions and 2 deletions
|
|
@ -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> {
|
||||
|
|
|
|||
20
tests/ui/lazy-type-alias/deep-expansion.rs
Normal file
20
tests/ui/lazy-type-alias/deep-expansion.rs
Normal 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() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue