@@ -9313,11 +9313,7 @@ ConstraintSystem::simplifyPackElementOfConstraint(Type first, Type second,
9313
9313
}
9314
9314
9315
9315
if (isSingleUnlabeledPackExpansionTuple(patternType)) {
9316
- auto *packVar =
9317
- createTypeVariable(getConstraintLocator(locator), TVO_CanBindToPack);
9318
- addConstraint(ConstraintKind::MaterializePackExpansion, patternType,
9319
- packVar,
9320
- getConstraintLocator(locator, {ConstraintLocator::Member}));
9316
+ auto *packVar = addMaterializePackExpansionConstraint(patternType, locator);
9321
9317
addConstraint(ConstraintKind::PackElementOf, elementType, packVar, locator);
9322
9318
return SolutionKind::Solved;
9323
9319
}
@@ -13440,6 +13436,12 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyShapeOfConstraint(
13440
13436
return SolutionKind::Solved;
13441
13437
}
13442
13438
13439
+ if (isSingleUnlabeledPackExpansionTuple(packTy)) {
13440
+ auto *packVar = addMaterializePackExpansionConstraint(packTy, locator);
13441
+ addConstraint(ConstraintKind::ShapeOf, shapeTy, packVar, locator);
13442
+ return SolutionKind::Solved;
13443
+ }
13444
+
13443
13445
// Map element archetypes to the pack context to check for equality.
13444
13446
if (packTy->hasElementArchetype()) {
13445
13447
auto *packEnv = DC->getGenericEnvironmentOfContext();
@@ -15623,6 +15625,16 @@ void ConstraintSystem::addExplicitConversionConstraint(
15623
15625
addDisjunctionConstraint(constraints, locator, rememberChoice);
15624
15626
}
15625
15627
15628
+ TypeVariableType *ConstraintSystem::addMaterializePackExpansionConstraint(
15629
+ Type patternType, ConstraintLocatorBuilder locator) {
15630
+ assert(isSingleUnlabeledPackExpansionTuple(patternType));
15631
+ TypeVariableType *packVar =
15632
+ createTypeVariable(getConstraintLocator(locator), TVO_CanBindToPack);
15633
+ addConstraint(ConstraintKind::MaterializePackExpansion, patternType, packVar,
15634
+ getConstraintLocator(locator, {ConstraintLocator::Member}));
15635
+ return packVar;
15636
+ }
15637
+
15626
15638
ConstraintSystem::SolutionKind
15627
15639
ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
15628
15640
auto matchKind = constraint.getKind();
0 commit comments