@@ -189,6 +189,9 @@ bool CanType::isReferenceTypeImpl(CanType type, const GenericSignatureImpl *sig,
189189 case TypeKind::DynamicSelf:
190190 return isReferenceTypeImpl (cast<DynamicSelfType>(type).getSelfType (),
191191 sig, functionsCount);
192+ case TypeKind::SILMoveOnly:
193+ return isReferenceTypeImpl (cast<SILMoveOnlyType>(type)->getInnerType (), sig,
194+ functionsCount);
192195
193196 // Archetypes and existentials are only class references if class-bounded.
194197 case TypeKind::PrimaryArchetype:
@@ -1632,6 +1635,7 @@ CanType TypeBase::computeCanonicalType() {
16321635 case TypeKind::SILBox:
16331636 case TypeKind::SILFunction:
16341637 case TypeKind::SILToken:
1638+ case TypeKind::SILMoveOnly:
16351639 llvm_unreachable (" SIL-only types are always canonical!" );
16361640
16371641 case TypeKind::ProtocolComposition: {
@@ -5086,6 +5090,18 @@ case TypeKind::Id:
50865090 return storageTy;
50875091 }
50885092
5093+ case TypeKind::SILMoveOnly: {
5094+ auto *storageTy = cast<SILMoveOnlyType>(base);
5095+ Type transCap = storageTy->getInnerType ().transformWithPosition (
5096+ TypePosition::Invariant, fn);
5097+ if (!transCap)
5098+ return Type ();
5099+ CanType canTransCap = transCap->getCanonicalType ();
5100+ if (canTransCap != storageTy->getInnerType ())
5101+ return SILMoveOnlyType::get (canTransCap);
5102+ return storageTy;
5103+ }
5104+
50895105 case TypeKind::SILBox: {
50905106 bool changed = false ;
50915107 auto boxTy = cast<SILBoxType>(base);
@@ -5996,6 +6012,8 @@ ReferenceCounting TypeBase::getReferenceCounting() {
59966012 case TypeKind::DynamicSelf:
59976013 return cast<DynamicSelfType>(type).getSelfType ()
59986014 ->getReferenceCounting ();
6015+ case TypeKind::SILMoveOnly:
6016+ return cast<SILMoveOnlyType>(type)->getInnerType ()->getReferenceCounting ();
59996017
60006018 case TypeKind::PrimaryArchetype:
60016019 case TypeKind::OpenedArchetype:
0 commit comments