swiftlang/swift

Passing class-constrained type as AnyObject instance behavior is not matched on Darwin and non-Darwin platform

Open

#70,645 opened on Dec 28, 2023

View on GitHub
 (16 comments) (0 reactions) (0 assignees)Swift (10,719 forks)batch import
buggood first issueswift 5.9type checker

Repository metrics

Stars
 (69,989 stars)
PR merge metrics
 (Avg merge 8d 17h) (510 merged PRs in 30d)

Description

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

Contributor guide