@@ -5334,19 +5334,25 @@ CanOpenedArchetypeType OpenedArchetypeType::get(CanType existential,
53345334 return CanOpenedArchetypeType (result);
53355335}
53365336
5337- CanType OpenedArchetypeType::getAny (CanType existential, Type interfaceType ) {
5337+ Type OpenedArchetypeType::getAny (Type existential, Type interfaceTy ) {
53385338 assert (existential->isAnyExistentialType ());
53395339 if (auto metatypeTy = existential->getAs <ExistentialMetatypeType>()) {
53405340 auto instanceTy =
53415341 metatypeTy->getExistentialInstanceType ()->getCanonicalType ();
5342- return CanMetatypeType::get (
5343- OpenedArchetypeType::getAny (instanceTy, interfaceType));
5342+ auto openedInstanceTy = OpenedArchetypeType::getAny (
5343+ instanceTy, interfaceTy);
5344+ if (metatypeTy->hasRepresentation ()) {
5345+ return MetatypeType::get (openedInstanceTy,
5346+ metatypeTy->getRepresentation ());
5347+ }
5348+ return MetatypeType::get (openedInstanceTy);
53445349 }
53455350 assert (existential->isExistentialType ());
5346- return OpenedArchetypeType::get (existential, interfaceType);
5351+ return OpenedArchetypeType::get (existential->getCanonicalType (),
5352+ interfaceTy);
53475353}
53485354
5349- CanType OpenedArchetypeType::getAny (CanType existential) {
5355+ Type OpenedArchetypeType::getAny (Type existential) {
53505356 auto interfaceTy = OpenedArchetypeType::getSelfInterfaceTypeFromContext (
53515357 GenericSignature (), existential->getASTContext ());
53525358 return getAny (existential, interfaceTy);
0 commit comments