Skip to content

Commit 8d12275

Browse files
committed
AST: Fix getTypeOfMemberSubstitutions() for variadic generics
1 parent 2068dc8 commit 8d12275

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

lib/AST/Type.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5119,12 +5119,18 @@ TypeSubstitutionMap TypeBase::getMemberSubstitutions(
51195119
if (innerDC->isInnermostContextGeneric()) {
51205120
if (auto sig = innerDC->getGenericSignatureOfContext()) {
51215121
for (auto param : sig.getInnermostGenericParams()) {
5122-
auto *genericParam = param->getCanonicalType()
5123-
->castTo<GenericTypeParamType>();
5124-
substitutions[genericParam] =
5125-
(genericEnv
5126-
? genericEnv->mapTypeIntoContext(param)
5127-
: param);
5122+
Type substGenericParam = param;
5123+
if (param->isParameterPack()) {
5124+
substGenericParam = PackType::getSingletonPackExpansion(
5125+
param);
5126+
}
5127+
if (genericEnv) {
5128+
substGenericParam = genericEnv->mapTypeIntoContext(
5129+
substGenericParam);
5130+
}
5131+
5132+
auto *key = param->getCanonicalType()->castTo<GenericTypeParamType>();
5133+
substitutions[key] = substGenericParam;
51285134
}
51295135
}
51305136
}

0 commit comments

Comments
 (0)