Files
swift-mirror/test/IRGen/availability_custom_domains.swift
Allan Shortlidge 3d722e1919 ClangImporter: Generate and call custom availability domain predicates.
When importing custom availability domains with dynamic predicates from Clang
modules, synthesize predicate functions for `if #available` queries and call
them when generating SIL.

Resolves rdar://138441312.
2025-07-10 08:15:01 -07:00

64 lines
1.8 KiB
Swift

// RUN: %target-swift-emit-irgen -module-name Test %s -verify \
// RUN: -enable-experimental-feature CustomAvailability \
// RUN: -define-enabled-availability-domain EnabledDomain \
// RUN: -define-disabled-availability-domain DisabledDomain \
// RUN: -Onone | %FileCheck %s --check-prefixes=CHECK
// RUN: %target-swift-emit-irgen -module-name Test %s -verify \
// RUN: -enable-experimental-feature CustomAvailability \
// RUN: -define-enabled-availability-domain EnabledDomain \
// RUN: -define-disabled-availability-domain DisabledDomain \
// RUN: -O | %FileCheck %s --check-prefixes=CHECK
// REQUIRES: swift_feature_CustomAvailability
@_silgen_name("always")
public func always()
@_silgen_name("never")
public func never()
// CHECK-LABEL: define {{.*}}swiftcc void @"$s4Test24ifAvailableEnabledDomainyyF"()
// CHECK: call swiftcc void @always()
// CHECK-NOT: call swiftcc void @never()
public func ifAvailableEnabledDomain() {
if #available(EnabledDomain) {
always()
} else {
never()
}
}
// CHECK-LABEL: define {{.*}}swiftcc void @"$s4Test25ifAvailableDisabledDomainyyF"()
// CHECK-NOT: call swiftcc void @never()
// CHECK: call swiftcc void @always()
public func ifAvailableDisabledDomain() {
if #available(DisabledDomain) {
never()
} else {
always()
}
}
// CHECK-LABEL: define {{.*}}swiftcc void @"$s4Test26ifUnavailableEnabledDomainyyF"()
// CHECK-NOT: call swiftcc void @never()
// CHECK: call swiftcc void @always()
public func ifUnavailableEnabledDomain() {
if #unavailable(EnabledDomain) {
never()
} else {
always()
}
}
// CHECK-LABEL: define {{.*}}swiftcc void @"$s4Test27ifUnavailableDisabledDomainyyF"()
// CHECK: call swiftcc void @always()
// CHECK-NOT: call swiftcc void @never()
public func ifUnavailableDisabledDomain() {
if #unavailable(DisabledDomain) {
always()
} else {
never()
}
}