Skip to content

Commit b3a3abe

Browse files
authored
Merge pull request #68647 from slavapestov/fix-rdar115538574
Sema: Don't allow PackExpansionType in the generic arguments of a ParameterizedProtocolType
2 parents b5f44de + b6f8f81 commit b3a3abe

File tree

4 files changed

+13
-1
lines changed

4 files changed

+13
-1
lines changed

lib/AST/RequirementMachine/InterfaceType.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ RewriteContext::getRelativeSubstitutionSchemaFromType(
559559
ArrayRef<Term> substitutions,
560560
SmallVectorImpl<Term> &result) {
561561
assert(!concreteType->isTypeParameter() && "Must have a concrete type here");
562+
assert(!concreteType->is<PackExpansionType>());
562563

563564
if (!concreteType->hasTypeParameter())
564565
return concreteType;
@@ -604,6 +605,7 @@ RewriteContext::getSubstitutionSchemaFromType(CanType concreteType,
604605
const ProtocolDecl *proto,
605606
SmallVectorImpl<Term> &result) {
606607
assert(!concreteType->isTypeParameter() && "Must have a concrete type here");
608+
assert(!concreteType->is<PackExpansionType>());
607609

608610
if (!concreteType->hasTypeParameter())
609611
return concreteType;

lib/Sema/TypeCheckType.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ static Type applyGenericArguments(Type type, TypeResolution resolution,
806806
if (options.is(TypeResolverContext::ExistentialConstraint))
807807
options |= TypeResolutionFlags::DisallowOpaqueTypes;
808808
auto argOptions = options.withoutContext().withContext(
809-
TypeResolverContext::GenericArgument);
809+
TypeResolverContext::ProtocolGenericArgument);
810810
auto genericResolution = resolution.withOptions(argOptions);
811811

812812
SmallVector<Type, 2> argTys;

test/Generics/rdar115538574.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
protocol P<A> {
4+
associatedtype A
5+
}
6+
7+
func f<each T>(_: some P<repeat each T>) {}
8+
// expected-error@-1 {{pack expansion 'repeat each T' can only appear in a function parameter list, tuple element, or generic argument list}}
9+
// expected-error@-2 {{generic parameter 'T' is not used in function signature}}

test/type/pack_expansion.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ protocol P<T> {
1515
}
1616

1717
func f4<each T>() -> any P<repeat each T> {}
18+
// expected-error@-1 {{pack expansion 'repeat each T' can only appear in a function parameter list, tuple element, or generic argument list}}
1819

1920
typealias T1<each T> = repeat each T
2021
// expected-error@-1 {{pack expansion 'repeat each T' can only appear in a function parameter list, tuple element, or generic argument list}}

0 commit comments

Comments
 (0)