@@ -9313,11 +9313,7 @@ ConstraintSystem::simplifyPackElementOfConstraint(Type first, Type second,
93139313 }
93149314
93159315 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);
93219317 addConstraint(ConstraintKind::PackElementOf, elementType, packVar, locator);
93229318 return SolutionKind::Solved;
93239319 }
@@ -13440,6 +13436,12 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyShapeOfConstraint(
1344013436 return SolutionKind::Solved;
1344113437 }
1344213438
13439+ if (isSingleUnlabeledPackExpansionTuple(packTy)) {
13440+ auto *packVar = addMaterializePackExpansionConstraint(packTy, locator);
13441+ addConstraint(ConstraintKind::ShapeOf, shapeTy, packVar, locator);
13442+ return SolutionKind::Solved;
13443+ }
13444+
1344313445 // Map element archetypes to the pack context to check for equality.
1344413446 if (packTy->hasElementArchetype()) {
1344513447 auto *packEnv = DC->getGenericEnvironmentOfContext();
@@ -15623,6 +15625,16 @@ void ConstraintSystem::addExplicitConversionConstraint(
1562315625 addDisjunctionConstraint(constraints, locator, rememberChoice);
1562415626}
1562515627
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+
1562615638ConstraintSystem::SolutionKind
1562715639ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
1562815640 auto matchKind = constraint.getKind();
0 commit comments