Open LucianoPAlmeida opened 3 years ago
cc theindigamer (JIRA User)
I don't understand why, but if we constraint the generic arguments to objc convertible it runs fine, so maybe is just a runtime issue?
import Foundation
func a<K: NSObject, V: NSObject>(d: [K: V], p: @convention(thin) (K, V) -> Void) {
_ = d.lazy.map(p) // NO crash
p(d.first!.key, d.first!.value) // No crash.
}
let v = [1 as NSNumber: "1" as NSString]
a(d: v, p: { _,_ in })
print("finished")
I think this might be the same problem as https://bugs.swift.org/browse/SR-14058 , we should be emitting a compile-time error.
Maybe we should create an umbrella task for conversions between function conventions. Then this JIRA, SR-14058 and SR-14060 would all be sub-tasks of that.
I like the idea of creating an umbrella task =]
theindigamer (JIRA User) Here it is https://bugs.swift.org/browse/SR-14169
@swift-ci create
Attachment: Download
Environment
Xcode 12.3 (12C33)Additional Detail from JIRA
| | | |------------------|-----------------| |Votes | 0 | |Component/s | Compiler | |Labels | Sub-task | |Assignee | None | |Priority | Medium | md5: d343b7970380688af4185c9df548b637Parent-Task:
relates to:
Issue Description:
Both compiles fine, but crashes at runtime because of thick-to-thin conversion
Note: Removing @convention(thin) this executes fine
I think the compiler should emit a conversion mismatch diagnostic.
![](Screen Shot 2021-02-05 at 22.13.59.png)
![](Screen Shot 2021-02-05 at 22.09.57.png)