Skip to content

Commit 16dee38

Browse files
committed
AST/Basic: Introduce the StandaloneSwiftAvailability experimental feature.
This experimental feature will be used to force the compiler to treat `Swift` runtime availability as separate from platform availability when compiling for targets that have the Swift runtime built-in.
1 parent 46ce02b commit 16dee38

File tree

8 files changed

+24
-13
lines changed

8 files changed

+24
-13
lines changed

include/swift/Basic/Features.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,10 @@ SUPPRESSIBLE_EXPERIMENTAL_FEATURE(InlineAlways, false)
555555
/// Allow use of 'Swift' (Swift runtime version) in @available attributes
556556
EXPERIMENTAL_FEATURE(SwiftRuntimeAvailability, true)
557557

558+
/// 'Swift' availability is always standalone, even when targeting platforms
559+
/// that have a built-in Swift runtime. Implies 'SwiftRuntimeAvailability'.
560+
EXPERIMENTAL_FEATURE(StandaloneSwiftAvailability, true)
561+
558562
/// Allow use of `~Sendable`.
559563
SUPPRESSIBLE_EXPERIMENTAL_FEATURE(TildeSendable, false)
560564

lib/AST/FeatureSet.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ static bool usesFeatureInlineAlways(Decl *decl) {
448448
}
449449

450450
UNINTERESTING_FEATURE(SwiftRuntimeAvailability)
451+
UNINTERESTING_FEATURE(StandaloneSwiftAvailability)
451452

452453
static bool usesFeatureTildeSendable(Decl *decl) {
453454
auto *TD = dyn_cast<TypeDecl>(decl);

lib/Frontend/CompilerInvocation.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -939,9 +939,15 @@ static bool ParseEnabledFeatureArgs(LangOptions &Opts, ArgList &Args,
939939
if (!seenFeatures.insert(*feature).second)
940940
continue;
941941

942+
bool forMigration = featureMode.has_value();
943+
942944
// Enable the feature if requested.
943945
if (isEnableFeatureFlag)
944-
Opts.enableFeature(*feature, /*forMigration=*/featureMode.has_value());
946+
Opts.enableFeature(*feature, forMigration);
947+
948+
// 'StandaloneSwiftAvailability' implies 'SwiftRuntimeAvailability'
949+
if (*feature == Feature::StandaloneSwiftAvailability)
950+
Opts.enableFeature(Feature::SwiftRuntimeAvailability, forMigration);
945951
}
946952

947953
// Since pseudo-features don't have a boolean on/off state, process them in

test/Availability/availability_swift_runtime.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// RUN: %target-typecheck-verify-swift -parse-as-library -enable-experimental-feature SwiftRuntimeAvailability -min-swift-runtime-version 5.5
1+
// RUN: %target-typecheck-verify-swift -parse-as-library -enable-experimental-feature StandaloneSwiftAvailability -min-swift-runtime-version 5.5
22

3-
// REQUIRES: swift_feature_SwiftRuntimeAvailability
3+
// REQUIRES: swift_feature_StandaloneSwiftAvailability
44

55
@available(Swift 5.0, *)
66
func availableInSwift5_0Runtime() { }

test/IRGen/availability_swift_runtime.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// RUN: %target-swift-emit-ir %s -min-swift-runtime-version 5.0 -O -enable-experimental-feature SwiftRuntimeAvailability | %FileCheck %s
1+
// RUN: %target-swift-emit-ir %s -min-swift-runtime-version 5.0 -O -enable-experimental-feature StandaloneSwiftAvailability | %FileCheck %s
22

3-
// REQUIRES: swift_feature_SwiftRuntimeAvailability
3+
// REQUIRES: swift_feature_StandaloneSwiftAvailability
44

55
@_silgen_name("callMeMaybe")
66
public func callMeMaybe()

test/SILGen/availability_query_swift_runtime.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// RUN: %target-swift-emit-sil %s -min-swift-runtime-version 5.0 -verify -enable-experimental-feature SwiftRuntimeAvailability
2-
// RUN: %target-swift-emit-silgen %s -min-swift-runtime-version 5.0 -enable-experimental-feature SwiftRuntimeAvailability | %FileCheck %s
1+
// RUN: %target-swift-emit-sil %s -min-swift-runtime-version 5.0 -verify -enable-experimental-feature StandaloneSwiftAvailability
2+
// RUN: %target-swift-emit-silgen %s -min-swift-runtime-version 5.0 -enable-experimental-feature StandaloneSwiftAvailability | %FileCheck %s
33

4-
// REQUIRES: swift_feature_SwiftRuntimeAvailability
4+
// REQUIRES: swift_feature_StandaloneSwiftAvailability
55

66
// CHECK-LABEL: sil [ossa] @$s32availability_query_swift_runtime15testIfAvailableyyF : $@convention(thin) () -> () {
77
// CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 6

test/SILGen/availability_query_swift_runtime_maccatalyst_zippered.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
// RUN: %target-swift-emit-sil %s -target %target-cpu-apple-macosx11 -target-variant %target-cpu-apple-ios14-macabi -min-swift-runtime-version 5.0 -verify -enable-experimental-feature SwiftRuntimeAvailability
2-
// RUN: %target-swift-emit-silgen %s -target %target-cpu-apple-macosx11 -target-variant %target-cpu-apple-ios14-macabi -min-swift-runtime-version 5.0 -enable-experimental-feature SwiftRuntimeAvailability | %FileCheck %s
1+
// RUN: %target-swift-emit-sil %s -target %target-cpu-apple-macosx11 -target-variant %target-cpu-apple-ios14-macabi -min-swift-runtime-version 5.0 -verify -enable-experimental-feature StandaloneSwiftAvailability
2+
// RUN: %target-swift-emit-silgen %s -target %target-cpu-apple-macosx11 -target-variant %target-cpu-apple-ios14-macabi -min-swift-runtime-version 5.0 -enable-experimental-feature StandaloneSwiftAvailability | %FileCheck %s
33

44
// REQUIRES: OS=macosx || OS=maccatalyst
5-
// REQUIRES: swift_feature_SwiftRuntimeAvailability
5+
// REQUIRES: swift_feature_StandaloneSwiftAvailability
66

77
// CHECK-LABEL: sil [ossa] @$s53availability_query_swift_runtime_maccatalyst_zippered15testIfAvailableyyF : $@convention(thin) () -> () {
88
// CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 6

test/attr/attr_availability_swift_runtime.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// RUN: %target-typecheck-verify-swift -swift-version 5 -parse-as-library -enable-experimental-feature SwiftRuntimeAvailability
1+
// RUN: %target-typecheck-verify-swift -swift-version 5 -parse-as-library -enable-experimental-feature StandaloneSwiftAvailability
22

3-
// REQUIRES: swift_feature_SwiftRuntimeAvailability
3+
// REQUIRES: swift_feature_StandaloneSwiftAvailability
44

55
@available(Swift 6, *)
66
func availableInSwiftRuntime6Short() { }

0 commit comments

Comments
 (0)