Rollup merge of #112777 - compiler-errors:normalize-weak-more, r=oli-obk
Continue folding in query normalizer on weak aliases Fixes #112752 Fixes #112731 (same root cause, so didn't make a test for it) fixes #112776 r? ```@oli-obk```
This commit is contained in:
commit
68f2f1e32c
@ -322,8 +322,12 @@ fn try_fold_ty(&mut self, ty: Ty<'tcx>) -> Result<Ty<'tcx>, Self::Error> {
|
|||||||
};
|
};
|
||||||
// `tcx.normalize_projection_ty` may normalize to a type that still has
|
// `tcx.normalize_projection_ty` may normalize to a type that still has
|
||||||
// unevaluated consts, so keep normalizing here if that's the case.
|
// unevaluated consts, so keep normalizing here if that's the case.
|
||||||
if res != ty && res.has_type_flags(ty::TypeFlags::HAS_CT_PROJECTION) {
|
// Similarly, `tcx.normalize_weak_ty` will only unwrap one layer of type
|
||||||
res.try_super_fold_with(self)?
|
// and we need to continue folding it to reveal the TAIT behind it.
|
||||||
|
if res != ty
|
||||||
|
&& (res.has_type_flags(ty::TypeFlags::HAS_CT_PROJECTION) || kind == ty::Weak)
|
||||||
|
{
|
||||||
|
res.try_fold_with(self)?
|
||||||
} else {
|
} else {
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
|
12
tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs
Normal file
12
tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// compile-flags: --crate-type=lib -Cdebuginfo=2
|
||||||
|
// build-pass
|
||||||
|
|
||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
|
type Debuggable = impl core::fmt::Debug;
|
||||||
|
|
||||||
|
static mut TEST: Option<Debuggable> = None;
|
||||||
|
|
||||||
|
fn foo() -> Debuggable {
|
||||||
|
0u32
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user