@@ -1277,9 +1277,50 @@ GenericSignatureBuilder *ASTContext::getOrCreateGenericSignatureBuilder(
1277
1277
llvm::errs () << " Original generic signature : " ;
1278
1278
sig->print (llvm::errs ());
1279
1279
llvm::errs () << " \n Reprocessed generic signature: " ;
1280
- builder->getGenericSignature ()->getCanonicalSignature ()
1281
- ->print (llvm::errs ());
1280
+ auto reprocessedSig =
1281
+ builder->getGenericSignature ()->getCanonicalSignature ();
1282
+
1283
+ reprocessedSig->print (llvm::errs ());
1282
1284
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
+
1283
1324
llvm_unreachable (" idempotency problem with a generic signature" );
1284
1325
}
1285
1326
#endif
0 commit comments