Skip to content

Switching on unqualified enum case in closure with self capture crashes compiler #80657

@hamishknight

Description

@hamishknight

This hits an AST verification error, and crashes in SILGen if you disable the verifier:

enum E {
  case e

  static func foo() {
    _ = { [self] in
      switch e {
      case e:
        break
      default:
        break
      }
    }
  }
}
VarDecl is missing a Generic Environment: <<error type>>
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: /Users/hamish/src/swift-dev/build/Release/swift-macosx-arm64/bin/swift-frontend -typecheck /Users/hamish/src/swift-test-arena/main.swift -sdk /Users/hamish/src/MacOSX.sdk -debug-diagnostic-names -diagnostic-style=llvm
1.      Swift version 6.2-dev (LLVM b50d46753102412, Swift 5674b6e047b7b96)
2.      Compiling with effective version 5.10
3.      While walking into 'E' (at /Users/hamish/src/swift-test-arena/main.swift:930:1)
4.      While walking into body of 'foo()' (at /Users/hamish/src/swift-test-arena/main.swift:933:3)
5.      While verifying VarDecl 'self' (at /Users/hamish/src/swift-test-arena/main.swift:934:12)
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           0x000000010a6fbed4 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x000000010a6fa1f0 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x000000010a6fc550 SignalHandler(int, __siginfo*, void*) + 324
3  libsystem_platform.dylib 0x000000018677b624 _sigtramp + 56
4  libsystem_pthread.dylib  0x000000018674188c pthread_kill + 296
5  libsystem_c.dylib        0x000000018664ac60 abort + 124
6  swift-frontend           0x000000010a778618 (anonymous namespace)::Verifier::verifyChecked(swift::AbstractStorageDecl*) (.cold.2) + 0
7  swift-frontend           0x000000010600b5b0 (anonymous namespace)::Verifier::verifyChecked(swift::VarDecl*) + 736
8  swift-frontend           0x0000000105fff0b0 (anonymous namespace)::Verifier::walkToDeclPost(swift::Decl*) + 2660
9  swift-frontend           0x000000010600cdcc (anonymous namespace)::Traversal::doIt(swift::Decl*) + 308
10 swift-frontend           0x000000010600ebdc swift::Pattern* llvm::function_ref<swift::Pattern* (swift::Pattern*)>::callback_fn<(anonymous namespace)::Traversal::doIt(swift::Pattern*)::'lambda'(swift::Pattern*)>(long, swift::Pattern*) + 376
11 swift-frontend           0x000000010600e178 swift::Pattern* (anonymous namespace)::Traversal::traverse<swift::Pattern>(swift::ASTWalker::PreWalkResult<swift::Pattern*>, llvm::function_ref<swift::Pattern* (swift::Pattern*)>, llvm::function_ref<swift::ASTWalker::PostWalkResult<swift::Pattern*> (swift::Pattern*)>) + 84
12 swift-frontend           0x000000010600fd0c (anonymous namespace)::Traversal::visit(swift::Decl*) + 2436
13 swift-frontend           0x000000010600cdb4 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 284
14 swift-frontend           0x000000010600d300 (anonymous namespace)::Traversal::visitCaptureListExpr(swift::CaptureListExpr*) + 56
15 swift-frontend           0x000000010600c4e0 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 372
16 swift-frontend           0x000000010600d8e4 (anonymous namespace)::Traversal::visitAssignExpr(swift::AssignExpr*) + 60
17 swift-frontend           0x000000010600c5c8 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 604
18 swift-frontend           0x000000010600e350 swift::Stmt* llvm::function_ref<swift::Stmt* (swift::Stmt*)>::callback_fn<(anonymous namespace)::Traversal::doIt(swift::Stmt*)::'lambda'(swift::Stmt*)>(long, swift::Stmt*) + 372
19 swift-frontend           0x000000010600e178 swift::Pattern* (anonymous namespace)::Traversal::traverse<swift::Pattern>(swift::ASTWalker::PreWalkResult<swift::Pattern*>, llvm::function_ref<swift::Pattern* (swift::Pattern*)>, llvm::function_ref<swift::ASTWalker::PostWalkResult<swift::Pattern*> (swift::Pattern*)>) + 84
20 swift-frontend           0x00000001060106b0 (anonymous namespace)::Traversal::visitAbstractFunctionDecl(swift::AbstractFunctionDecl*) + 656
21 swift-frontend           0x000000010600f414 (anonymous namespace)::Traversal::visit(swift::Decl*) + 140
22 swift-frontend           0x000000010600cdb4 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 284
23 swift-frontend           0x00000001060102c8 (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 460
24 swift-frontend           0x000000010600f404 (anonymous namespace)::Traversal::visit(swift::Decl*) + 124
25 swift-frontend           0x000000010600cdb4 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 284
26 swift-frontend           0x000000010600cc8c swift::Decl::walk(swift::ASTWalker&) + 32
27 swift-frontend           0x00000001061b6b88 swift::SourceFile::walk(swift::ASTWalker&) + 172
28 swift-frontend           0x0000000105ffc0ac swift::verify(swift::SourceFile&) + 80
29 swift-frontend           0x00000001062be93c swift::TypeCheckPrimaryFileRequest::cacheResult(std::__1::tuple<>) const + 76
30 swift-frontend           0x0000000105d94e48 swift::performTypeChecking(swift::SourceFile&) + 92
31 swift-frontend           0x0000000104dc85f8 bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_0>(long, swift::SourceFile&) + 16
32 swift-frontend           0x0000000104dbf9c8 swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 164
33 swift-frontend           0x0000000104dbf904 swift::CompilerInstance::performSema() + 76
34 swift-frontend           0x0000000104b82274 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60
35 swift-frontend           0x0000000104b77c68 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 700
36 swift-frontend           0x0000000104b7745c swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2252
37 swift-frontend           0x0000000104959878 swift::mainEntry(int, char const**) + 3112
38 dyld                     0x00000001863a2b4c start + 6000
fish: Job 1, './swift -frontend -typecheck ~/…' terminated by signal SIGABRT (Abort)

Metadata

Metadata

Assignees

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 softwarepattern matchingFeature: pattern matchingpatternsFeature: patternstype checkerArea → compiler: Semantic analysis

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions