Skip to content

[6.2, 6.1 regression] Misused isolated keyword crashes the compiler. #80363

Open
@YOCKOW

Description

@YOCKOW

Description

isolated keyword cannot precede a constant declaration.
The compiler must emit an error when such code is found.
While Swift 6.0.3 compiler does emit an error correctly, Swift 6.2-dev compiler crashes.

Reproduction

class C {}

func f() {
  isolated /* misused! */ let c = C()
}

Stack dump

Assertion failed: (isa<DestructorDecl>(decl)), function getIsolationFromAttributes, file TypeCheckConcurrency.cpp, line 4965.
Stack dump:
0.	Program arguments: /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-03-25-a.xctoolchain/usr/bin/swift-frontend -frontend -interpret _MisusedIsolatedKeyword_.swift -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -color-diagnostics -Xcc -fcolor-diagnostics -swift-version 6 -empty-abi-descriptor -no-auto-bridging-header-chaining -module-name _MisusedIsolatedKeyword_ -in-process-plugin-server-path /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-03-25-a.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -plugin-path /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-03-25-a.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-03-25-a.xctoolchain/usr/local/lib/swift/host/plugins -target-sdk-version 15.2 -target-sdk-name macosx15.2 -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server
1.	Apple Swift version 6.2-dev (LLVM 62b5a0f34622c56, Swift ea225d5485133ed)
2.	Compiling with the current language version
3.	While evaluating request TypeCheckPrimaryFileRequest(source_file "_MisusedIsolatedKeyword_.swift")
4.	While evaluating request TypeCheckFunctionBodyRequest(_MisusedIsolatedKeyword_.(file).f()@_MisusedIsolatedKeyword_.swift:3:6)
5.	While type-checking statement at [_MisusedIsolatedKeyword_.swift:3:10 - line:5:1] RangeText="{
  isolated /* misused! */ let c = C()
