1
Fork 0

Only prevent field projections into opaque types, not types containing opaque types

This commit is contained in:
Oli Scherer 2023-09-25 17:40:37 +00:00
parent 0a689c1be8
commit 17b313fb57
3 changed files with 37 additions and 1 deletions

View file

@ -464,7 +464,7 @@ impl<'a, 'tcx> MemCategorizationContext<'a, 'tcx> {
// Opaque types can't have field projections, but we can instead convert
// the current place in-place (heh) to the hidden type, and then apply all
// follow up projections on that.
if node_ty != place_ty && place_ty.has_opaque_types() {
if node_ty != place_ty && matches!(place_ty.kind(), ty::Alias(ty::Opaque, ..)) {
projections.push(Projection { kind: ProjectionKind::OpaqueCast, ty: node_ty });
}
projections.push(Projection { kind, ty });