Skip to content

Commit 9dadbc0

Browse files
committed
Sema: More debug output from associated type inference
1 parent 312dfcd commit 9dadbc0

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

lib/Sema/TypeCheckProtocolInference.cpp

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,13 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
13601360
return nullptr;
13611361
}
13621362

1363+
LLVM_DEBUG(llvm::dbgs() << "Inferring abstract type witnesses for "
1364+
<< "associated types of " << conformance->getProtocol()->getName()
1365+
<< ":\n";);
1366+
for (auto *assocType : unresolvedAssocTypes) {
1367+
LLVM_DEBUG(llvm::dbgs() << "- " << assocType->getName() << "\n";);
1368+
}
1369+
13631370
// Attempt to compute abstract type witnesses for associated types that could
13641371
// not resolve otherwise.
13651372
llvm::SmallVector<AbstractTypeWitness, 2> abstractTypeWitnesses;
@@ -1397,6 +1404,8 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
13971404
return llvm::None;
13981405
});
13991406

1407+
LLVM_DEBUG(llvm::dbgs() << "Inserting tentative witness for "
1408+
<< assocType->getName() << ": "; resolvedTy.dump(llvm::dbgs()););
14001409
typeWitnesses.insert(assocType, {resolvedTy, reqDepth});
14011410

14021411
if (auto *defaultedAssocType =
@@ -1429,6 +1438,8 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
14291438

14301439
// Record the type witness immediately to make it available
14311440
// for substitutions into other tentative type witnesses.
1441+
LLVM_DEBUG(llvm::dbgs() << "Inserting tentative witness for "
1442+
<< assocType->getName() << ": "; resolvedTy.dump(llvm::dbgs()););
14321443
typeWitnesses.insert(assocType, {resolvedTy, reqDepth});
14331444

14341445
abstractTypeWitnesses.emplace_back(assocType, resolvedTy,
@@ -1459,6 +1470,9 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
14591470
auto *const assocType = witness.getAssocType();
14601471
Type type = witness.getType();
14611472

1473+
LLVM_DEBUG(llvm::dbgs() << "Checking witness for " << assocType->getName()
1474+
<< " " << type << "\n";);
1475+
14621476
// Replace type parameters with other known or tentative type witnesses.
14631477
if (type->hasDependentMember() || type->hasTypeParameter()) {
14641478
// FIXME: We should find a better way to detect and reason about these
@@ -1561,10 +1575,14 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
15611575
return assocType;
15621576

15631577
type = dc->mapTypeIntoContext(type);
1578+
1579+
LLVM_DEBUG(llvm::dbgs() << "Substituted witness type is " << type << "\n";);
15641580
}
15651581

15661582
if (const auto failed =
15671583
checkTypeWitness(type, assocType, conformance, substOptions)) {
1584+
LLVM_DEBUG(llvm::dbgs() << "- Type witness does not satisfy requirements\n";);
1585+
15681586
// We failed to satisfy a requirement. If this is a default type
15691587
// witness failure and we haven't seen one already, write it down.
15701588
auto *defaultedAssocType = witness.getDefaultedAssocType();
@@ -1579,6 +1597,8 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
15791597
}
15801598

15811599
// Update the entry for this associated type.
1600+
LLVM_DEBUG(llvm::dbgs() << "Updating tentative witness for "
1601+
<< assocType->getName() << ": "; type.dump(llvm::dbgs()););
15821602
typeWitnesses.insert(assocType, {type, reqDepth});
15831603
}
15841604

@@ -1765,6 +1785,10 @@ void AssociatedTypeInference::findSolutionsRec(
17651785

17661786
// Enter a new scope for the type witnesses hash table.
17671787
TypeWitnessesScope typeWitnessesScope(typeWitnesses);
1788+
1789+
LLVM_DEBUG(llvm::dbgs() << "Inserting tentative witness for "
1790+
<< typeWitness.first->getName() << ": ";
1791+
typeWitness.second.dump(llvm::dbgs()););
17681792
typeWitnesses.insert(typeWitness.first, {typeWitness.second, reqDepth});
17691793

17701794
valueWitnesses.push_back({inferredReq.first, witnessReq.Witness});
@@ -1849,18 +1873,16 @@ void AssociatedTypeInference::findSolutionsRec(
18491873
}
18501874

18511875
LLVM_DEBUG(llvm::dbgs() << std::string(valueWitnesses.size(), '+')
1852-
<< "+ Failed " << typeWitness.first->getName()
1853-
<< " := " << typeWitness.second->getCanonicalType()
1854-
<< "\n";);
1876+
<< "+ Failed " << typeWitness.first->getName() << ": ";
1877+
typeWitness.second->dump(llvm::dbgs()););
18551878

18561879
failed = true;
18571880
break;
18581881
}
18591882

1860-
LLVM_DEBUG(llvm::dbgs() << std::string(valueWitnesses.size(), '+')
1861-
<< "+ Recording " << typeWitness.first->getName()
1862-
<< " := " << typeWitness.second->getCanonicalType()
1863-
<< "\n";);
1883+
LLVM_DEBUG(llvm::dbgs() << "Inserting tentative witness for "
1884+
<< typeWitness.first->getName() << ": ";
1885+
typeWitness.second.dump(llvm::dbgs()););
18641886

18651887
// Record the type witness.
18661888
++numTypeWitnesses;

0 commit comments

Comments
 (0)