Skip to content

Commit b26b0b7

Browse files
committed
[CS] Add null check for ParameterList in findFavoredChoicesBasedOnArity
rdar://164116965
1 parent 1bb65d8 commit b26b0b7

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

lib/Sema/CSOptimizer.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -658,11 +658,20 @@ static void findFavoredChoicesBasedOnArity(
658658
return;
659659
}
660660

661-
if (overloadType->getNumParams() == argumentList->size() ||
662-
llvm::count_if(*decl->getParameterList(), [](auto *param) {
663-
return !param->isDefaultArgument();
664-
}) == argumentList->size())
661+
if (overloadType->getNumParams() == argumentList->size()) {
665662
favored.push_back(choice);
663+
return;
664+
}
665+
666+
if (auto *paramList = decl->getParameterList()) {
667+
auto numNonDefaulted = llvm::count_if(*paramList, [](auto *param) {
668+
return !param->isDefaultArgument();
669+
});
670+
if (numNonDefaulted == argumentList->size()) {
671+
favored.push_back(choice);
672+
return;
673+
}
674+
}
666675
});
667676

668677
if (hasVariadicGenerics)
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
// {"kind":"typecheck","signature":"void llvm::function_ref<void (swift::constraints::Constraint*, swift::ValueDecl*, swift::FunctionType*)>::callback_fn<(anonymous namespace)::findFavoredChoicesBasedOnArity(swift::constraints::ConstraintSystem&, swift::constraints::Constraint*, swift::ArgumentList*, llvm::function_ref<void (swift::constraints::Constraint*)>)::$_0>(long, swift::constraints::Constraint*, swift::ValueDecl*, swift::FunctionType*)"}
2-
// RUN: not --crash %target-swift-frontend -typecheck %s
2+
// RUN: not %target-swift-frontend -typecheck %s
33
var a: Any
44
let a : () -> Void = a (b)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// {"kind":"typecheck","signature":"void llvm::function_ref<void (swift::constraints::Constraint*, swift::ValueDecl*, swift::FunctionType*)>::callback_fn<(anonymous namespace)::findFavoredChoicesBasedOnArity(swift::constraints::ConstraintSystem&, swift::constraints::Constraint*, swift::ArgumentList*, llvm::function_ref<void (swift::constraints::Constraint*)>)::$_0>(long, swift::constraints::Constraint*, swift::ValueDecl*, swift::FunctionType*)"}
2+
// RUN: not %target-swift-frontend -typecheck %s
3+
let foo: (String) -> Void = {_ in}
4+
func foo(_ x: String) {}
5+
foo()

0 commit comments

Comments
 (0)