[Sema/IRGen] Extend ad-hoc requirement handling to DistributedTargetInvocationEncoder.record{Argument, ReturnType}

This commit is contained in:
Pavel Yaskevich
2024-02-07 15:35:27 -08:00
parent 0db22316a2
commit 4f32111bf8
3 changed files with 61 additions and 34 deletions

View File

@@ -8591,9 +8591,20 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyConformsToConstraint(
return recordConformance(synthesized);
};
if (witness->isDistributedActorSystemRemoteCall(/*isVoidReturn=*/false)) {
if (GP->isEqual(cast<FuncDecl>(witness)->getResultInterfaceType()))
return synthesizeConformance();
if (witness->isGeneric()) {
// `DistributedActorSystem.remoteCall`
if (witness->isDistributedActorSystemRemoteCall(/*isVoidReturn=*/false)) {
if (GP->isEqual(cast<FuncDecl>(witness)->getResultInterfaceType()))
return synthesizeConformance();
}
// `DistributedTargetInvocationEncoder.record{Argument, ResultType}`
if (witness->isDistributedTargetInvocationEncoderRecordArgument() ||
witness->isDistributedTargetInvocationEncoderRecordReturnType()) {
auto genericParams = witness->getGenericParams()->getParams();
if (GP->isEqual(genericParams.front()->getDeclaredInterfaceType()))
return synthesizeConformance();
}
}
}
}