Skip to content

Commit f2abfc5

Browse files
committed
[ConstraintSystem] Add requirement kind to conditional conformance requirement locator
1 parent 6754b86 commit f2abfc5

File tree

3 files changed

+31
-24
lines changed

3 files changed

+31
-24
lines changed

lib/Sema/CSSimplify.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2691,10 +2691,10 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyConformsToConstraint(
26912691
if (conformance.isConcrete()) {
26922692
unsigned index = 0;
26932693
for (const auto &req : conformance.getConditionalRequirements()) {
2694-
addConstraint(
2695-
req,
2696-
locator.withPathElement(
2697-
LocatorPathElt::getConditionalRequirementComponent(index++)));
2694+
addConstraint(req,
2695+
locator.withPathElement(
2696+
LocatorPathElt::getConditionalRequirementComponent(
2697+
index++, req.getKind())));
26982698
}
26992699
}
27002700

lib/Sema/ConstraintLocator.cpp

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,25 @@ void ConstraintLocator::dump(SourceManager *sm, raw_ostream &out) {
106106
}
107107
}
108108

109+
auto dumpReqKind = [&out](RequirementKind kind) {
110+
out << " (";
111+
switch (kind) {
112+
case RequirementKind::Conformance:
113+
out << "conformance";
114+
break;
115+
case RequirementKind::Superclass:
116+
out << "superclass";
117+
break;
118+
case RequirementKind::SameType:
119+
out << "same-type";
120+
break;
121+
case RequirementKind::Layout:
122+
out << "layout";
123+
break;
124+
}
125+
out << ")";
126+
};
127+
109128
for (auto elt : getPath()) {
110129
out << " -> ";
111130
switch (elt.getKind()) {
@@ -222,26 +241,12 @@ void ConstraintLocator::dump(SourceManager *sm, raw_ostream &out) {
222241

223242
case ConditionalRequirement:
224243
out << "conditional requirement #" << llvm::utostr(elt.getValue());
244+
dumpReqKind(static_cast<RequirementKind>(elt.getValue2()));
225245
break;
226246

227247
case TypeParameterRequirement: {
228-
out << "type parameter requirement #" << llvm::utostr(elt.getValue())
229-
<< " (";
230-
switch (static_cast<RequirementKind>(elt.getValue2())) {
231-
case RequirementKind::Conformance:
232-
out << "conformance";
233-
break;
234-
case RequirementKind::Superclass:
235-
out << "superclass";
236-
break;
237-
case RequirementKind::SameType:
238-
out << "same-type";
239-
break;
240-
case RequirementKind::Layout:
241-
out << "layout";
242-
break;
243-
}
244-
out << ")";
248+
out << "type parameter requirement #" << llvm::utostr(elt.getValue());
249+
dumpReqKind(static_cast<RequirementKind>(elt.getValue2()));
245250
break;
246251
}
247252

lib/Sema/ConstraintLocator.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,10 @@ class ConstraintLocator : public llvm::FoldingSetNode {
162162
case NamedTupleElement:
163163
case TupleElement:
164164
case KeyPathComponent:
165-
case ConditionalRequirement:
166165
return 1;
167166

168167
case TypeParameterRequirement:
168+
case ConditionalRequirement:
169169
case ApplyArgToParam:
170170
return 2;
171171
}
@@ -340,8 +340,10 @@ class ConstraintLocator : public llvm::FoldingSetNode {
340340
}
341341

342342
/// Get a path element for a conditional requirement.
343-
static PathElement getConditionalRequirementComponent(unsigned index) {
344-
return PathElement(ConditionalRequirement, index);
343+
static PathElement
344+
getConditionalRequirementComponent(unsigned index, RequirementKind kind) {
345+
return PathElement(ConditionalRequirement, index,
346+
static_cast<unsigned>(kind));
345347
}
346348

347349
static PathElement getTypeRequirementComponent(unsigned index,

0 commit comments

Comments
 (0)