Skip to content

Commit fa1e17f

Browse files
committed
Sema: Protocol conformance checking fixes for variadic generics
1 parent 8d12275 commit fa1e17f

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

lib/AST/RequirementEnvironment.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@ RequirementEnvironment::RequirementEnvironment(
108108
// invalid code.
109109
if (genericParam->getDepth() != 1)
110110
return Type();
111-
auto substGenericParam = GenericTypeParamType::get(
111+
Type substGenericParam = GenericTypeParamType::get(
112112
genericParam->isParameterPack(), depth, genericParam->getIndex(), ctx);
113+
if (genericParam->isParameterPack()) {
114+
substGenericParam = PackType::getSingletonPackExpansion(
115+
substGenericParam);
116+
}
113117
return substGenericParam;
114118
},
115119
[selfType, substConcreteType, conformance, conformanceDC, &ctx](

lib/Sema/TypeCheckProtocol.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,6 +1118,11 @@ swift::matchWitness(WitnessChecker::RequirementEnvironmentCache &reqEnvCache,
11181118
replacedInReq = syntheticEnv->mapTypeIntoContext(replacedInReq);
11191119
}
11201120

1121+
if (auto packType = replacedInReq->getAs<PackType>()) {
1122+
if (auto unwrapped = packType->unwrapSingletonPackExpansion())
1123+
replacedInReq = unwrapped->getPatternType();
1124+
}
1125+
11211126
cs->addConstraint(ConstraintKind::Bind, replacement.second, replacedInReq,
11221127
reqLocator);
11231128
}

0 commit comments

Comments
 (0)