"
6.	While type-checking declaration 0x15601aed0 (at _MisusedIsolatedKeyword_.swift:4:27)
7.	While evaluating request ActorIsolationRequest(_MisusedIsolatedKeyword_.(file).f().c@_MisusedIsolatedKeyword_.swift:4:31)
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           0x00000001066a9424 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x00000001066a7b50 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x00000001066a9a6c SignalHandler(int, __siginfo*, void*) + 296
3  libsystem_platform.dylib 0x000000018f996de4 _sigtramp + 56
4  libsystem_pthread.dylib  0x000000018f95ff70 pthread_kill + 288
5  libsystem_c.dylib        0x000000018f86c908 abort + 128
6  libsystem_c.dylib        0x000000018f86bc1c err + 0
7  swift-frontend           0x0000000106715e58 getOverriddenIsolationFor(swift::ValueDecl const*) (.cold.1) + 0
8  swift-frontend           0x00000001020e4a98 getIsolationFromAttributes(swift::Decl const*, bool, bool) + 1536
9  swift-frontend           0x00000001020e2868 swift::ActorIsolationRequest::evaluate(swift::Evaluator&, swift::ValueDecl*) const + 820
10 swift-frontend           0x00000001025c43e8 swift::ActorIsolationRequest::OutputType swift::Evaluator::getResultUncached<swift::ActorIsolationRequest, swift::ActorIsolationRequest::OutputType swift::evaluateOrDefault<swift::ActorIsolationRequest>(swift::Evaluator&, swift::ActorIsolationRequest, swift::ActorIsolationRequest::OutputType)::'lambda'()>(swift::ActorIsolationRequest const&, swift::ActorIsolationRequest::OutputType swift::evaluateOrDefault<swift::ActorIsolationRequest>(swift::Evaluator&, swift::ActorIsolationRequest, swift::ActorIsolationRequest::OutputType)::'lambda'()) + 248
11 swift-frontend           0x00000001025c4200 swift::ActorIsolationRequest::OutputType swift::Evaluator::getResultCached<swift::ActorIsolationRequest, swift::ActorIsolationRequest::OutputType swift::evaluateOrDefault<swift::ActorIsolationRequest>(swift::Evaluator&, swift::ActorIsolationRequest, swift::ActorIsolationRequest::OutputType)::'lambda'(), (void*)0>(swift::ActorIsolationRequest const&, swift::ActorIsolationRequest::OutputType swift::evaluateOrDefault<swift::ActorIsolationRequest>(swift::Evaluator&, swift::ActorIsolationRequest, swift::ActorIsolationRequest::OutputType)::'lambda'()) + 388
12 swift-frontend           0x000000010252e7a0 swift::getActorIsolation(swift::ValueDecl*) + 104
13 swift-frontend           0x00000001020e556c swift::checkGlobalIsolation(swift::VarDecl*) + 48
14 swift-frontend           0x000000010215c5e0 (anonymous namespace)::DeclChecker::visitBoundVariable(swift::VarDecl*) + 124
15 swift-frontend           0x000000010215bfb8 void llvm::function_ref<void (swift::VarDecl*)>::callback_fn<(anonymous namespace)::DeclChecker::visitPatternBindingDecl(swift::PatternBindingDecl*)::'lambda'(swift::VarDecl*)>(long, swift::VarDecl*) + 64
16 swift-frontend           0x00000001021491cc (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 964
17 swift-frontend           0x0000000102148df0 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 116
18 swift-frontend           0x00000001021d1e24 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 152
19 swift-frontend           0x00000001021d053c bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 136
20 swift-frontend           0x00000001021cfe88 (anonymous namespace)::StmtChecker::typeCheckBody(swift::BraceStmt*&) + 48
21 swift-frontend           0x00000001021cfb98 swift::TypeCheckFunctionBodyRequest::evaluate(swift::Evaluator&, swift::AbstractFunctionDecl*) const + 1092
22 swift-frontend           0x00000001025b13b8 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'()) + 240
23 swift-frontend           0x000000010252a588 swift::AbstractFunctionDecl::getTypecheckedBody() const + 112
24 swift-frontend           0x0000000102659b24 swift::SourceFile::typeCheckDelayedFunctions() + 96
25 swift-frontend           0x0000000102217f6c swift::TypeCheckPrimaryFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 252
26 swift-frontend           0x00000001022197c4 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'()) + 232
27 swift-frontend           0x0000000102217e48 swift::performTypeChecking(swift::SourceFile&) + 84
28 swift-frontend           0x00000001011f5f90 bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_0>(long, swift::SourceFile&) + 16
29 swift-frontend           0x00000001011ed3a4 swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 164
30 swift-frontend           0x00000001011ed2e0 swift::CompilerInstance::performSema() + 76
31 swift-frontend           0x0000000100fbff10 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60
32 swift-frontend           0x0000000100fb56c4 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 716
33 swift-frontend           0x0000000100fb4e78 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2288
34 swift-frontend           0x0000000100d6c644 swift::mainEntry(int, char const**) + 3060
35 dyld                     0x000000018f5e0274 start + 2840

Expected behavior

As Swift 6.0.3 does, the compiler emits an error:

_MisusedIsolatedKeyword_.swift:4:3: error: consecutive statements on a line must be separated by ';'
2 | 
3 | func f() {
4 |   isolated /* misused! */ let c = C()
  |   `- error: consecutive statements on a line must be separated by ';'
5 | }

_MisusedIsolatedKeyword_.swift:4:3: error: cannot find 'isolated' in scope
2 | 
3 | func f() {
4 |   isolated /* misused! */ let c = C()
  |   `- error: cannot find 'isolated' in scope
5 | }

...with a better fix-it message.

Environment

(swift-DEVELOPMENT-SNAPSHOT-2025-03-25-a)

Apple Swift version 6.2-dev (LLVM 62b5a0f34622c56, Swift ea225d5485133ed)
Target: arm64-apple-macosx15.0
Build config: +assertions

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.compilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of softwareregressionswift 6.1swift 6.2type checkerArea → compiler: Semantic analysis

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions