Skip to content

Commit fb097ae

Browse files
committed
RequirementMachine: Relax cross-check assert for areSameTypeParameterInContext()
The GSB and RequirementMachine sometimes disagree on whether two type parameters that have both been equated to the same concrete type belong to the same equivalence class or not. Since in practice, this distinction does not matter, relax the assert here.
1 parent 1a92b17 commit fb097ae

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

lib/AST/GenericSignature.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -896,15 +896,19 @@ bool GenericSignatureImpl::areSameTypeParameterInContext(Type type1,
896896
auto gsbResult = computeViaGSB();
897897

898898
if (gsbResult != rqmResult) {
899-
llvm::errs() << "RequirementMachine::areSameTypeParameterInContext() is broken\n";
900-
llvm::errs() << "Generic signature: " << GenericSignature(this) << "\n";
901-
llvm::errs() << "First dependent type: "; type1.dump(llvm::errs());
902-
llvm::errs() << "Second dependent type: "; type2.dump(llvm::errs());
903-
llvm::errs() << "\n";
904-
llvm::errs() << "GenericSignatureBuilder says: " << gsbResult << "\n";
905-
llvm::errs() << "RequirementMachine says: " << rqmResult << "\n";
906-
getRequirementMachine()->dump(llvm::errs());
907-
abort();
899+
auto firstConcreteType = getConcreteType(type1);
900+
auto secondConcreteType = getConcreteType(type2);
901+
if (!firstConcreteType->isEqual(secondConcreteType)) {
902+
llvm::errs() << "RequirementMachine::areSameTypeParameterInContext() is broken\n";
903+
llvm::errs() << "Generic signature: " << GenericSignature(this) << "\n";
904+
llvm::errs() << "First dependent type: "; type1.dump(llvm::errs());
905+
llvm::errs() << "Second dependent type: "; type2.dump(llvm::errs());
906+
llvm::errs() << "\n";
907+
llvm::errs() << "GenericSignatureBuilder says: " << gsbResult << "\n";
908+
llvm::errs() << "RequirementMachine says: " << rqmResult << "\n";
909+
getRequirementMachine()->dump(llvm::errs());
910+
abort();
911+
}
908912
}
909913

910914
return rqmResult;

0 commit comments

Comments
 (0)