Skip to content

Commit e1be618

Browse files
committed
[NFC] Simplify Differentiable Signature Checking
1 parent 980fde2 commit e1be618

File tree

1 file changed

+4
-29
lines changed

1 file changed

+4
-29
lines changed

lib/Sema/TypeCheckAttr.cpp

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
40094009
static 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

Comments
 (0)