[Sema] Fix crash when diagnosing ambiguous trailing closure inits

Fixes #85376.

This fixes a compiler crash that occurred when diagnosing an ambiguous call
using trailing closure syntax, where one of the candidates was a function or
initializer with no parameters.
This commit is contained in:
naveen-seth
2025-11-10 03:04:17 +01:00
parent 087aee833f
commit 8b7b0e944b
2 changed files with 29 additions and 0 deletions

View File

@@ -2142,6 +2142,8 @@ bool TrailingClosureAmbiguityFailure::diagnoseAsNote() {
return false;
const ParameterList *paramList = callee->getParameters();
if (paramList->getArray().empty())
return false;
const ParamDecl *param = paramList->getArray().back();
// Soundness-check that the trailing closure corresponds to this parameter.

View File

@@ -0,0 +1,27 @@
// RUN: %target-typecheck-verify-swift -swift-version 6
// Checks that the compiler correctly diagnoses ambiguous initializers using
// trailing closures, rather than crashing.
//
// Fixes #85364
struct S1 { // expected-note {{found this candidate}} \
// expected-note {{'S1' previously declared here}}
var c: () -> Void
}
S1 {} // expected-error {{ambiguous use of 'init'}}
struct S1 { // expected-note {{found this candidate}} \
// expected-error {{invalid redeclaration of 'S1'}}
func callAsFunction(_: () -> Void) {}
}
struct S2 {
init() {} // expected-note {{found this candidate}}
init(_ block: () -> Void) { block() } // expected-note {{found this candidate}}
func callAsFunction(_ block: () -> Void) { block() }
}
S2 {} // expected-error {{ambiguous use of 'init'}}