Skip to content

Commit 157cdb0

Browse files
committed
[Distributed] onReturn ad-hoc req must not be mutating
1 parent 0eb649d commit 157cdb0

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

lib/AST/DistributedDecl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,6 +1202,11 @@ AbstractFunctionDecl::isDistributedTargetInvocationResultHandlerOnReturn() const
12021202
return false;
12031203
}
12041204

1205+
// --- must not be mutating
1206+
if (func->isMutating()) {
1207+
return false;
1208+
}
1209+
12051210
// === Check generics
12061211
if (!isGeneric()) {
12071212
return false;

test/Distributed/distributed_actor_system_missing_adhoc_requirement_impls.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,7 @@ struct BadResultHandler_missingOnReturn: DistributedTargetInvocationResultHandle
816816
func onReturnVoid() async throws {}
817817
func onThrow<Err: Error>(error: Err) async throws {}
818818
}
819+
819820
struct BadResultHandler_missingRequirement: DistributedTargetInvocationResultHandler {
820821
// expected-error@-1{{struct 'BadResultHandler_missingRequirement' is missing witness for protocol requirement 'onReturn'}}
821822
// expected-note@-2{{protocol 'BadResultHandler_missingRequirement' requires function 'onReturn' with signature:}}
@@ -826,6 +827,16 @@ struct BadResultHandler_missingRequirement: DistributedTargetInvocationResultHan
826827
func onThrow<Err: Error>(error: Err) async throws {}
827828
}
828829

830+
struct BadResultHandler_mutatingButShouldNotBe: DistributedTargetInvocationResultHandler {
831+
// expected-error@-1{{struct 'BadResultHandler_missingRequirement' is missing witness for protocol requirement 'onReturn'}}
832+
// expected-note@-2{{protocol 'BadResultHandler_missingRequirement' requires function 'onReturn' with signature:}}
833+
typealias SerializationRequirement = Codable
834+
835+
mutating func onReturn<Success: Codable>(value: Success) async throws {} // WRONG: can't be mutating
836+
func onReturnVoid() async throws {}
837+
func onThrow<Err: Error>(error: Err) async throws {}
838+
}
839+
829840
public struct PublicFakeResultHandler: DistributedTargetInvocationResultHandler {
830841
public typealias SerializationRequirement = Codable
831842

0 commit comments

Comments
 (0)