mirror of
https://github.com/apple/swift.git
synced 2026-10-24 20:15:56 +02:00
`getAvailability()` walks the semantic availability attributes of a declaration and records whether the symbol is unavailable or SPI on the target platform. Any attribute that is not platform specific was treated as a fallback that applies to every platform, which meant that attributes in custom availability domains were mishandled. Resolves rdar://185433691.
54 lines
2.3 KiB
Swift
54 lines
2.3 KiB
Swift
// REQUIRES: objc_interop, OS=macosx
|
|
// REQUIRES: swift_feature_CustomAvailability
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend %s -typecheck -parse-as-library -module-name MyModule -swift-version 5 \
|
|
// RUN: -enable-library-evolution -library-level api -emit-api-descriptor-path %t/api.json \
|
|
// RUN: -enable-experimental-feature CustomAvailability \
|
|
// RUN: -define-enabled-availability-domain EnabledDomain \
|
|
// RUN: -define-disabled-availability-domain DisabledDomain \
|
|
// RUN: -define-dynamic-availability-domain DynamicDomain
|
|
// RUN: %validate-json %t/api.json | %FileCheck %s
|
|
|
|
@available(DisabledDomain, unavailable)
|
|
public func unavailableInDisabledDomain() {}
|
|
|
|
@available(DynamicDomain, unavailable)
|
|
public func unavailableInDynamicDomain() {}
|
|
|
|
@available(EnabledDomain)
|
|
@available(*, unavailable)
|
|
public func domainThenUniversallyUnavailable() {}
|
|
|
|
@available(*, unavailable)
|
|
@available(EnabledDomain)
|
|
public func universallyUnavailableThenDomain() {}
|
|
|
|
// CHECK: "globals": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "name": "_$s8MyModule26unavailableInDynamicDomainyyF",
|
|
// CHECK-NEXT: "access": "public",
|
|
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/availability_custom_domains.swift",
|
|
// CHECK-NEXT: "linkage": "exported"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "name": "_$s8MyModule27unavailableInDisabledDomainyyF",
|
|
// CHECK-NEXT: "access": "public",
|
|
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/availability_custom_domains.swift",
|
|
// CHECK-NEXT: "linkage": "exported"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "name": "_$s8MyModule32domainThenUniversallyUnavailableyyF",
|
|
// CHECK-NEXT: "access": "public",
|
|
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/availability_custom_domains.swift",
|
|
// CHECK-NEXT: "linkage": "exported",
|
|
// CHECK-NEXT: "unavailable": true
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "name": "_$s8MyModule32universallyUnavailableThenDomainyyF",
|
|
// CHECK-NEXT: "access": "public",
|
|
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/availability_custom_domains.swift",
|
|
// CHECK-NEXT: "linkage": "exported",
|
|
// CHECK-NEXT: "unavailable": true
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|