Skip to content

Pack expansion with element archetype crashes compiler #78934

@hamishknight

Description

@hamishknight

This crashes the compiler:

func foo<each T, each U>(xs: repeat each T, ys: repeat each U) {
  for y in repeat each ys {
    let x = (repeat (each xs, y))
  }
}
Assertion failed: (!elementEnv || elementEnv == archetype->getGenericEnvironment()), function operator(), file GenericEnvironment.cpp, line 677.
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 -swift-version 6
1.      Swift version 6.2-dev (LLVM 6f7170a253856b8, Swift 95dca81d243d563)
2.      Compiling with the current language version
3.      While evaluating request TypeCheckSourceFileRequest(source_file "/Users/hamish/src/swift-test-arena/main.swift")
4.      While evaluating request TypeCheckFunctionBodyRequest(main.(file).foo(xs:ys:)@/Users/hamish/src/swift-test-arena/main.swift:666:6)
5.      While type-checking statement at [/Users/hamish/src/swift-test-arena/main.swift:666:64 - line:670:1] RangeText="{
  for y in repeat each ys {
    let x = (repeat (each xs, y))
  }
"
6.      While type-checking statement at [/Users/hamish/src/swift-test-arena/main.swift:667:3 - line:669:3] RangeText="for y in repeat each ys {
    let x = (repeat (each xs, y))
  "
7.      While type-checking statement at [/Users/hamish/src/swift-test-arena/main.swift:667:27 - line:669:3] RangeText="{
    let x = (repeat (each xs, y))
  "
