@@ -3991,6 +3991,8 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
39913991 auto protocolSubMap = SubstitutionMap::getProtocolSubstitutions (
39923992 proto, selfType.getDependentType (*this ), ProtocolConformanceRef (proto));
39933993
3994+ auto result = ConstraintResult::Resolved;
3995+
39943996 // Use the requirement signature to avoid rewalking the entire protocol. This
39953997 // cannot compute the requirement signature directly, because that may be
39963998 // infinitely recursive: this code is also used to construct it.
@@ -4007,19 +4009,20 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
40074009 auto reqResult = substReq
40084010 ? addRequirement (*substReq, innerSource, nullptr )
40094011 : ConstraintResult::Conflicting;
4010- if (isErrorResult (reqResult)) return reqResult;
4012+ if (isErrorResult (reqResult) && !isErrorResult (result))
4013+ result = reqResult;
40114014 }
40124015
4013- return ConstraintResult::Resolved ;
4016+ return result ;
40144017 }
40154018
40164019 if (!onlySameTypeConstraints) {
40174020 // Add all of the inherited protocol requirements, recursively.
40184021 auto inheritedReqResult =
40194022 addInheritedRequirements (proto, selfType.getUnresolvedType (), source,
40204023 nullptr );
4021- if (isErrorResult (inheritedReqResult))
4022- return inheritedReqResult;
4024+ if (isErrorResult (inheritedReqResult) && ! isErrorResult (inheritedReqResult) )
4025+ result = inheritedReqResult;
40234026 }
40244027
40254028 // Add any requirements in the where clause on the protocol.
@@ -4048,7 +4051,7 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
40484051 getASTContext ()),
40494052 innerSource);
40504053
4051- return ConstraintResult::Resolved ;
4054+ return result ;
40524055 }
40534056
40544057 // Remaining logic is not relevant in ObjC protocol cases.
@@ -4159,8 +4162,8 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
41594162 auto assocResult =
41604163 addInheritedRequirements (assocTypeDecl, assocType, source,
41614164 /* inferForModule=*/ nullptr );
4162- if (isErrorResult (assocResult))
4163- return assocResult;
4165+ if (isErrorResult (assocResult) && ! isErrorResult (result) )
4166+ result = assocResult;
41644167 }
41654168
41664169 // Add requirements from this associated type's where clause.
@@ -4314,7 +4317,7 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
43144317 }
43154318 }
43164319
4317- return ConstraintResult::Resolved ;
4320+ return result ;
43184321}
43194322
43204323ConstraintResult GenericSignatureBuilder::addConformanceRequirement (
0 commit comments