@@ -341,11 +341,12 @@ swift::getDistributedSerializationRequirements(
341341 return true ; // we're done here, any means there are no requirements
342342
343343 auto *serialReqType = existentialRequirementTy->getAs <ExistentialType>();
344+ ->getAs <ExistentialType>();
344345 if (!serialReqType || serialReqType->hasError ()) {
345346 return false ;
346347 }
347348
348- auto layout = serialReqType->getExistentialLayout ();
349+ auto desugaredTy = serialReqType->getConstraintType ();
349350 for (auto p : layout.getProtocols ()) {
350351 requirementProtos.insert (p);
351352 }
@@ -1224,15 +1225,25 @@ swift::extractDistributedSerializationRequirements(
12241225 DA->getAssociatedType (C.Id_SerializationRequirement );
12251226
12261227 for (auto req : allRequirements) {
1227- // FIXME: Seems unprincipled
1228- if (req.getKind () != RequirementKind::SameType &&
1229- req.getKind () != RequirementKind::Conformance)
1228+ if (req.getSecondType ()->isAny ()) {
1229+ continue ;
1230+ }
1231+ if (!req.getFirstType ()->hasDependentMember ())
12301232 continue ;
12311233
12321234 if (auto dependentMemberType =
1233- req.getFirstType ()->getAs <DependentMemberType>()) {
1235+ req.getFirstType ()->castTo <DependentMemberType>()) {
12341236 if (dependentMemberType->getAssocType () == daSerializationReqAssocType) {
1235- auto layout = req.getSecondType ()->getExistentialLayout ();
1237+ auto requirementProto = req.getSecondType ();
1238+ if (auto proto = dyn_cast_or_null<ProtocolDecl>(
1239+ requirementProto->getAnyNominal ())) {
1240+ into.insert (proto);
1241+ } else {
1242+ auto serialReqType = requirementProto->castTo <ExistentialType>()
1243+ ->getConstraintType ();
1244+ auto flattenedRequirements =
1245+ flattenDistributedSerializationTypeToRequiredProtocols (
1246+ serialReqType.getPointer ());
12361247 for (auto p : layout.getProtocols ()) {
12371248 serializationReqs.insert (p);
12381249 }
0 commit comments