Open
Description
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