Skip to content

Commit 4318a36

Browse files
committed
Sema: Availability checking for variadic generic types
1 parent 0901790 commit 4318a36

27 files changed

+53
-24
lines changed

include/swift/AST/ASTContext.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,10 @@ class ASTContext final {
929929
/// needed to place array buffers into constant data sections.
930930
AvailabilityContext getImmortalRefCountSymbolsAvailability();
931931

932+
/// Get the runtime availability of runtime functions for
933+
/// variadic generic types.
934+
AvailabilityContext getVariadicGenericTypeAvailability();
935+
932936
/// Get the runtime availability of features introduced in the Swift 5.2
933937
/// compiler for the target platform.
934938
AvailabilityContext getSwift52Availability();

include/swift/AST/DiagnosticsSema.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6148,6 +6148,10 @@ ERROR(availability_parameterized_protocol_only_version_newer, none,
61486148
"%0 %1 or newer",
61496149
(StringRef, llvm::VersionTuple))
61506150

6151+
ERROR(availability_variadic_type_only_version_newer, none,
6152+
"parameter packs in generic types are only available in %0 %1 or newer",
6153+
(StringRef, llvm::VersionTuple))
6154+
61516155
NOTE(availability_guard_with_version_check, none,
61526156
"add 'if #available' version check", ())
61536157

lib/AST/Availability.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,11 @@ ASTContext::getImmortalRefCountSymbolsAvailability() {
518518
return getSwiftFutureAvailability();
519519
}
520520

521+
AvailabilityContext
522+
ASTContext::getVariadicGenericTypeAvailability() {
523+
return getSwift59Availability();
524+
}
525+
521526
AvailabilityContext ASTContext::getSwift52Availability() {
522527
auto target = LangOpts.Target;
523528

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,12 @@ static void checkGenericParams(GenericContext *ownerCtx) {
484484
decl->diagnose(diag::experimental_type_with_parameter_pack);
485485
}
486486

487+
TypeChecker::checkAvailability(
488+
gp->getSourceRange(),
489+
ownerCtx->getASTContext().getVariadicGenericTypeAvailability(),
490+
diag::availability_variadic_type_only_version_newer,
491+
ownerCtx);
492+
487493
if (hasPack) {
488494
gp->diagnose(diag::more_than_one_pack_in_type);
489495
}

test/Constraints/one_element_tuple.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics -disable-availability-checking
22

33
// REQUIRES: asserts
44

test/Constraints/variadic_generic_types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics -disable-availability-checking
22

33
// REQUIRES: asserts
44

test/DebugInfo/variadic-generics-count.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// REQUIRES: asserts
22
// RUN: %target-swift-frontend -emit-ir %s -g -o - \
3-
// RUN: -parse-as-library -module-name a -enable-experimental-feature VariadicGenerics | %FileCheck %s
3+
// RUN: -parse-as-library -module-name a -enable-experimental-feature VariadicGenerics -disable-availability-checking | %FileCheck %s
44

55
public func f1<each T>(ts: repeat each T) {
66
// CHECK: define {{.*}} @"$s1a2f12tsyxxQp_tRvzlF"(%swift.opaque** {{.*}}, i{{32|64}} [[COUNT1_1:.*]], %swift.type** {{.*}})

test/Generics/pack-shape-requirements.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-frontend -typecheck -enable-experimental-feature VariadicGenerics %s -debug-generic-signatures 2>&1 | %FileCheck %s
1+
// RUN: %target-swift-frontend -typecheck -enable-experimental-feature VariadicGenerics %s -debug-generic-signatures -disable-availability-checking 2>&1 | %FileCheck %s
22

33
// REQUIRES: asserts
44

test/Generics/variadic_generic_requirements.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics -disable-availability-checking
22

33
// REQUIRES: asserts
44

test/Generics/variadic_generic_types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics -disable-availability-checking
22

33
// Because of -enable-experimental-feature VariadicGenerics
44
// REQUIRES: asserts

0 commit comments

Comments
 (0)