Skip to content

Commit 967789f

Browse files
committed
RequirementMachine: Implement -requirement-machine-protocol-signatures=verify
1 parent b30aa22 commit 967789f

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8770,7 +8770,28 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
87708770
case RequirementMachineMode::Enabled:
87718771
return buildViaRQM();
87728772

8773-
case RequirementMachineMode::Verify:
8774-
abort();
8773+
case RequirementMachineMode::Verify: {
8774+
auto rqmResult = buildViaRQM();
8775+
auto gsbResult = buildViaGSB();
8776+
8777+
if (rqmResult.size() != gsbResult.size() ||
8778+
!std::equal(rqmResult.begin(), rqmResult.end(),
8779+
gsbResult.begin())) {
8780+
llvm::errs() << "RequirementMachine protocol signature minimization is broken:\n";
8781+
llvm::errs() << "Protocol: " << proto->getName() << "\n";
8782+
8783+
auto rqmSig = GenericSignature::get(
8784+
proto->getGenericSignature().getGenericParams(), rqmResult);
8785+
llvm::errs() << "RequirementMachine says: " << rqmSig << "\n";
8786+
8787+
auto gsbSig = GenericSignature::get(
8788+
proto->getGenericSignature().getGenericParams(), gsbResult);
8789+
llvm::errs() << "GenericSignatureBuilder says: " << gsbSig << "\n";
8790+
8791+
abort();
8792+
}
8793+
8794+
return gsbResult;
8795+
}
87758796
}
87768797
}

0 commit comments

Comments
 (0)