Closed martialln closed 2 days ago
Thanks for the report, I'll check what's up with that.
rdar://128368486
Foud a small reproducer:
import Distributed
public struct CustomResultHandler: DistributedTargetInvocationResultHandler {
public typealias SerializationRequirement = any Codable
public func onReturn<Success: Codable>(value: Success) async throws {}
public func onReturnVoid() async throws {}
public func onThrow<Err>(error: Err) async throws where Err : Error {}
}
public struct CustomActorInvocationEncoder: DistributedTargetInvocationEncoder {
public typealias SerializationRequirement = any Codable
public mutating func recordArgument<Value: Codable>(_ argument: RemoteCallArgument<Value>) throws {}
public mutating func recordGenericSubstitution<T>(_ type: T.Type) throws {}
public mutating func recordReturnType<R: Codable>(_ type: R.Type) throws {}
public mutating func recordErrorType<E: Error>(_ type: E.Type) throws {}
public mutating func doneRecording() throws {}
}
public struct CustomActorInvocationDecoder: DistributedTargetInvocationDecoder {
public typealias SerializationRequirement = any Codable
public mutating func decodeNextArgument<Argument: Codable>() throws -> Argument { fatalError() }
public mutating func decodeGenericSubstitutions() throws -> [Any.Type] { [] }
public mutating func decodeErrorType() throws -> (Any.Type)? { nil }
public mutating func decodeReturnType() throws -> (Any.Type)? { nil }
}
public final class CustomActorSystem {
}
extension CustomActorSystem: DistributedActorSystem {
public typealias SerializationRequirement = any Codable
public typealias ActorID = Int
public typealias InvocationEncoder = CustomActorInvocationEncoder
public typealias InvocationDecoder = CustomActorInvocationDecoder
public typealias ResultHandler = CustomResultHandler
public func resolve<Act: DistributedActor>(id: ActorID, as actorType: Act.Type) throws -> Act? where ActorID == Act.ID {
fatalError()
}
public func assignID<Act: DistributedActor>(_ actorType: Act.Type) -> ActorID where ActorID == Act.ID {
fatalError()
}
public func actorReady<Act: DistributedActor>(_ actor: Act) where ActorID == Act.ID {
fatalError()
}
public func resignID(_ id: ActorID) {
fatalError()
}
public func makeInvocationEncoder() -> InvocationEncoder {
fatalError()
}
public func remoteCall<Act: DistributedActor, Err: Error, Res: Codable>(
on actor: Act,
target: RemoteCallTarget,
invocation: inout InvocationEncoder,
throwing _: Err.Type,
returning _: Res.Type
) async throws -> Res where Act.ID == ActorID {
fatalError()
}
public func remoteCallVoid<Act: DistributedActor, Err: Error>(
on actor: Act,
target: RemoteCallTarget,
invocation: inout InvocationEncoder,
throwing error: Err.Type
) async throws where Act.ID == ActorID {
fatalError()
}
}
If you move the protocol conformance of DistributedActorSystem
from the extension to the class declaration it doesn't crash anymore.
Hope that helps 😄
Seems fixed in Xcode 16.0 (16A242)
Thanks!
Description
When compiling a project with the toolchain 6.0 and main from May 14th the compiler with an assertion when type checking the Distributed Actor System implemention.
Project can be found here : https://github.com/martiall/swift-subprocess-distributedactors (commit 7ac9349) When compiling with the following toolchain included in Xcode 15.4 (15F31d), everything works fine.
Sorry I don't have a reduced version of the crash.
Reproduction
Clone https://github.com/martiall/swift-subprocess-distributedactors Checkout the commit
7ac9349
Compile the project withTOOLCHAINS=org.swift.600202405141a swiftc -version
Stack dump
Expected behavior
The compiler doesn't crash and the compilation succeed just like with the toolchain included in Xcode 15.4 (15F31d)
Environment
Apple Swift version 6.0-dev (LLVM 5b202efbc95a8bf, Swift a17d360d1cc66ab) Target: arm64-apple-macosx14.0
Additional information
No response