Skip to content

Commit 430f84c

Browse files
committed
Sema: Availability checking for variadic generic types
1 parent 6f7d747 commit 430f84c

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
@@ -918,6 +918,10 @@ class ASTContext final {
918918
/// needed to place array buffers into constant data sections.
919919
AvailabilityContext getImmortalRefCountSymbolsAvailability();
920920

921+
/// Get the runtime availability of runtime functions for
922+
/// variadic generic types.
923+
AvailabilityContext getVariadicGenericTypeAvailability();
924+
921925
/// Get the runtime availability of features introduced in the Swift 5.2
922926
/// compiler for the target platform.
923927
AvailabilityContext getSwift52Availability();

include/swift/AST/DiagnosticsSema.def

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

6146+
ERROR(availability_variadic_type_only_version_newer, none,
6147+
"parameter packs in generic types are only available in %0 %1 or newer",
6148+
(StringRef, llvm::VersionTuple))
6149+
61466150
NOTE(availability_guard_with_version_check, none,
61476151
"add 'if #available' version check", ())
61486152

lib/AST/Availability.cpp

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

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

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
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-feature VariadicGenerics
2+
3+
// Because of -enable-experimental-feature VariadicGenerics
4+
// REQUIRES: asserts
5+
6+
// REQUIRES: OS=macosx
7+
8+
struct G<each T> {}
9+
// expected-note@-1 {{add @available attribute to enclosing generic struct}}
10+
// expected-error@-2 {{parameter packs in generic types are only available in macOS 99.99.0 or newer}}

test/IRGen/pack_archetype_canonicalization.swift

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

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

test/IRGen/variadic_generic_fulfillment.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-frontend -emit-ir %s -enable-experimental-feature VariadicGenerics | %FileCheck %s -DINT=i%target-ptrsize
1+
// RUN: %target-swift-frontend -emit-ir %s -enable-experimental-feature VariadicGenerics -disable-availability-checking | %FileCheck %s -DINT=i%target-ptrsize
22

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

test/IRGen/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-swift-frontend -emit-ir -primary-file %s -enable-experimental-feature VariadicGenerics | %FileCheck %s
1+
// RUN: %target-swift-frontend -emit-ir -primary-file %s -enable-experimental-feature VariadicGenerics -disable-availability-checking | %FileCheck %s
22

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

test/Interpreter/variadic_generic_conformances.swift

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

33
// REQUIRES: executable_test
44

test/Interpreter/variadic_generic_types.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-run-simple-swift(-enable-experimental-feature VariadicGenerics -Xfrontend -disable-concrete-type-metadata-mangled-name-accessors)
2-
// RUN: %target-run-simple-swift(-enable-experimental-feature VariadicGenerics)
1+
// RUN: %target-run-simple-swift(-enable-experimental-feature VariadicGenerics -Xfrontend -disable-concrete-type-metadata-mangled-name-accessors -Xfrontend -disable-availability-checking)
2+
// RUN: %target-run-simple-swift(-enable-experimental-feature VariadicGenerics -Xfrontend -disable-availability-checking)
33

44
// REQUIRES: executable_test
55

test/ModuleInterface/pack_expansion_type.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-swift-emit-module-interface(%t/PackExpansionType.swiftinterface) %s -module-name PackExpansionType -enable-experimental-feature VariadicGenerics
2+
// RUN: %target-swift-emit-module-interface(%t/PackExpansionType.swiftinterface) %s -module-name PackExpansionType -enable-experimental-feature VariadicGenerics -disable-availability-checking
33
// RUN: %FileCheck %s < %t/PackExpansionType.swiftinterface
44

55
// Experimental features require an asserts compiler

test/Parse/type_parameter_packs.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/SILGen/pack_expansion_type.swift

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

33
// Experimental features require an asserts compiler
44
// REQUIRES: asserts

test/SILGen/variadic-generic-closures.swift

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

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

test/SILGen/variadic-generic-tuples.swift

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

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

test/SILGen/variadic-generic-vanishing-tuples.swift

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

33
// rdar://107459964
44
// rdar://107478603

test/SILGen/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-swift-emit-silgen %s -enable-experimental-feature VariadicGenerics
1+
// RUN: %target-swift-emit-silgen %s -enable-experimental-feature VariadicGenerics -disable-availability-checking
22

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

test/Serialization/pack_expansion_type.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-swift-frontend %S/Inputs/pack_expansion_type_other.swift -emit-module -emit-module-path %t/pack_expansion_type_other.swiftmodule -enable-experimental-feature VariadicGenerics
3-
// RUN: %target-typecheck-verify-swift -I %t -enable-experimental-feature VariadicGenerics
2+
// RUN: %target-swift-frontend %S/Inputs/pack_expansion_type_other.swift -emit-module -emit-module-path %t/pack_expansion_type_other.swiftmodule -enable-experimental-feature VariadicGenerics -disable-availability-checking
3+
// RUN: %target-typecheck-verify-swift -I %t -enable-experimental-feature VariadicGenerics -disable-availability-checking
44

55
// Experimental features require an asserts compiler
66
// REQUIRES: asserts

test/TypeDecoder/variadic_nominal_types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %empty-directory(%t)
22

3-
// RUN: %target-build-swift -emit-executable %s -g -o %t/variadic_nominal_types -emit-module -enable-experimental-feature VariadicGenerics
3+
// RUN: %target-build-swift -emit-executable %s -g -o %t/variadic_nominal_types -emit-module -enable-experimental-feature VariadicGenerics -Xfrontend -disable-availability-checking
44

55
// RUN: sed -ne '/\/\/ *DEMANGLE-TYPE: /s/\/\/ *DEMANGLE-TYPE: *//p' < %s > %t/input
66
// RUN: %lldb-moduleimport-test-with-sdk %t/variadic_nominal_types -type-from-mangled=%t/input | %FileCheck %s --check-prefix=CHECK-TYPE

test/decl/protocol/conforms/variadic_generic_type.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

test/type/pack_expansion.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

0 commit comments

Comments
 (0)