@@ -4007,9 +4007,7 @@ static AbstractFunctionDecl *findAutoDiffOriginalFunctionDecl(
4007
4007
// / `checkGenericSignature` is used to check generic signatures, if specified.
4008
4008
// / Otherwise, generic signatures are checked for equality.
4009
4009
static bool checkFunctionSignature (
4010
- CanAnyFunctionType required, CanType candidate,
4011
- Optional<std::function<bool (GenericSignature, GenericSignature)>>
4012
- checkGenericSignature = None) {
4010
+ CanAnyFunctionType required, CanType candidate) {
4013
4011
// Check that candidate is actually a function.
4014
4012
auto candidateFnTy = dyn_cast<AnyFunctionType>(candidate);
4015
4013
if (!candidateFnTy)
@@ -4022,12 +4020,7 @@ static bool checkFunctionSignature(
4022
4020
// Check that generic signatures match.
4023
4021
auto requiredGenSig = required.getOptGenericSignature ();
4024
4022
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 ()) {
4031
4024
return false ;
4032
4025
}
4033
4026
@@ -4684,14 +4677,6 @@ static bool typeCheckDerivativeAttr(ASTContext &Ctx, Decl *D,
4684
4677
auto *originalFnType =
4685
4678
getDerivativeOriginalFunctionType (derivativeInterfaceType);
4686
4679
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
-
4695
4680
// Returns true if the derivative function and original function candidate are
4696
4681
// defined in compatible type contexts. If the derivative function and the
4697
4682
// original function candidate have different parents, return false.
@@ -4724,8 +4709,7 @@ static bool typeCheckDerivativeAttr(ASTContext &Ctx, Decl *D,
4724
4709
// Error if the original candidate does not have the expected type.
4725
4710
if (!checkFunctionSignature (
4726
4711
cast<AnyFunctionType>(originalFnType->getCanonicalType ()),
4727
- originalCandidate->getInterfaceType ()->getCanonicalType (),
4728
- checkGenericSignatureSatisfied))
4712
+ originalCandidate->getInterfaceType ()->getCanonicalType ()))
4729
4713
return AbstractFunctionDeclLookupErrorKind::CandidateTypeMismatch;
4730
4714
return None;
4731
4715
};
@@ -5315,21 +5299,12 @@ void AttributeChecker::visitTransposeAttr(TransposeAttr *attr) {
5315
5299
return ;
5316
5300
}
5317
5301
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
-
5326
5302
auto isValidOriginalCandidate = [&](AbstractFunctionDecl *originalCandidate)
5327
5303
-> Optional<AbstractFunctionDeclLookupErrorKind> {
5328
5304
// Error if the original candidate does not have the expected type.
5329
5305
if (!checkFunctionSignature (
5330
5306
cast<AnyFunctionType>(expectedOriginalFnType->getCanonicalType ()),
5331
- originalCandidate->getInterfaceType ()->getCanonicalType (),
5332
- checkGenericSignatureSatisfied))
5307
+ originalCandidate->getInterfaceType ()->getCanonicalType ()))
5333
5308
return AbstractFunctionDeclLookupErrorKind::CandidateTypeMismatch;
5334
5309
return None;
5335
5310
};
0 commit comments