@@ -4007,9 +4007,7 @@ static AbstractFunctionDecl *findAutoDiffOriginalFunctionDecl(
40074007// / `checkGenericSignature` is used to check generic signatures, if specified.
40084008// / Otherwise, generic signatures are checked for equality.
40094009static bool checkFunctionSignature (
4010- CanAnyFunctionType required, CanType candidate,
4011- Optional<std::function<bool (GenericSignature, GenericSignature)>>
4012- checkGenericSignature = None) {
4010+ CanAnyFunctionType required, CanType candidate) {
40134011 // Check that candidate is actually a function.
40144012 auto candidateFnTy = dyn_cast<AnyFunctionType>(candidate);
40154013 if (!candidateFnTy)
@@ -4022,12 +4020,7 @@ static bool checkFunctionSignature(
40224020 // Check that generic signatures match.
40234021 auto requiredGenSig = required.getOptGenericSignature ();
40244022 auto candidateGenSig = candidateFnTy.getOptGenericSignature ();
4025- // Call generic signature check function, if specified.
4026- // Otherwise, check that generic signatures are equal.
4027- if (!checkGenericSignature) {
4028- if (candidateGenSig != requiredGenSig)
4029- return false ;
4030- } else if (!(*checkGenericSignature)(requiredGenSig, candidateGenSig)) {
4023+ if (!candidateGenSig.requirementsNotSatisfiedBy (requiredGenSig).empty ()) {
40314024 return false ;
40324025 }
40334026
@@ -4684,14 +4677,6 @@ static bool typeCheckDerivativeAttr(ASTContext &Ctx, Decl *D,
46844677 auto *originalFnType =
46854678 getDerivativeOriginalFunctionType (derivativeInterfaceType);
46864679
4687- // Returns true if the generic parameters in `source` satisfy the generic
4688- // requirements in `target`.
4689- std::function<bool (GenericSignature, GenericSignature)>
4690- checkGenericSignatureSatisfied =
4691- [&](GenericSignature source, GenericSignature target) {
4692- return target.requirementsNotSatisfiedBy (source).empty ();
4693- };
4694-
46954680 // Returns true if the derivative function and original function candidate are
46964681 // defined in compatible type contexts. If the derivative function and the
46974682 // original function candidate have different parents, return false.
@@ -4724,8 +4709,7 @@ static bool typeCheckDerivativeAttr(ASTContext &Ctx, Decl *D,
47244709 // Error if the original candidate does not have the expected type.
47254710 if (!checkFunctionSignature (
47264711 cast<AnyFunctionType>(originalFnType->getCanonicalType ()),
4727- originalCandidate->getInterfaceType ()->getCanonicalType (),
4728- checkGenericSignatureSatisfied))
4712+ originalCandidate->getInterfaceType ()->getCanonicalType ()))
47294713 return AbstractFunctionDeclLookupErrorKind::CandidateTypeMismatch;
47304714 return None;
47314715 };
@@ -5315,21 +5299,12 @@ void AttributeChecker::visitTransposeAttr(TransposeAttr *attr) {
53155299 return ;
53165300 }
53175301
5318- // Returns true if the generic parameters in `source` satisfy the generic
5319- // requirements in `target`.
5320- std::function<bool (GenericSignature, GenericSignature)>
5321- checkGenericSignatureSatisfied =
5322- [&](GenericSignature source, GenericSignature target) {
5323- return target.requirementsNotSatisfiedBy (source).empty ();
5324- };
5325-
53265302 auto isValidOriginalCandidate = [&](AbstractFunctionDecl *originalCandidate)
53275303 -> Optional<AbstractFunctionDeclLookupErrorKind> {
53285304 // Error if the original candidate does not have the expected type.
53295305 if (!checkFunctionSignature (
53305306 cast<AnyFunctionType>(expectedOriginalFnType->getCanonicalType ()),
5331- originalCandidate->getInterfaceType ()->getCanonicalType (),
5332- checkGenericSignatureSatisfied))
5307+ originalCandidate->getInterfaceType ()->getCanonicalType ()))
53335308 return AbstractFunctionDeclLookupErrorKind::CandidateTypeMismatch;
53345309 return None;
53355310 };
0 commit comments