Skip to content

Commit 5b4f2e6

Browse files
committed
[GSB] More detailed debug dump for GSB idempotency failures.
1 parent e4d2e37 commit 5b4f2e6

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

lib/AST/ASTContext.cpp

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,9 +1277,50 @@ GenericSignatureBuilder *ASTContext::getOrCreateGenericSignatureBuilder(
12771277
llvm::errs() << "Original generic signature : ";
12781278
sig->print(llvm::errs());
12791279
llvm::errs() << "\nReprocessed generic signature: ";
1280-
builder->getGenericSignature()->getCanonicalSignature()
1281-
->print(llvm::errs());
1280+
auto reprocessedSig =
1281+
builder->getGenericSignature()->getCanonicalSignature();
1282+
1283+
reprocessedSig->print(llvm::errs());
12821284
llvm::errs() << "\n";
1285+
1286+
if (sig->getGenericParams().size() ==
1287+
reprocessedSig->getGenericParams().size() &&
1288+
sig->getRequirements().size() ==
1289+
reprocessedSig->getRequirements().size()) {
1290+
for (unsigned i : indices(sig->getRequirements())) {
1291+
auto sigReq = sig->getRequirements()[i];
1292+
auto reprocessedReq = reprocessedSig->getRequirements()[i];
1293+
if (sigReq.getKind() != reprocessedReq.getKind()) {
1294+
llvm::errs() << "Requirement mismatch:\n";
1295+
llvm::errs() << " Original: ";
1296+
sigReq.print(llvm::errs(), PrintOptions());
1297+
llvm::errs() << "\n Reprocessed: ";
1298+
reprocessedReq.print(llvm::errs(), PrintOptions());
1299+
llvm::errs() << "\n";
1300+
break;
1301+
}
1302+
1303+
if (!sigReq.getFirstType()->isEqual(reprocessedReq.getFirstType())) {
1304+
llvm::errs() << "First type mismatch, original is:\n";
1305+
sigReq.getFirstType().dump(llvm::errs());
1306+
llvm::errs() << "Reprocessed:\n";
1307+
reprocessedReq.getFirstType().dump(llvm::errs());
1308+
llvm::errs() << "\n";
1309+
break;
1310+
}
1311+
1312+
if (sigReq.getKind() == RequirementKind::SameType &&
1313+
!sigReq.getSecondType()->isEqual(reprocessedReq.getSecondType())) {
1314+
llvm::errs() << "Second type mismatch, original is:\n";
1315+
sigReq.getSecondType().dump(llvm::errs());
1316+
llvm::errs() << "Reprocessed:\n";
1317+
reprocessedReq.getSecondType().dump(llvm::errs());
1318+
llvm::errs() << "\n";
1319+
break;
1320+
}
1321+
}
1322+
}
1323+
12831324
llvm_unreachable("idempotency problem with a generic signature");
12841325
}
12851326
#endif

0 commit comments

Comments
 (0)