diff options
| author | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2023-06-19 12:42:59 +0000 |
|---|---|---|
| committer | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2023-06-22 15:51:19 +0000 |
| commit | b323f587fcd978deff5b922e60dcc4bcd208f2ab (patch) | |
| tree | fee7b9dfd3c8b2dd9f3058aa1bb817a54667a3d0 /compiler/rustc_ty_utils/src | |
| parent | b0b4a0795949aee0df9bad292ba2951f8c6291ec (diff) | |
| download | rust-b323f587fcd978deff5b922e60dcc4bcd208f2ab.tar.gz rust-b323f587fcd978deff5b922e60dcc4bcd208f2ab.zip | |
Handle weak type aliases by immediately resolving them to their aliased type
Diffstat (limited to 'compiler/rustc_ty_utils/src')
| -rw-r--r-- | compiler/rustc_ty_utils/src/opaque_types.rs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/compiler/rustc_ty_utils/src/opaque_types.rs b/compiler/rustc_ty_utils/src/opaque_types.rs index b8dfff0b8ab..351c703cba1 100644 --- a/compiler/rustc_ty_utils/src/opaque_types.rs +++ b/compiler/rustc_ty_utils/src/opaque_types.rs @@ -107,6 +107,12 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for OpaqueTypeCollector<'tcx> { } } } + ty::Alias(ty::Weak, alias_ty) if alias_ty.def_id.is_local() => { + self.tcx + .type_of(alias_ty.def_id) + .subst(self.tcx, alias_ty.substs) + .visit_with(self)?; + } ty::Alias(ty::Projection, alias_ty) => { // This avoids having to do normalization of `Self::AssocTy` by only // supporting the case of a method defining opaque types from assoc types @@ -136,24 +142,23 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for OpaqueTypeCollector<'tcx> { ty::InternalSubsts::identity_for_item(self.tcx, parent), ); - if !check_substs_compatible(self.tcx, assoc, impl_substs) { + if check_substs_compatible(self.tcx, assoc, impl_substs) { + return self + .tcx + .type_of(assoc.def_id) + .subst(self.tcx, impl_substs) + .visit_with(self); + } else { self.tcx.sess.delay_span_bug( self.tcx.def_span(assoc.def_id), "item had incorrect substs", ); - return ControlFlow::Continue(()); } - - return self - .tcx - .type_of(assoc.def_id) - .subst(self.tcx, impl_substs) - .visit_with(self); } } } } - _ => {} + _ => trace!(kind=?t.kind()), } ControlFlow::Continue(()) } |
