@@ -680,6 +680,9 @@ struct GenericSignatureBuilder::Implementation {
680680 // / requirements.
681681 bool RebuildingWithoutRedundantConformances = false ;
682682
683+ // / Whether we are building a protocol requirement signature.
684+ bool BuildingProtocolRequirementSignature = false ;
685+
683686 // / A mapping of redundant explicit requirements to the best root requirement
684687 // / that implies them. Built by computeRedundantRequirements().
685688 using RedundantRequirementMap =
@@ -2313,6 +2316,11 @@ void GenericSignatureBuilder::addConditionalRequirements(
23132316 if (Impl->RebuildingWithoutRedundantConformances )
23142317 return ;
23152318
2319+ // We do not perform requirement inference, including conditional requirement
2320+ // inference, inside protocols.
2321+ if (Impl->BuildingProtocolRequirementSignature )
2322+ return ;
2323+
23162324 // Abstract conformances don't have associated decl-contexts/modules, but also
23172325 // don't have conditional requirements.
23182326 if (conformance.isConcrete ()) {
@@ -3399,10 +3407,12 @@ void EquivalenceClass::modified(GenericSignatureBuilder &builder) {
33993407}
34003408
34013409GenericSignatureBuilder::GenericSignatureBuilder (
3402- ASTContext &ctx)
3410+ ASTContext &ctx,
3411+ bool requirementSignature)
34033412 : Context(ctx), Diags(Context.Diags), Impl(new Implementation) {
34043413 if (auto *Stats = Context.Stats )
34053414 ++Stats->getFrontendCounters ().NumGenericSignatureBuilders ;
3415+ Impl->BuildingProtocolRequirementSignature = requirementSignature;
34063416}
34073417
34083418GenericSignatureBuilder::GenericSignatureBuilder (
@@ -8835,7 +8845,8 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
88358845 }
88368846
88378847 auto buildViaGSB = [&]() {
8838- GenericSignatureBuilder builder (proto->getASTContext ());
8848+ GenericSignatureBuilder builder (proto->getASTContext (),
8849+ /* requirementSignature=*/ true );
88398850
88408851 // Add all of the generic parameters.
88418852 for (auto gp : *proto->getGenericParams ())
0 commit comments