Skip to content

Commit 16b9654

Browse files
committed
[ConstraintSystem] Use specific locators when matching pack types.
1 parent 72d87b5 commit 16b9654

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

lib/Sema/CSSimplify.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2423,14 +2423,17 @@ static PackType *replaceTypeVariablesWithFreshPacks(ConstraintSystem &cs,
24232423
// wrapping a pack type variable. Otherwise, create a new scalar
24242424
// type variable.
24252425
//
2426-
// FIXME: Locator for diagnostics
24272426
// FIXME: Other TVO_* flags for type variables?
2427+
auto elementLoc = cs.getConstraintLocator(loc,
2428+
LocatorPathElt::PackElement(freshTypeVars.size()));
24282429
if (packExpansionElt != nullptr) {
2429-
auto *freshTypeVar = cs.createTypeVariable(loc, TVO_CanBindToPack);
2430+
auto *freshTypeVar =
2431+
cs.createTypeVariable(elementLoc, TVO_CanBindToPack);
24302432
freshTypeVars.push_back(PackExpansionType::get(
24312433
freshTypeVar, packExpansionElt->getCountType()));
24322434
} else {
2433-
freshTypeVars.push_back(cs.createTypeVariable(loc, /*options=*/0));
2435+
freshTypeVars.push_back(
2436+
cs.createTypeVariable(elementLoc, /*options=*/0));
24342437
}
24352438
}
24362439
}
@@ -2483,7 +2486,6 @@ static PackType *replaceTypeVariablesWithFreshPacks(ConstraintSystem &cs,
24832486
// Bind each pack type variable occurring in the pattern type to its
24842487
// binding pack that was constructed above.
24852488
for (const auto &pair : typeVars) {
2486-
// FIXME: Locator for diagnostics
24872489
cs.addConstraint(ConstraintKind::Bind,
24882490
pair.first, PackType::get(ctx, pair.second), locator);
24892491
}
@@ -2521,7 +2523,6 @@ ConstraintSystem::matchPackExpansionTypes(PackExpansionType *expansion1,
25212523
if (auto *pack2 = pattern2->getAs<PackType>()) {
25222524
if (auto *pack1 = replaceTypeVariablesWithFreshPacks(
25232525
*this, pattern1, pack2, locator)) {
2524-
// FIXME: Locator for diagnostics.
25252526
addConstraint(kind, pack1, pack2, locator);
25262527
return getTypeMatchSuccess();
25272528
}
@@ -2537,7 +2538,6 @@ ConstraintSystem::matchPackExpansionTypes(PackExpansionType *expansion1,
25372538
if (auto *pack1 = pattern1->getAs<PackType>()) {
25382539
if (auto *pack2 = replaceTypeVariablesWithFreshPacks(
25392540
*this, pattern2, pack1, locator)) {
2540-
// FIXME: Locator for diagnostics.
25412541
addConstraint(kind, pack1, pack2, locator);
25422542
return getTypeMatchSuccess();
25432543
}
@@ -6849,8 +6849,6 @@ ConstraintSystem::matchTypes(Type type1, Type type2, ConstraintKind kind,
68496849
kind, subflags, packLoc);
68506850
}
68516851
case TypeKind::PackExpansion: {
6852-
// FIXME: Need a new locator element
6853-
68546852
auto expansion1 = cast<PackExpansionType>(desugar1);
68556853
auto expansion2 = cast<PackExpansionType>(desugar2);
68566854

lib/Sema/ConstraintLocator.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,9 +436,11 @@ void LocatorPathElt::dump(raw_ostream &out) const {
436436
break;
437437
}
438438

439-
case ConstraintLocator::ConstraintLocator::PackType:
440-
out << "pack type";
439+
case ConstraintLocator::ConstraintLocator::PackType: {
440+
auto packElt = elt.castTo<LocatorPathElt::PackType>();
441+
out << "pack type '" << packElt.getType()->getString(PO) << "'";
441442
break;
443+
}
442444

443445
case ConstraintLocator::PackElement: {
444446
auto packElt = elt.castTo<LocatorPathElt::PackElement>();

0 commit comments

Comments
 (0)