mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Using availability domains, reimplement the algorithm that determines whether a declaration is unavailable at runtime. The new algorithm takes ABI compatible platforms into account, ensuring that declarations that are available on iOS do not get treated as unreachable at runtime when compiling for visionOS. Resolves rdar://116742214.
27 lines
1.2 KiB
Swift
27 lines
1.2 KiB
Swift
// This test is checking that usage of an existential (which is normally
|
|
// disallowed in embedded Swift and flagged in IRGen) is left undiagnosed
|
|
// because the context is @_unavailableInEmbedded.
|
|
//
|
|
// The breakdown of that is
|
|
// - (1) @_unavailableInEmbedded makes the declaration unavailable,
|
|
// - (2) unavailable function bodies is removed in embedded Swift,
|
|
// - (3) the test() function is not reported by the existential checker.
|
|
|
|
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib -wmo | %FileCheck %s --check-prefix CHECK-NONEMBEDDED
|
|
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -wmo | %FileCheck %s --check-prefix CHECK-EMBEDDED
|
|
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo | %FileCheck %s --check-prefix CHECK-EMBEDDED
|
|
|
|
// REQUIRES: swift_in_compiler
|
|
// REQUIRES: swift_feature_Embedded
|
|
|
|
public protocol Player {}
|
|
struct Concrete: Player {}
|
|
|
|
@_unavailableInEmbedded
|
|
public func test() -> any Player {
|
|
Concrete() // no error because we're in unavailable-in-embedded context
|
|
}
|
|
|
|
// CHECK-NONEMBEDDED: $s4main4testAA6Player_pyF
|
|
// CHECK-EMBEDDED-NOT: $e4main4testAA6Player_pyF
|