Files
swift-mirror/validation-test/compiler_crashers_2_fixed/issue-54913.swift

57 lines
1.3 KiB
Swift

// RUN: %target-swift-frontend -emit-ir %s
// https://github.com/apple/swift/issues/54913
protocol Dismissable {
func dismiss(completion: @escaping () -> Void)
}
typealias Completion = (Dismissable?) -> Void
protocol Cancelable: AnyObject {
func cancel()
}
protocol Controller {
func asyncThing(completion: @escaping ((_ error: Error) -> Void)) -> Cancelable
}
public struct Message: Equatable {
public static let `default` = Message()
public init() {
}
public init(error: Error) {
self = .default
}
}
struct PresentAlert {
let message: Message
}
class Manager {
private let controller: Controller
init(controller: Controller) {
self.controller = controller
}
func present() {
let _: Completion = { (dismissable: Dismissable?) in
dismissable?.dismiss { [weak self] in
guard let sself = self else { return }
sself.controller.asyncThing { error in
let backupMessage = Message()
let mainMessage = Message(error: error)
let finalMessage = mainMessage != Message.default ? mainMessage : backupMessage
_ = PresentAlert(message: finalMessage)
}.cancel()
}
}
}
}