@@ -528,9 +528,13 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
528528 }
529529
530530 auto sig = getGenericSignature ();
531- auto requirements = sig.getRequirements ();
532531
533- if (requirements.size () != expectedRequirementsNum) {
532+ SmallVector<Requirement, 2 > reqs;
533+ SmallVector<InverseRequirement, 2 > inverseReqs;
534+ sig->getRequirementsWithInverses (reqs, inverseReqs);
535+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
536+
537+ if (reqs.size () != expectedRequirementsNum) {
534538 return false ;
535539 }
536540
@@ -545,7 +549,7 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
545549 // same_type: Act.ID FakeActorSystem.ActorID // LAST one
546550
547551 // --- Check requirement: conforms_to: Act DistributedActor
548- auto actorReq = requirements [0 ];
552+ auto actorReq = reqs [0 ];
549553 if (actorReq.getKind () != RequirementKind::Conformance) {
550554 return false ;
551555 }
@@ -554,7 +558,7 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
554558 }
555559
556560 // --- Check requirement: conforms_to: Err Error
557- auto errorReq = requirements [1 ];
561+ auto errorReq = reqs [1 ];
558562 if (errorReq.getKind () != RequirementKind::Conformance) {
559563 return false ;
560564 }
@@ -593,7 +597,7 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
593597 }
594598
595599 // -- Check requirement: same_type Actor.ID Self.ActorID
596- auto actorIdReq = requirements .back ();
600+ auto actorIdReq = reqs .back ();
597601 if (actorIdReq.getKind () != RequirementKind::SameType) {
598602 return false ;
599603 }
@@ -667,10 +671,14 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordGenericSubstitut
667671 return false ;
668672 }
669673
674+ SmallVector<Requirement, 2 > reqs;
675+ SmallVector<InverseRequirement, 2 > inverseReqs;
676+ fd->getGenericSignature ()->getRequirementsWithInverses (reqs, inverseReqs);
677+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
678+
670679 // No requirements on the generic parameter
671- if (fd-> getGenericRequirements (). size () != 0 ) {
680+ if (!reqs. empty ())
672681 return false ;
673- }
674682
675683 if (!fd->getResultInterfaceType ()->isVoid ())
676684 return false ;
@@ -785,9 +793,13 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordArgument() const
785793
786794
787795 auto sig = getGenericSignature ();
788- auto requirements = sig.getRequirements ();
789796
790- if (requirements.size () != expectedRequirementsNum) {
797+ SmallVector<Requirement, 2 > reqs;
798+ SmallVector<InverseRequirement, 2 > inverseReqs;
799+ sig->getRequirementsWithInverses (reqs, inverseReqs);
800+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
801+
802+ if (reqs.size () != expectedRequirementsNum) {
791803 return false ;
792804 }
793805
@@ -891,9 +903,13 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordReturnType() con
891903 GenericTypeParamDecl *ArgumentParam = genericParams->getParams ()[0 ];
892904
893905 auto sig = getGenericSignature ();
894- auto requirements = sig.getRequirements ();
895906
896- if (requirements.size () != expectedRequirementsNum) {
907+ SmallVector<Requirement, 2 > reqs;
908+ SmallVector<InverseRequirement, 2 > inverseReqs;
909+ sig->getRequirementsWithInverses (reqs, inverseReqs);
910+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
911+
912+ if (reqs.size () != expectedRequirementsNum) {
897913 return false ;
898914 }
899915
@@ -1000,8 +1016,13 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordErrorType() cons
10001016
10011017 // --- Check: Argument: SerializationRequirement
10021018 auto sig = getGenericSignature ();
1003- auto requirements = sig.getRequirements ();
1004- if (requirements.size () != 1 ) {
1019+
1020+ SmallVector<Requirement, 2 > reqs;
1021+ SmallVector<InverseRequirement, 2 > inverseReqs;
1022+ sig->getRequirementsWithInverses (reqs, inverseReqs);
1023+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
1024+
1025+ if (reqs.size () != 1 ) {
10051026 return false ;
10061027 }
10071028
@@ -1016,7 +1037,7 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordErrorType() cons
10161037 }
10171038
10181039 // --- Check requirement: conforms_to: Err Error
1019- auto errorReq = requirements [0 ];
1040+ auto errorReq = reqs [0 ];
10201041 if (errorReq.getKind () != RequirementKind::Conformance) {
10211042 return false ;
10221043 }
0 commit comments