Compiler crash related to "TransferNonSendable"

I wrote some naive code where the listenerHandle is NSObjectProtocol so it's not Sendable obviously and I should probably receive a compiler error. (Concurrency strict)

let listenerHandle = auth.addStateDidChangeListener { [weak self] auth, user in
    if let s = self {
        s.userModel?.loginCredentials = user?.toLoginCredentials()
    } else {
        auth.removeStateDidChangeListener(listenerHandle)
    }
}

Instead, the compiler crashes:

1.	Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
2.	Compiling with effective version 5.10
3.	Contents of /.../MyProj.build/Objects-normal-ubsan/arm64/sources-12:
---
.
.
.
---
4.	While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for MyProj)
5.	While running pass #1380 SILFunctionTransform "TransferNonSendable" on SILFunction "@$s7MyProj19FirebaseAuthManagerCACycfc".
 for 'init()' (at .../Utilities/AuthManager.swift:61:14)
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  swift-frontend           0x0000000105ebb0fc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000105eb9350 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x0000000105ebb6c8 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x00000001884dae04 _sigtramp + 56
4  libsystem_pthread.dylib  0x00000001884a3f70 pthread_kill + 288
5  libsystem_c.dylib        0x00000001883b0908 abort + 128
6  swift-frontend           0x000000010142a474 swift::RegionAnalysisFunctionInfo::RegionAnalysisFunctionInfo(swift::SILFunction*, swift::PostOrderFunctionInfo*) + 19580
7  swift-frontend           0x000000010142bf14 swift::RegionAnalysis::newFunctionAnalysis(swift::SILFunction*) + 56
8  swift-frontend           0x0000000101673040 (anonymous namespace)::TransferNonSendable::run() + 324
9  swift-frontend           0x00000001016a7554 swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) + 3448
10 swift-frontend           0x00000001016a3b38 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) + 11968
11 swift-frontend           0x00000001016dd084 swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::__1::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) + 56
12 swift-frontend           0x00000001016c09e8 swift::ExecuteSILPipelineRequest::OutputType swift::Evaluator::getResultUncached<swift::ExecuteSILPipelineRequest, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()>(swift::ExecuteSILPipelineRequest const&, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()) + 412
13 swift-frontend           0x00000001016c3164 swift::runSILDiagnosticPasses(swift::SILModule&) + 612
14 swift-frontend           0x0000000100c3afc4 swift::CompilerInstance::performSILProcessing(swift::SILModule*) + 84
15 swift-frontend           0x0000000100865d68 performCompileStepsPostSILGen(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) + 1376
16 swift-frontend           0x0000000100864f74 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 984
17 swift-frontend           0x0000000100868228 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1680
18 swift-frontend           0x0000000100866f58 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
19 swift-frontend           0x00000001007ee01c swift::mainEntry(int, char const**) + 3680
20 dyld                     0x0000000188124274 start + 2840
Command SwiftCompile failed with a nonzero exit code

I hope it will be useful and helps to improve the compiler.

1 Like

Thanks for the bug report! A self-contained test case would be even better -- do you mind trying to come up with one?

No chance, project is really big and complex, I don't have time to isolate the issue.