@@ -1360,6 +1360,13 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
1360
1360
return nullptr ;
1361
1361
}
1362
1362
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
+
1363
1370
// Attempt to compute abstract type witnesses for associated types that could
1364
1371
// not resolve otherwise.
1365
1372
llvm::SmallVector<AbstractTypeWitness, 2 > abstractTypeWitnesses;
@@ -1397,6 +1404,8 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
1397
1404
return llvm::None;
1398
1405
});
1399
1406
1407
+ LLVM_DEBUG (llvm::dbgs () << " Inserting tentative witness for "
1408
+ << assocType->getName () << " : " ; resolvedTy.dump (llvm::dbgs ()););
1400
1409
typeWitnesses.insert (assocType, {resolvedTy, reqDepth});
1401
1410
1402
1411
if (auto *defaultedAssocType =
@@ -1429,6 +1438,8 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
1429
1438
1430
1439
// Record the type witness immediately to make it available
1431
1440
// for substitutions into other tentative type witnesses.
1441
+ LLVM_DEBUG (llvm::dbgs () << " Inserting tentative witness for "
1442
+ << assocType->getName () << " : " ; resolvedTy.dump (llvm::dbgs ()););
1432
1443
typeWitnesses.insert (assocType, {resolvedTy, reqDepth});
1433
1444
1434
1445
abstractTypeWitnesses.emplace_back (assocType, resolvedTy,
@@ -1459,6 +1470,9 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
1459
1470
auto *const assocType = witness.getAssocType ();
1460
1471
Type type = witness.getType ();
1461
1472
1473
+ LLVM_DEBUG (llvm::dbgs () << " Checking witness for " << assocType->getName ()
1474
+ << " " << type << " \n " ;);
1475
+
1462
1476
// Replace type parameters with other known or tentative type witnesses.
1463
1477
if (type->hasDependentMember () || type->hasTypeParameter ()) {
1464
1478
// FIXME: We should find a better way to detect and reason about these
@@ -1561,10 +1575,14 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
1561
1575
return assocType;
1562
1576
1563
1577
type = dc->mapTypeIntoContext (type);
1578
+
1579
+ LLVM_DEBUG (llvm::dbgs () << " Substituted witness type is " << type << " \n " ;);
1564
1580
}
1565
1581
1566
1582
if (const auto failed =
1567
1583
checkTypeWitness (type, assocType, conformance, substOptions)) {
1584
+ LLVM_DEBUG (llvm::dbgs () << " - Type witness does not satisfy requirements\n " ;);
1585
+
1568
1586
// We failed to satisfy a requirement. If this is a default type
1569
1587
// witness failure and we haven't seen one already, write it down.
1570
1588
auto *defaultedAssocType = witness.getDefaultedAssocType ();
@@ -1579,6 +1597,8 @@ AssociatedTypeDecl *AssociatedTypeInference::inferAbstractTypeWitnesses(
1579
1597
}
1580
1598
1581
1599
// Update the entry for this associated type.
1600
+ LLVM_DEBUG (llvm::dbgs () << " Updating tentative witness for "
1601
+ << assocType->getName () << " : " ; type.dump (llvm::dbgs ()););
1582
1602
typeWitnesses.insert (assocType, {type, reqDepth});
1583
1603
}
1584
1604
@@ -1765,6 +1785,10 @@ void AssociatedTypeInference::findSolutionsRec(
1765
1785
1766
1786
// Enter a new scope for the type witnesses hash table.
1767
1787
TypeWitnessesScope typeWitnessesScope (typeWitnesses);
1788
+
1789
+ LLVM_DEBUG (llvm::dbgs () << " Inserting tentative witness for "
1790
+ << typeWitness.first ->getName () << " : " ;
1791
+ typeWitness.second .dump (llvm::dbgs ()););
1768
1792
typeWitnesses.insert (typeWitness.first , {typeWitness.second , reqDepth});
1769
1793
1770
1794
valueWitnesses.push_back ({inferredReq.first , witnessReq.Witness });
@@ -1849,18 +1873,16 @@ void AssociatedTypeInference::findSolutionsRec(
1849
1873
}
1850
1874
1851
1875
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 ()););
1855
1878
1856
1879
failed = true ;
1857
1880
break ;
1858
1881
}
1859
1882
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 ()););
1864
1886
1865
1887
// Record the type witness.
1866
1888
++numTypeWitnesses;
0 commit comments