崩溃并显示消息“Probled init with Take of Any Protocol.”

nbysray5  于 2022-10-04  发布在  Swift
关注(0)|答案(1)|浏览(135)

我有以下非常简单的代码:

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 GenerationOptimization LevelOptimize 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 ()

知道为什么吗?这是不是优化器中的错误?

jtoj6r0c

jtoj6r0c1#

这似乎是SWIFT的一个漏洞。我已经报告了,所以我会跟踪进度的

https://github.com/apple/swift/issues/61403

相关问题