Skip to content

Commit b6f8f81

Browse files
committed
Sema: Don't allow PackExpansionType in the generic arguments of a ParameterizedProtocolType
We already had a separate TypeResolverContext::ProtocolGenericArgument that did not allow PackExpansionTypes, but it was never used. Fixes rdar://problem/115538574.
1 parent 5990158 commit b6f8f81

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

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)