Skip to content

Compiler crash in pack iteration #71921

@MaxDesiatov

Description

@MaxDesiatov

Description

Simple pack iteration snippet crashes the compiler.

Reproduction

protocol Signal {
    mutating func process() -> Float
}

struct Mixer<each Source: Signal> {
    var sources: (repeat each Source)

    mutating func process() -> Float {
        var result: Float = 0

        self.sources = (repeat ({
            var signal = $0
            result += signal.process()
            return signal
        }(each sources)))

        return result
    }
}

Stack dump

1.	Apple Swift version 5.11-dev (LLVM 87ace14daa2139a, Swift 8bb684628593220)
2.	Compiling with the current language version
3.	While walking into 'Mixer' (at repro.swift:5:1)
4.	While walking into body of 'process()' (at repro.swift:8:14)
5.	While verifying VarDecl '$0' (at repro.swift:11:33)
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           0x0000000109d02888 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000109d01054 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x0000000109d02ed0 SignalHandler(int) + 304
3  libsystem_platform.dylib 0x0000000183cf9a24 _sigtramp + 56
4  libsystem_pthread.dylib  0x0000000183cc9cc0 pthread_kill + 288
5  libsystem_c.dylib        0x0000000183bd5a40 abort + 180
6  swift-frontend           0x000000010a1ca420 (anonymous namespace)::Verifier::verifyChecked(swift::AbstractStorageDecl*) (.cold.1) + 0
7  swift-frontend           0x0000000105ec385c (anonymous namespace)::Verifier::verifyChecked(swift::VarDecl*) + 748
8  swift-frontend           0x0000000105eb1e84 (anonymous namespace)::Verifier::walkToDeclPost(swift::Decl*) + 2792
9  swift-frontend           0x0000000105ec5250 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 312
10 swift-frontend           0x0000000105ec5968 (anonymous namespace)::Traversal::visitClosureExpr(swift::ClosureExpr*) + 104
11 swift-frontend           0x0000000105ec4978 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 676
12 swift-frontend           0x0000000105ec6778 (anonymous namespace)::Traversal::visitApplyExpr(swift::ApplyExpr*) + 40
13 swift-frontend           0x0000000105ec47b0 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 220
14 swift-frontend           0x0000000105ec4784 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 176
15 swift-frontend           0x0000000105ec47c0 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 236
16 swift-frontend           0x0000000105ec572c (anonymous namespace)::Traversal::visitTupleExpr(swift::TupleExpr*) + 88
17 swift-frontend           0x0000000105ec485c (anonymous namespace)::Traversal::doIt(swift::Expr*) + 392
18 swift-frontend           0x0000000105ec6058 (anonymous namespace)::Traversal::visitAssignExpr(swift::AssignExpr*) + 60
19 swift-frontend           0x0000000105ec48f4 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 544
20 swift-frontend           0x0000000105ec6b64 swift::Stmt* llvm::function_ref<swift::Stmt* (swift::Stmt*)>::callback_fn<(anonymous namespace)::Traversal::doIt(swift::Stmt*)::'lambda'(swift::Stmt*)>(long, swift::Stmt*) + 380
21 swift-frontend           0x0000000105ec6984 swift::Stmt* (anonymous namespace)::Traversal::traverse<swift::Stmt>(swift::ASTWalker::PreWalkResult<swift::Stmt*>, llvm::function_ref<swift::Stmt* (swift::Stmt*)>, llvm::function_ref<swift::ASTWalker::PostWalkResult<swift::Stmt*> (swift::Stmt*)>) + 84
22 swift-frontend           0x0000000105ec89c8 (anonymous namespace)::Traversal::visitAbstractFunctionDecl(swift::AbstractFunctionDecl*) + 660
23 swift-frontend           0x0000000105ec77b8 (anonymous namespace)::Traversal::visit(swift::Decl*) + 156
24 swift-frontend           0x0000000105ec5238 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 288
25 swift-frontend           0x0000000105ec85c0 (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 480
26 swift-frontend           0x0000000105ec77a8 (anonymous namespace)::Traversal::visit(swift::Decl*) + 140
27 swift-frontend           0x0000000105ec5238 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 288
28 swift-frontend           0x0000000105ec510c swift::Decl::walk(swift::ASTWalker&) + 32
29 swift-frontend           0x000000010609d538 swift::SourceFile::walk(swift::ASTWalker&) + 248
30 swift-frontend           0x0000000105eaeed0 swift::verify(swift::SourceFile&) + 96
31 swift-frontend           0x00000001061c04e4 swift::TypeCheckSourceFileRequest::cacheResult(std::__1::tuple<>) const + 76
32 swift-frontend           0x0000000105bbc950 swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType) + 44
33 swift-frontend           0x0000000104af3b64 bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_7>(long, swift::SourceFile&) + 16
34 swift-frontend           0x0000000104aed98c swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 76
35 swift-frontend           0x0000000104aed920 swift::CompilerInstance::performSema() + 76
36 swift-frontend           0x00000001048ca160 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60
37 swift-frontend           0x00000001048bbaf4 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 708
38 swift-frontend           0x00000001048bab28 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2292
39 swift-frontend           0x0000000104709768 swift::mainEntry(int, char const**) + 3096
40 dyld                     0x00000001839490e0 start + 2360

Expected behavior

This code compiles or an actionable diagnostic message is emitted

Environment

Apple Swift version 5.11-dev (LLVM 87ace14daa2139a, Swift 8bb6846)
Target: arm64-apple-macosx14.0

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    assertion failureBug → crash: An assertion failurebugA deviation from expected or documented behavior. Also: expected but undesirable behavior.closuresFeature: closurescompilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of softwareexpressionsFeature: expressionsgenericsFeature: generic declarations and typespack expansionsFeature → expressions: Pack expansion expressionsparameter packsFeature → generics: Parameter packsswift 6.0type checkerArea → compiler: Semantic analysisverifier

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions