Skip to content

Compiler crash during typechecking involving callAsFunction + trailing closure + explicit init #85376

@jamieQ

Description

@jamieQ

Description

No response

Reproduction

struct S {
    func callAsFunction(_ c: () -> Void) {}
}

func f() {
    _ = S.init() {}
}

Stack dump

Unhandled coercion:
(struct_type decl="output.(file).S@<source>:1:8")
(tuple_type num_elements=0)

Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: /cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend -frontend -S -primary-file <source> -target x86_64-unknown-linux-gnu -disable-objc-interop -no-color-diagnostics -Xcc -fno-color-diagnostics -g -debug-info-format=dwarf -dwarf-version=4 -empty-abi-descriptor -enable-anonymous-context-mangled-names -file-compilation-dir /app -Xllvm --x86-asm-syntax=intel -no-auto-bridging-header-chaining -module-name output -in-process-plugin-server-path /cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/lib/swift/host/libSwiftInProcPluginServer.so -plugin-path /cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/lib/swift/host/plugins -plugin-path /cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/local/lib/swift/host/plugins -o /app/output.s
1.	Swift version 6.3-dev (LLVM bff1370bd79c983, Swift 57cf4ce563f700b)
2.	Compiling with effective version 5.10
3.	While evaluating request TypeCheckPrimaryFileRequest(source_file "<source>")
4.	While evaluating request TypeCheckFunctionBodyRequest(output.(file).f()@<source>:5:6)
5.	While type-checking statement at [<source>:5:10 - line:7:1] RangeText="{
    _ = S.init() {}
"
6.	While type-checking expression at [<source>:6:5 - line:6:19] RangeText="_ = S.init() {"
7.	While type-checking-target starting at <source>:6:5
8.	Abort: function coerceToType at CSApply.cpp:7989
| 	Unhandled coercion:
| 	(struct_type decl="output.(file).S@<source>:1:8")
| 	(tuple_type num_elements=0)
 #0 0x000055aac31ae418 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x8958418)
 #1 0x000055aac31abc05 llvm::sys::RunSignalHandlers() (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x8955c05)
 #2 0x000055aac31af1c1 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x000079680f042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000079680f0969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x000079680f042476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x000079680f0287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x000055aabd40f802 (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x2bb9802)
 #8 0x000055aabd40f8ec (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x2bb98ec)
 #9 0x000055aabcae4b73 (anonymous namespace)::ExprRewriter::coerceToType(swift::Expr*, swift::Type, swift::constraints::ConstraintLocatorBuilder) CSApply.cpp:0:0
#10 0x000055aabcae6fa5 (anonymous namespace)::ExprWalker::walkToExprPost(swift::Expr*) CSApply.cpp:0:0
#11 0x000055aabcf38d96 (anonymous namespace)::Traversal::doIt(swift::Expr*) ASTWalker.cpp:0:0
#12 0x000055aabcf38ca3 swift::Expr::walk(swift::ASTWalker&) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x26e2ca3)
#13 0x000055aabcae017b (anonymous namespace)::ExprWalker::rewriteTarget(swift::constraints::SyntacticElementTarget) CSApply.cpp:0:0
#14 0x000055aabcadfaf8 swift::constraints::ConstraintSystem::applySolution(swift::constraints::Solution&, swift::constraints::SyntacticElementTarget) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x2289af8)
#15 0x000055aabc90234c swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::DiagnosticTransaction*) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x20ac34c)
#16 0x000055aabc902131 swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::DiagnosticTransaction*) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x20ac131)
#17 0x000055aabc902006 swift::TypeChecker::typeCheckExpression(swift::Expr*&, swift::DeclContext*, swift::constraints::ContextualTypeInfo, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x20ac006)
#18 0x000055aabca0914b (anonymous namespace)::StmtChecker::typeCheckASTNode(swift::ASTNode&) TypeCheckStmt.cpp:0:0
#19 0x000055aabca0cfbd swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) TypeCheckStmt.cpp:0:0
#20 0x000055aabca0afec bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) TypeCheckStmt.cpp:0:0
#21 0x000055aabca0a914 (anonymous namespace)::StmtChecker::typeCheckBody(swift::BraceStmt*&) TypeCheckStmt.cpp:0:0
#22 0x000055aabca0a544 swift::TypeCheckFunctionBodyRequest::evaluate(swift::Evaluator&, swift::AbstractFunctionDecl*) const (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x21b4544)
#23 0x000055aabd08ebee swift::TypeCheckFunctionBodyRequest::OutputType swift::Evaluator::getResultUncached<swift::TypeCheckFunctionBodyRequest, swift::TypeCheckFunctionBodyRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckFunctionBodyRequest>(swift::Evaluator&, swift::TypeCheckFunctionBodyRequest, swift::TypeCheckFunctionBodyRequest::OutputType)::'lambda'()>(swift::TypeCheckFunctionBodyRequest const&, swift::TypeCheckFunctionBodyRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckFunctionBodyRequest>(swift::Evaluator&, swift::TypeCheckFunctionBodyRequest, swift::TypeCheckFunctionBodyRequest::OutputType)::'lambda'()) crtstuff.c:0:0
#24 0x000055aabcfe5df9 swift::AbstractFunctionDecl::getTypecheckedBody() const (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x278fdf9)
#25 0x000055aabd16e118 swift::SourceFile::typeCheckDelayedFunctions() (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x2918118)
#26 0x000055aabca7b75d swift::TypeCheckPrimaryFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x222575d)
#27 0x000055aabca7fa4b swift::TypeCheckPrimaryFileRequest::OutputType swift::Evaluator::getResultUncached<swift::TypeCheckPrimaryFileRequest, swift::TypeCheckPrimaryFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckPrimaryFileRequest>(swift::Evaluator&, swift::TypeCheckPrimaryFileRequest, swift::TypeCheckPrimaryFileRequest::OutputType)::'lambda'()>(swift::TypeCheckPrimaryFileRequest const&, swift::TypeCheckPrimaryFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckPrimaryFileRequest>(swift::Evaluator&, swift::TypeCheckPrimaryFileRequest, swift::TypeCheckPrimaryFileRequest::OutputType)::'lambda'()) crtstuff.c:0:0
#28 0x000055aabca7b5a5 swift::performTypeChecking(swift::SourceFile&) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x22255a5)
#29 0x000055aabb5b8e59 bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_10>(long, swift::SourceFile&) Frontend.cpp:0:0
#30 0x000055aabb5afada swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0xd59ada)
#31 0x000055aabb5af8cb swift::CompilerInstance::performSema() (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0xd598cb)
#32 0x000055aabb229372 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) FrontendTool.cpp:0:0
#33 0x000055aabb217f99 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*, llvm::ArrayRef<char const*>) FrontendTool.cpp:0:0
#34 0x000055aabb214bfe swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x9bebfe)
#35 0x000055aabaf64aec swift::mainEntry(int, char const**) (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x70eaec)
#36 0x000079680f029d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#37 0x000079680f029e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#38 0x000055aabaf639d5 _start (/cefs/fe/fe478d39bbcfde13719a3634_swift-nightly/usr/bin/swift-frontend+0x70d9d5)

Expected behavior

no crash

Environment

Swift version 6.3-dev (LLVM bff1370bd79c983, Swift 57cf4ce)
Target: x86_64-unknown-linux-gnu

Additional information

forum thread: https://forums.swift.org/t/why-can-initializer-parentheses-be-omitted-with-callasfunction-trailing-closure/83061/13

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwareexpressionsFeature: expressionstype checkerArea → compiler: Semantic analysis

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions