swift: Passing class-constrained type as AnyObject instance behavior is not matched on Darwin and non-Darwin platform
Description
Passing class-constrained type as AnyObject instance behavior is not matched on Darwin and non-Darwin platform
On Darwin platform, we can pass it directly.
On non-Darwin platform, a fatalError will be emitted - “error: argument type ‘Self.Type’ expected to be an instance of a class or class-constrained type”. And we can workaround it by manually adding “as AnyObject”
test1(Self.self as AnyObject)
Reproduction
class X {
func test1(_ o: AnyObject) {}
func test12() { test1(Self.self) }
}
Expected behavior
The behavior is matched. (The current Darwin platform behavior is preferred.)
Environment
Linux: swift --version Swift version 5.9.2 (swift-5.9.2-RELEASE) Target: aarch64-unknown-linux-gnu
macOS: swift-driver version: 1.87.1 Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1) Target: arm64-apple-macosx14.0
Additional information
Forum Post about the issue: https://forums.swift.org/t/69190
About this issue
- Original URL
- State: open
- Created 6 months ago
- Comments: 15 (6 by maintainers)
The dynamic Self type inside a class is always convertible to AnyObject, regardless of Objective-C interop. This is a type checker bug.