@@ -5334,19 +5334,25 @@ CanOpenedArchetypeType OpenedArchetypeType::get(CanType existential,
5334
5334
return CanOpenedArchetypeType (result);
5335
5335
}
5336
5336
5337
- CanType OpenedArchetypeType::getAny (CanType existential, Type interfaceType ) {
5337
+ Type OpenedArchetypeType::getAny (Type existential, Type interfaceTy ) {
5338
5338
assert (existential->isAnyExistentialType ());
5339
5339
if (auto metatypeTy = existential->getAs <ExistentialMetatypeType>()) {
5340
5340
auto instanceTy =
5341
5341
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);
5344
5349
}
5345
5350
assert (existential->isExistentialType ());
5346
- return OpenedArchetypeType::get (existential, interfaceType);
5351
+ return OpenedArchetypeType::get (existential->getCanonicalType (),
5352
+ interfaceTy);
5347
5353
}
5348
5354
5349
- CanType OpenedArchetypeType::getAny (CanType existential) {
5355
+ Type OpenedArchetypeType::getAny (Type existential) {
5350
5356
auto interfaceTy = OpenedArchetypeType::getSelfInterfaceTypeFromContext (
5351
5357
GenericSignature (), existential->getASTContext ());
5352
5358
return getAny (existential, interfaceTy);
0 commit comments