8.      While type-checking declaration 0x1339c5e18 (at /Users/hamish/src/swift-test-arena/main.swift:668:5)
9.      While evaluating request PatternBindingEntryRequest((unknown decl)@/Users/hamish/src/swift-test-arena/main.swift:668:5, 0)
10.     While type-checking expression at [/Users/hamish/src/swift-test-arena/main.swift:668:13 - line:668:33] RangeText="(repeat (each xs, y)"
11.     While type-checking-target starting at /Users/hamish/src/swift-test-arena/main.swift:668:13
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           0x0000000109f313b4 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000109f2f6d0 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x0000000109f31a10 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x00000001810b4184 _sigtramp + 56
4  libsystem_pthread.dylib  0x000000018107ef70 pthread_kill + 288
5  libsystem_c.dylib        0x0000000180f8b908 abort + 128
6  libsystem_c.dylib        0x0000000180f8ac1c err + 0
7  swift-frontend           0x0000000109fb2998 swift::Type llvm::function_ref<swift::Type (swift::SubstitutableType*)>::callback_fn<swift::GenericEnvironment::mapElementTypeIntoPackContext(swift::Type) const::$_1>(long, swift::SubstitutableType*) (.cold.2) + 0
8  swift-frontend           0x0000000105a2fcd4 swift::Type llvm::function_ref<swift::Type (swift::SubstitutableType*)>::callback_fn<swift::GenericEnvironment::mapElementTypeIntoPackContext(swift::Type) const::$_0>(long, swift::SubstitutableType*) + 72
9  swift-frontend           0x0000000105b66130 swift::InFlightSubstitution::substType(swift::SubstitutableType*, unsigned int) + 48
10 swift-frontend           0x0000000105b6b7dc (anonymous namespace)::TypeSubstituter::transformLocalArchetypeType(swift::LocalArchetypeType*, swift::TypePosition) + 56
11 swift-frontend           0x0000000105b67584 swift::TypeTransform<(anonymous namespace)::TypeSubstituter>::doIt(swift::Type, swift::TypePosition) + 2288
12 swift-frontend           0x0000000105b67180 swift::TypeTransform<(anonymous namespace)::TypeSubstituter>::doIt(swift::Type, swift::TypePosition) + 1260
13 swift-frontend           0x0000000105b669d4 swift::Type::subst(swift::InFlightSubstitution&) const + 728
14 swift-frontend           0x0000000105b6609c swift::Type::subst(llvm::function_ref<swift::Type (swift::SubstitutableType*)>, llvm::function_ref<swift::ProtocolConformanceRef (swift::CanType, swift::Type, swift::ProtocolDecl*)>, swift::SubstOptions) const + 404
15 swift-frontend           0x0000000105a2f010 swift::GenericEnvironment::mapElementTypeIntoPackContext(swift::Type) const + 124
16 swift-frontend           0x00000001053c8324 swift::constraints::ConstraintSystem::simplifyPackElementOfConstraint(swift::Type, swift::Type, swift::optionset::OptionSet<swift::constraints::ConstraintSystem::TypeMatchFlags, unsigned int>, swift::constraints::ConstraintLocatorBuilder) + 468
17 swift-frontend           0x00000001053d9cb0 swift::constraints::ConstraintSystem::addConstraintImpl(swift::constraints::ConstraintKind, swift::Type, swift::Type, swift::constraints::ConstraintLocatorBuilder, bool) + 844
18 swift-frontend           0x00000001053b64f0 swift::constraints::ConstraintSystem::addConstraint(swift::constraints::ConstraintKind, swift::Type, swift::Type, swift::constraints::ConstraintLocatorBuilder, bool) + 76
19 swift-frontend           0x000000010539c698 (anonymous namespace)::ConstraintWalker::walkToExprPost(swift::Expr*) + 11468
20 swift-frontend           0x00000001058bb640 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 988
21 swift-frontend           0x00000001058bc16c (anonymous namespace)::Traversal::visitTupleExpr(swift::TupleExpr*) + 88
22 swift-frontend           0x00000001058bb3c8 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 356
23 swift-frontend           0x00000001058bb258 swift::Expr::walk(swift::ASTWalker&) + 32
24 swift-frontend           0x0000000105396e10 swift::constraints::ConstraintSystem::generateConstraints(swift::Expr*, swift::DeclContext*) + 164
25 swift-frontend           0x000000010539575c swift::constraints::ConstraintSystem::generateConstraints(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 512
26 swift-frontend           0x00000001053ee89c swift::constraints::ConstraintSystem::solveImpl(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 392
27 swift-frontend           0x00000001053ee1b8 swift::constraints::ConstraintSystem::solve(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 144
28 swift-frontend           0x0000000105567848 swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::DiagnosticTransaction*) + 284
29 swift-frontend           0x00000001055676d0 swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::DiagnosticTransaction*) + 196
30 swift-frontend           0x0000000105568854 swift::TypeChecker::typeCheckBinding(swift::Pattern*&, swift::Expr*&, swift::DeclContext*, swift::Type, swift::PatternBindingDecl*, unsigned int, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 120
31 swift-frontend           0x0000000105568a8c swift::TypeChecker::typeCheckPatternBinding(swift::PatternBindingDecl*, unsigned int, swift::Type, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 248
32 swift-frontend           0x0000000105635964 swift::PatternBindingEntryRequest::evaluate(swift::Evaluator&, swift::PatternBindingDecl*, unsigned int) const + 1912
33 swift-frontend           0x000000010594b27c swift::PatternBindingEntryRequest::OutputType swift::Evaluator::getResultUncached<swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType swift::evaluateOrDefault<swift::PatternBindingEntryRequest>(swift::Evaluator&, swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType)::'lambda'()>(swift::PatternBindingEntryRequest const&, swift::PatternBindingEntryRequest::OutputType swift::evaluateOrDefault<swift::PatternBindingEntryRequest>(swift::Evaluator&, swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType)::'lambda'()) + 212
34 swift-frontend           0x000000010591d984 swift::PatternBindingDecl::getCheckedPatternBindingEntry(unsigned int) const + 124
35 swift-frontend           0x00000001055adf80 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 2084
36 swift-frontend           0x00000001055ad744 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 116
37 swift-frontend           0x000000010562e4bc swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 136
38 swift-frontend           0x000000010562ccf4 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 136
39 swift-frontend           0x000000010562ed00 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 2252
40 swift-frontend           0x000000010562e400 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::Stmt>(swift::Stmt*&) + 136
41 swift-frontend           0x000000010562b278 (anonymous namespace)::StmtChecker::typeCheckASTNode(swift::ASTNode&) + 164
42 swift-frontend           0x000000010562e4bc swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 136
43 swift-frontend           0x000000010562ccf4 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 136
44 swift-frontend           0x000000010562c688 (anonymous namespace)::StmtChecker::typeCheckBody(swift::BraceStmt*&) + 32
45 swift-frontend           0x000000010562c3e0 swift::TypeCheckFunctionBodyRequest::evaluate(swift::Evaluator&, swift::AbstractFunctionDecl*) const + 1100
46 swift-frontend           0x00000001059b539c 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'()) + 224
47 swift-frontend           0x0000000105933dc0 swift::AbstractFunctionDecl::getTypecheckedBody() const + 112
48 swift-frontend           0x0000000105a54770 swift::SourceFile::typeCheckDelayedFunctions() + 96
49 swift-frontend           0x0000000105671d3c swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 228
50 swift-frontend           0x000000010567350c swift::TypeCheckSourceFileRequest::OutputType swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType)::'lambda'()>(swift::TypeCheckSourceFileRequest const&, swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType)::'lambda'()) + 216
51 swift-frontend           0x0000000105671c30 swift::performTypeChecking(swift::SourceFile&) + 84
52 swift-frontend           0x00000001046d121c bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_0>(long, swift::SourceFile&) + 16
53 swift-frontend           0x00000001046ca858 swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 164
54 swift-frontend           0x00000001046ca794 swift::CompilerInstance::performSema() + 76
55 swift-frontend           0x000000010448d40c withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60
56 swift-frontend           0x0000000104483068 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 700
57 swift-frontend           0x00000001044828c4 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2208
58 swift-frontend           0x000000010426d530 swift::mainEntry(int, char const**) + 3052
59 dyld                     0x0000000180cfc274 start + 2840
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 softwaregenericsFeature: generic declarations and typespack expansionsFeature → expressions: Pack expansion expressionspack iterationFeature → statements → for-in: Pack iterationparameter packsFeature → generics: Parameter packsswift 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