Skip to content

ConstraintSystem crash in multi-statement closure: "Already has a fixed type!" #65360

@AnthonyLatsis

Description

@AnthonyLatsis
var a: Any?

let _: () -> Void = {
  for case (is Int)? in [a] {}
  if case (is Int, is Int) = a {}
}
Assertion failed: ((!getFixedType(0) || getFixedType(0)->isEqual(type)) && "Already has a fixed type!"), function assignFixedType, file ConstraintSystem.h, line 597.
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: bin/swift-frontend /Users/mac/Desktop/test.swift -typecheck
1.	Swift version 5.9-dev (LLVM 91080e65df791d6, Swift c1d5118c21da49a)
...
0  swift-frontend           0x0000000115913847 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39
1  swift-frontend           0x0000000115912b25 llvm::sys::RunSignalHandlers() + 85
2  swift-frontend           0x0000000115913e90 SignalHandler(int) + 288
3  libsystem_platform.dylib 0x00007ff816c4bdfd _sigtramp + 29
4  libsystem_platform.dylib 0xfffffffffffff000 _sigtramp + 18446603370198938144
5  libsystem_c.dylib        0x00007ff816b81d24 abort + 123
6  libsystem_c.dylib        0x00007ff816b810cb err + 0
7  swift-frontend           0x0000000115f803b3 swift::TypeVariableType::Implementation::assignFixedType(swift::Type, llvm::SmallVector<swift::constraints::SavedTypeVariableBinding, 16u>*) (.cold.3) + 35
8  swift-frontend           0x0000000110f974be swift::TypeVariableType::Implementation::assignFixedType(swift::Type, llvm::SmallVector<swift::constraints::SavedTypeVariableBinding, 16u>*) + 254
9  swift-frontend           0x0000000110f97154 swift::constraints::ConstraintSystem::assignFixedType(swift::TypeVariableType*, swift::Type, bool, bool) + 84
10 swift-frontend           0x0000000110e4811d bool llvm::function_ref<bool (swift::Type)>::callback_fn<swift::Type::visit(llvm::function_ref<void (swift::Type)>) const::'lambda'(swift::Type)>(long, swift::Type) + 13
11 swift-frontend           0x000000011171ee0e swift::Type::findIf(llvm::function_ref<bool (swift::Type)>) const::Walker::walkToTypePre(swift::Type) + 14
12 swift-frontend           0x00000001117350e5 swift::TypeVisitor<(anonymous namespace)::Traversal, bool>::visit(swift::Type) + 2197
13 swift-frontend           0x00000001117348f3 swift::TypeVisitor<(anonymous namespace)::Traversal, bool>::visit(swift::Type) + 163
14 swift-frontend           0x00000001117347b8 swift::Type::walk(swift::TypeWalker&) const + 56
15 swift-frontend           0x00000001117001b4 swift::Type::findIf(llvm::function_ref<bool (swift::Type)>) const + 36
16 swift-frontend           0x0000000110ecfaeb swift::constraints::ConstraintSystem::repairFailures(swift::Type, swift::Type, swift::constraints::ConstraintKind, swift::OptionSet<swift::constraints::ConstraintSystem::TypeMatchFlags, unsigned int>, llvm::SmallVectorImpl<swift::constraints::RestrictionOrFix>&, swift::constraints::ConstraintLocatorBuilder) + 10475
17 swift-frontend           0x0000000110ec19b0 swift::constraints::ConstraintSystem::matchTypes(swift::Type, swift::Type, swift::constraints::ConstraintKind, swift::OptionSet<swift::constraints::ConstraintSystem::TypeMatchFlags, unsigned int>, swift::constraints::ConstraintLocatorBuilder) + 16096
18 swift-frontend           0x0000000110ef32d0 swift::constraints::ConstraintSystem::simplifyConstraint(swift::constraints::Constraint const&) + 2784
19 swift-frontend           0x0000000110f0438b swift::constraints::ConstraintSystem::simplify() + 395
20 swift-frontend           0x0000000110e88bf2 swift::constraints::TypeVariableBinding::attempt(swift::constraints::ConstraintSystem&) const + 1122
21 swift-frontend           0x0000000110f1c89d swift::constraints::BindingStep<swift::constraints::TypeVarBindingProducer>::take(bool) + 525
22 swift-frontend           0x0000000110f1c5ed swift::constraints::TypeVariableStep::resume(bool) + 317
23 swift-frontend           0x0000000110f0691c swift::constraints::ConstraintSystem::solveImpl(llvm::SmallVectorImpl<swift::constraints::Solution>&) + 572
24 swift-frontend           0x0000000110fa650a swift::constraints::ConstraintSystem::salvage() + 218
25 swift-frontend           0x0000000110f083d6 swift::constraints::ConstraintSystem::solve(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 582
26 swift-frontend           0x0000000111096f88 swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 296
27 swift-frontend           0x0000000111096e07 swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 183
28 swift-frontend           0x0000000111098665 swift::TypeChecker::typeCheckBinding(swift::Pattern*&, swift::Expr*&, swift::DeclContext*, swift::Type, swift::PatternBindingDecl*, unsigned int, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 117
29 swift-frontend           0x0000000111098948 swift::TypeChecker::typeCheckPatternBinding(swift::PatternBindingDecl*, unsigned int, swift::Type, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 424
30 swift-frontend           0x00000001110e1db5 swift::ASTVisitor<(anonymous namespace)::DeclChecker, void, void, void, void, void, void>::visit(swift::Decl*) + 4149
31 swift-frontend           0x00000001110dc4f0 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 320
32 swift-frontend           0x00000001110dc38f swift::TypeChecker::typeCheckDecl(swift::Decl*, bool) + 143
33 swift-frontend           0x0000000111186d6c swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 300
34 swift-frontend           0x00000001111852f3 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 131
35 swift-frontend           0x0000000111187236 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 1526
36 swift-frontend           0x0000000111186c03 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::Stmt>(swift::Stmt*&) + 131
37 swift-frontend           0x0000000111183b03 (anonymous namespace)::StmtChecker::typeCheckASTNode(swift::ASTNode&) + 147
38 swift-frontend           0x0000000111186d6c swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 300
39 swift-frontend           0x00000001111852f3 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 131
40 swift-frontend           0x0000000111185382 swift::TypeChecker::typeCheckTopLevelCodeDecl(swift::TopLevelCodeDecl*) + 50
41 swift-frontend           0x00000001111c2855 swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 229
42 swift-frontend           0x00000001111c4b81 llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest>(swift::TypeCheckSourceFileRequest const&) + 401
43 swift-frontend           0x00000001111c4927 llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultCached<swift::TypeCheckSourceFileRequest, (void*)0>(swift::TypeCheckSourceFileRequest const&) + 55
44 swift-frontend           0x00000001111c269f swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType) + 31
45 swift-frontend           0x0000000110080e1c bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_7>(long, swift::SourceFile&) + 12
46 swift-frontend           0x000000011007793e swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 174
47 swift-frontend           0x000000011007786b swift::CompilerInstance::performSema() + 75
48 swift-frontend           0x000000010fe610be performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1742
49 swift-frontend           0x000000010fe5fb20 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3232
50 swift-frontend           0x000000010fe250b3 swift::mainEntry(int, char const**) + 1203
51 dyld                     0x00000001371da52e start + 462
Abort trap: 6

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.closuresFeature: closurescompilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of softwaremulti-statement closuresFeature → closures: multi-statement closurespattern matchingFeature: pattern matchingpatternsFeature: patternsstatementsFeature: statementsswift 5.9type checkerArea → compiler: Semantic analysis

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions