我有以下非常简单的代码:
protocol Delegate<T> {
associatedtype T
func f(t: T)
}
class ConcreteClass: Delegate {
func f(t: Int) { }
}
class A<T> {
private let delegate: any Delegate<T>
init(delegate: any Delegate<T>) {
self.delegate = delegate
}
}
let a = A(delegate: ConcreteClass())
如果它在调试模式下运行,并且一切正常。但是,如果在发行版中运行或Swift Compiler - Code Generation
的Optimization Level
是Optimize for Speed [-O]
,则它会崩溃,并显示以下信息:
# 0 0x0000000100003b49 in outlined init with take of any Delegate<Self.Delegate.T == Int> ()
# 1 0x0000000100003ac4 in specialized A.init(delegate:) [inlined] at /Users/plamen/Projects/Tests/TestCrash2/TestCrash2/main.swift:25
# 2 0x0000000100003ab7 in specialized A.__allocating_init(delegate:) [inlined] at /Users/plamen/Projects/Tests/TestCrash2/TestCrash2/main.swift:24
# 3 0x0000000100003a96 in main at /Users/plamen/Projects/Tests/TestCrash2/TestCrash2/main.swift:29
# 4 0x000000010001952e in start ()
知道为什么吗?这是不是优化器中的错误?
1条答案
按热度按时间jtoj6r0c1#
这似乎是SWIFT的一个漏洞。我已经报告了,所以我会跟踪进度的
https://github.com/apple/swift/issues/61403