@@ -8630,6 +8630,27 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
86308630 ArrayRef<Requirement>());
86318631 };
86328632
8633+ auto compare = [&](ArrayRef<Requirement> rqmResult,
8634+ ArrayRef<Requirement> gsbResult) {
8635+ if (proto->getParentModule ()->isStdlibModule () &&
8636+ (proto->getName ().is (" Collection" ) ||
8637+ proto->getName ().is (" StringProtocol" ))) {
8638+ if (rqmResult.size () > gsbResult.size ())
8639+ return false ;
8640+ } else {
8641+ if (rqmResult.size () != gsbResult.size ())
8642+ return false ;
8643+ }
8644+
8645+ return std::equal (rqmResult.begin (),
8646+ rqmResult.end (),
8647+ gsbResult.begin (),
8648+ [](const Requirement &lhs,
8649+ const Requirement &rhs) {
8650+ return lhs.getCanonical () == rhs.getCanonical ();
8651+ });
8652+ };
8653+
86338654 switch (ctx.LangOpts .RequirementMachineProtocolSignatures ) {
86348655 case RequirementMachineMode::Disabled:
86358656 return buildViaGSB ();
@@ -8641,23 +8662,7 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
86418662 auto rqmResult = buildViaRQM ();
86428663 auto gsbResult = buildViaGSB ();
86438664
8644- // For now, only compare conformance requirements, since those are the
8645- // important ones from the ABI perspective.
8646- SmallVector<Requirement, 2 > rqmConformances;
8647- for (auto req : rqmResult) {
8648- if (req.getKind () == RequirementKind::Conformance)
8649- rqmConformances.push_back (req);
8650- }
8651- SmallVector<Requirement, 2 > gsbConformances;
8652- for (auto req : gsbResult) {
8653- if (req.getKind () == RequirementKind::Conformance)
8654- gsbConformances.push_back (req);
8655- }
8656-
8657- if (rqmConformances.size () != gsbConformances.size () ||
8658- !std::equal (rqmConformances.begin (),
8659- rqmConformances.end (),
8660- gsbConformances.begin ())) {
8665+ if (!compare (rqmResult, gsbResult)) {
86618666 llvm::errs () << " RequirementMachine protocol signature minimization is broken:\n " ;
86628667 llvm::errs () << " Protocol: " << proto->getName () << " \n " ;
86638668
0 commit comments