Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3a1bb04

Browse files
Rollup merge of #143744 - fmease:lta-expand-proper-depth, r=compiler-errors
Properly track the depth when expanding free alias types Decrease the depth after the fold so as not to affect the depth for unrelated same-level constituent types. My bad. Fixes #142419.
2 parents 58e5c26 + 341f12d commit 3a1bb04

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

‎compiler/rustc_middle/src/ty/util.rs‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,9 +1052,11 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for FreeAliasTypeExpander<'tcx> {
10521052
}
10531053

10541054
self.depth += 1;
1055-
ensure_sufficient_stack(|| {
1055+
let ty = ensure_sufficient_stack(|| {
10561056
self.tcx.type_of(alias.def_id).instantiate(self.tcx, alias.args).fold_with(self)
1057-
})
1057+
});
1058+
self.depth -= 1;
1059+
ty
10581060
}
10591061

10601062
fn fold_const(&mut self, ct: ty::Const<'tcx>) -> ty::Const<'tcx> {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// In several type analysis passes we employ a specialized expansion procedure.
2+
// This procedure used to incorrectly track expansion depth (growing much faster
3+
// than normalization depth) resulting in its internal assertion triggering.
4+
//
5+
// issue: <https://github.com/rust-lang/rust/issues/142419>
6+
//@ check-pass
7+
#![feature(lazy_type_alias)]
8+
#![expect(incomplete_features)]
9+
10+
type T0 = (T1, T1, T1, T1);
11+
type T1 = (T2, T2, T2, T2);
12+
type T2 = (T3, T3, T3, T3);
13+
type T3 = (T4, T4, T4, T4);
14+
type T4 = (T5, T5, T5, T5);
15+
type T5 = (T6, T6, T6, T6);
16+
type T6 = (T7, T7, T7, T7);
17+
type T7 = ();
18+
19+
fn accept(_: T0) {}
20+
fn main() {}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /