From 3fd00702ef8275227097a91184968e7ed621edcd Mon Sep 17 00:00:00 2001 From: Sebastien Tardif Date: Tue, 23 Jun 2026 21:47:52 -0700 Subject: [PATCH] ty: map CoroutineClosure and fold nested consts in ReverseMapper RPITIT/opaque reverse mapping handled Closure/Coroutine/CoroutineWitness but not CoroutineClosure, so async-closure captures in opaque concrete types skipped special fold_closure_args handling. Also super_fold non-param consts so nested params/regions inside unevaluated consts are remapped. Origin: ReverseMapper fold_ty in opaque_types.rs (pre-CoroutineClosure era gap) Signed-off-by: Sebastien Tardif --- compiler/rustc_middle/src/ty/opaque_types.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_middle/src/ty/opaque_types.rs b/compiler/rustc_middle/src/ty/opaque_types.rs index 2b024b7b6cbb3..9f12086ad46c7 100644 --- a/compiler/rustc_middle/src/ty/opaque_types.rs +++ b/compiler/rustc_middle/src/ty/opaque_types.rs @@ -150,6 +150,11 @@ impl<'tcx> TypeFolder> for ReverseMapper<'tcx> { Ty::new_closure(self.tcx, def_id, args) } + ty::CoroutineClosure(def_id, args) => { + let args = self.fold_closure_args(def_id, args); + Ty::new_coroutine_closure(self.tcx, def_id, args) + } + ty::Coroutine(def_id, args) => { let args = self.fold_closure_args(def_id, args); Ty::new_coroutine(self.tcx, def_id, args) @@ -214,7 +219,9 @@ impl<'tcx> TypeFolder> for ReverseMapper<'tcx> { } } - _ => ct, + // Fold through unevaluated/expr consts so nested type/region/param + // references inside the const are remapped too. + _ => ct.super_fold_with(self), } } }