@@ -498,8 +498,22 @@ bool CheckDistributedFunctionRequest::evaluate(
498498 // SerializationRequirement
499499 llvm::SmallPtrSet<ProtocolDecl *, 2 > serializationRequirements;
500500 if (auto extension = dyn_cast<ExtensionDecl>(DC)) {
501- serializationRequirements = extractDistributedSerializationRequirements (
502- C, extension->getGenericRequirements ());
501+ auto actorOrProtocol = extension->getExtendedNominal ();
502+ if (auto actor = dyn_cast<ClassDecl>(actorOrProtocol)) {
503+ assert (actor->isAnyActor ());
504+ serializationRequirements = getDistributedSerializationRequirementProtocols (
505+ getDistributedActorSystemType (actor)->getAnyNominal (),
506+ C.getProtocol (KnownProtocolKind::DistributedActorSystem));
507+ } else if (auto protocol = dyn_cast<ProtocolDecl>(actorOrProtocol)) {
508+ extractDistributedSerializationRequirements (
509+ C, protocol->getGenericRequirements (),
510+ /* into=*/ serializationRequirements);
511+ extractDistributedSerializationRequirements (
512+ C, extension->getGenericRequirements (),
513+ /* into=*/ serializationRequirements);
514+ } else {
515+ // ignore
516+ }
503517 } else if (auto actor = dyn_cast<ClassDecl>(DC)) {
504518 serializationRequirements = getDistributedSerializationRequirementProtocols (
505519 getDistributedActorSystemType (actor)->getAnyNominal (),
@@ -546,6 +560,7 @@ bool CheckDistributedFunctionRequest::evaluate(
546560 if (auto paramNominalTy = paramTy->getAnyNominal ()) {
547561 addCodableFixIt (paramNominalTy, diag);
548562 } // else, no nominal type to suggest the fixit for, e.g. a closure
563+
549564 return true ;
550565 }
551566 }
@@ -740,11 +755,11 @@ void TypeChecker::checkDistributedActor(SourceFile *SF, NominalTypeDecl *nominal
740755 (void )nominal->getDistributedActorIDProperty ();
741756}
742757
743- void TypeChecker::checkDistributedFunc (FuncDecl *func) {
758+ bool TypeChecker::checkDistributedFunc (FuncDecl *func) {
744759 if (!func->isDistributed ())
745- return ;
760+ return false ;
746761
747- swift::checkDistributedFunction (func);
762+ return swift::checkDistributedFunction (func);
748763}
749764
750765llvm::SmallPtrSet<ProtocolDecl *, 2 >
0 commit comments