@@ -680,6 +680,9 @@ struct GenericSignatureBuilder::Implementation {
680
680
// / requirements.
681
681
bool RebuildingWithoutRedundantConformances = false ;
682
682
683
+ // / Whether we are building a protocol requirement signature.
684
+ bool BuildingProtocolRequirementSignature = false ;
685
+
683
686
// / A mapping of redundant explicit requirements to the best root requirement
684
687
// / that implies them. Built by computeRedundantRequirements().
685
688
using RedundantRequirementMap =
@@ -2313,6 +2316,11 @@ void GenericSignatureBuilder::addConditionalRequirements(
2313
2316
if (Impl->RebuildingWithoutRedundantConformances )
2314
2317
return ;
2315
2318
2319
+ // We do not perform requirement inference, including conditional requirement
2320
+ // inference, inside protocols.
2321
+ if (Impl->BuildingProtocolRequirementSignature )
2322
+ return ;
2323
+
2316
2324
// Abstract conformances don't have associated decl-contexts/modules, but also
2317
2325
// don't have conditional requirements.
2318
2326
if (conformance.isConcrete ()) {
@@ -3399,10 +3407,12 @@ void EquivalenceClass::modified(GenericSignatureBuilder &builder) {
3399
3407
}
3400
3408
3401
3409
GenericSignatureBuilder::GenericSignatureBuilder (
3402
- ASTContext &ctx)
3410
+ ASTContext &ctx,
3411
+ bool requirementSignature)
3403
3412
: Context(ctx), Diags(Context.Diags), Impl(new Implementation) {
3404
3413
if (auto *Stats = Context.Stats )
3405
3414
++Stats->getFrontendCounters ().NumGenericSignatureBuilders ;
3415
+ Impl->BuildingProtocolRequirementSignature = requirementSignature;
3406
3416
}
3407
3417
3408
3418
GenericSignatureBuilder::GenericSignatureBuilder (
@@ -8835,7 +8845,8 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
8835
8845
}
8836
8846
8837
8847
auto buildViaGSB = [&]() {
8838
- GenericSignatureBuilder builder (proto->getASTContext ());
8848
+ GenericSignatureBuilder builder (proto->getASTContext (),
8849
+ /* requirementSignature=*/ true );
8839
8850
8840
8851
// Add all of the generic parameters.
8841
8852
for (auto gp : *proto->getGenericParams ())
0 commit comments