Closed
Description
Description
New swift 6.1/6.2 crashes when compiling generics.
Similar to fixed one #79244 but still reproducing on main version from 28.02.2025
Reproduction
public protocol P: Equatable {
associatedtype Object: Identifiable
}
public protocol Cache<Proto>: Sendable {
associatedtype Proto: P
subscript(_: Proto.Object.ID) -> Proto? { get }
}
struct ID1: Hashable {
let rawValue: Int64
}
struct O: Identifiable {
typealias ID = ID1
var id: ID1 {
.init(rawValue: .random(in: 0..<Int64.max))
}
}
struct S: P {
typealias Object = O
}
func foo(_ c: any Cache<S>) {
c[ID1(rawValue: 0)]
}
Stack dump
Term verification failed
Initial term: τ_0_0.[P:Object]
Erased term: τ_0_0.Object
Simplified term: τ_0_0.Object
Requirement machine for <τ_0_0>
Rewrite system: {
}
Property map: {
}
Conformance paths: {
}
Stack dump:
0. Program arguments: /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-02-28-a.xctoolchain/usr/bin/swift-frontend -frontend -interpret main.swift -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -color-diagnostics -empty-abi-descriptor -resource-dir /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-02-28-a.xctoolchain/usr/lib/swift -no-auto-bridging-header-chaining -module-name main -in-process-plugin-server-path /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-02-28-a.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -plugin-path /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-02-28-a.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-02-28-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 6e0f052df8282a3, Swift 659adcd481f01a1)
2. Compiling with effective version 5.10
3. While evaluating request TypeCheckPrimaryFileRequest(source_file "main.swift")
4. While evaluating request TypeCheckFunctionBodyRequest(main.(file)[email protected]:26:6)
5. While type-checking statement at [main.swift:26:29 - line:28:1] RangeText="{
c[ID1(rawValue: 0)]
"
6. While type-checking expression at [main.swift:27:5 - line:27:23] RangeText="c[ID1(rawValue: 0)"
7. While type-checking-target starting at main.swift:27:6
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 0x000000010a8b3c40 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1 swift-frontend 0x000000010a8b236c llvm::sys::RunSignalHandlers() + 112
2 swift-frontend 0x000000010a8b4288 SignalHandler(int, __siginfo*, void*) + 296
3 libsystem_platform.dylib 0x000000019e542de4 _sigtramp + 56
4 libsystem_pthread.dylib 0x000000019e50bf70 pthread_kill + 288
5 libsystem_c.dylib 0x000000019e418908 abort + 128
6 swift-frontend 0x000000010a9376b8 swift::rewriting::RequirementMachine::verify(swift::rewriting::MutableTerm const&) const (.cold.6) + 0
7 swift-frontend 0x0000000106909f24 swift::rewriting::RequirementMachine::verify(swift::rewriting::MutableTerm const&) const + 1060
8 swift-frontend 0x000000010690a278 swift::rewriting::RequirementMachine::requiresProtocol(swift::Type, swift::ProtocolDecl const*) const + 136
9 swift-frontend 0x0000000106974fb4 swift::SubstitutionMap::lookupConformance(swift::CanType, swift::ProtocolDecl*) const + 152
10 swift-frontend 0x00000001069a79f8 swift::LookUpConformanceInSubstitutionMap::operator()(swift::CanType, swift::Type, swift::ProtocolDecl*) const + 252
11 swift-frontend 0x00000001069766e8 swift::OuterSubstitutions::operator()(swift::CanType, swift::Type, swift::ProtocolDecl*) const + 100
12 swift-frontend 0x00000001069a8ba0 swift::InFlightSubstitution::lookupConformance(swift::CanType, swift::Type, swift::ProtocolDecl*, unsigned int) + 52
13 swift-frontend 0x00000001069ae678 (anonymous namespace)::TypeSubstituter::transformDependentMemberType(swift::DependentMemberType*, swift::TypePosition) + 272
14 swift-frontend 0x00000001069a9cb4 swift::TypeTransform<(anonymous namespace)::TypeSubstituter>::doIt(swift::Type, swift::TypePosition) + 2368
15 swift-frontend 0x00000001069a9098 swift::Type::subst(swift::InFlightSubstitution&) const + 748
16 swift-frontend 0x00000001069a8694 swift::Type::subst(llvm::function_ref<swift::Type (swift::SubstitutableType*)>, llvm::function_ref<swift::ProtocolConformanceRef (swift::CanType, swift::Type, swift::ProtocolDecl*)>, swift::SubstOptions) const + 420
17 swift-frontend 0x00000001062aa16c swift::Type llvm::function_ref<swift::Type (swift::Type, swift::TypePosition)>::callback_fn<swift::typeEraseOpenedExistentialReference(swift::Type, swift::Type, swift::TypeVariableType*, swift::TypePosition)::$_4>(long, swift::Type, swift::TypePosition) + 320
18 swift-frontend 0x00000001062a9e58 std::__1::optional<swift::Type> llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*, swift::TypePosition)>::callback_fn<typeEraseExistentialSelfReferences(swift::Type, swift::TypePosition, llvm::function_ref<bool (swift::Type)>, llvm::function_ref<bool (swift::Type)>, llvm::function_ref<swift::Type (swift::Type, swift::TypePosition)>)::$_0>(long, swift::TypeBase*, swift::TypePosition) + 652
19 swift-frontend 0x000000010698a040 swift::TypeTransform<swift::Type::transformWithPosition(swift::TypePosition, llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*, swift::TypePosition)>) const::Transform>::doIt(swift::Type, swift::TypePosition) + 80
20 swift-frontend 0x000000010698a258 swift::TypeTransform<swift::Type::transformWithPosition(swift::TypePosition, llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*, swift::TypePosition)>) const::Transform>::doIt(swift::Type, swift::TypePosition) + 616
21 swift-frontend 0x0000000106989fb0 swift::Type::transformWithPosition(swift::TypePosition, llvm::function_ref<std::__1::optional<swift::Type> (swift::TypeBase*, swift::TypePosition)>) const + 112
22 swift-frontend 0x00000001062a9788 swift::typeEraseOpenedExistentialReference(swift::Type, swift::Type, swift::TypeVariableType*, swift::TypePosition) + 288
23 swift-frontend 0x00000001062c677c swift::constraints::ConstraintSystem::getMemberReferenceTypeFromOpenedType(swift::Type&, swift::Type, swift::ValueDecl*, swift::DeclContext*, swift::constraints::ConstraintLocator*, bool, bool, llvm::ArrayRef<std::__1::pair<swift::GenericTypeParamType*, swift::TypeVariableType*>>) + 768
24 swift-frontend 0x00000001062c82c4 swift::constraints::ConstraintSystem::getTypeOfMemberReference(swift::Type, swift::ValueDecl*, swift::DeclContext*, bool, swift::FunctionRefInfo, swift::constraints::ConstraintLocator*, llvm::SmallVectorImpl<std::__1::pair<swift::GenericTypeParamType*, swift::TypeVariableType*>>*) + 5616
25 swift-frontend 0x00000001062c9cac swift::constraints::ConstraintSystem::resolveOverload(swift::constraints::ConstraintLocator*, swift::Type, swift::constraints::OverloadChoice, swift::DeclContext*) + 360
26 swift-frontend 0x00000001061ad580 swift::constraints::ConstraintSystem::simplifyConstraint(swift::constraints::Constraint const&) + 1568
27 swift-frontend 0x000000010619e30c swift::constraints::ConstraintSystem::simplifyMemberConstraint(swift::constraints::ConstraintKind, swift::Type, swift::DeclNameRef, swift::Type, swift::DeclContext*, swift::FunctionRefInfo, llvm::ArrayRef<swift::constraints::OverloadChoice>, swift::optionset::OptionSet<swift::constraints::ConstraintSystem::TypeMatchFlags, unsigned int>, swift::constraints::ConstraintLocatorBuilder) + 2372
28 swift-frontend 0x0000000106170d20 swift::constraints::ConstraintSystem::addValueMemberConstraint(swift::Type, swift::DeclNameRef, swift::Type, swift::DeclContext*, swift::FunctionRefInfo, llvm::ArrayRef<swift::constraints::OverloadChoice>, swift::constraints::ConstraintLocatorBuilder) + 228
29 swift-frontend 0x00000001061719ac (anonymous namespace)::ConstraintGenerator::addSubscriptConstraints(swift::Expr*, swift::Type, swift::ValueDecl*, swift::ArgumentList*, swift::constraints::ConstraintLocator*, llvm::SmallVectorImpl<swift::TypeVariableType*>*) + 1284
30 swift-frontend 0x000000010616b0ec (anonymous namespace)::ConstraintWalker::walkToExprPost(swift::Expr*) + 11908
31 swift-frontend 0x00000001066dfeb8 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 988
32 swift-frontend 0x00000001066dfad0 swift::Expr::walk(swift::ASTWalker&) + 32
33 swift-frontend 0x0000000106164c24 swift::constraints::ConstraintSystem::generateConstraints(swift::Expr*, swift::DeclContext*) + 180
34 swift-frontend 0x0000000106163514 swift::constraints::ConstraintSystem::generateConstraints(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 524
35 swift-frontend 0x00000001061c2870 swift::constraints::ConstraintSystem::solveImpl(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 408
36 swift-frontend 0x00000001061c2160 swift::constraints::ConstraintSystem::solve(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 160
37 swift-frontend 0x000000010634fa98 swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::DiagnosticTransaction*) + 296
38 swift-frontend 0x000000010634f914 swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>, swift::DiagnosticTransaction*) + 196
39 swift-frontend 0x000000010634f7dc swift::TypeChecker::typeCheckExpression(swift::Expr*&, swift::DeclContext*, swift::constraints::ContextualTypeInfo, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 96
40 swift-frontend 0x000000010641cf78 (anonymous namespace)::StmtChecker::typeCheckASTNode(swift::ASTNode&) + 252
41 swift-frontend 0x00000001064203a4 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 152
42 swift-frontend 0x000000010641eac8 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 136
43 swift-frontend 0x000000010641e414 (anonymous namespace)::StmtChecker::typeCheckBody(swift::BraceStmt*&) + 48
44 swift-frontend 0x000000010641e124 swift::TypeCheckFunctionBodyRequest::evaluate(swift::Evaluator&, swift::AbstractFunctionDecl*) const + 1092
45 swift-frontend 0x00000001067e6a70 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
46 swift-frontend 0x000000010675f910 swift::AbstractFunctionDecl::getTypecheckedBody() const + 112
47 swift-frontend 0x000000010688c650 swift::SourceFile::typeCheckDelayedFunctions() + 96
48 swift-frontend 0x0000000106466344 swift::TypeCheckPrimaryFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 244
49 swift-frontend 0x0000000106467b9c 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
50 swift-frontend 0x0000000106466228 swift::performTypeChecking(swift::SourceFile&) + 84
51 swift-frontend 0x0000000105456c64 bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_0>(long, swift::SourceFile&) + 16
52 swift-frontend 0x000000010544e190 swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 164
53 swift-frontend 0x000000010544e0cc swift::CompilerInstance::performSema() + 76
54 swift-frontend 0x0000000105222688 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60
55 swift-frontend 0x0000000105217f4c performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 716
56 swift-frontend 0x0000000105217768 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2244
57 swift-frontend 0x0000000104fdb1ac swift::mainEntry(int, char const**) + 3064
58 dyld 0x000000019e18c274 start + 2840
zsh: abort swift main.swift
Expected behavior
Compiler should not crash and compile as versions 6.0.3 and before.
Environment
$ swiftc -v
Apple Swift version 6.2-dev (LLVM 6e0f052df8282a3, Swift 659adcd)
Target: arm64-apple-macosx15.0
Additional information
The snippet that works with 6.0.3 and doesn't work with nightly is available at https://godbolt.org/z/7G9zWxffd
Metadata
Metadata
Assignees
Labels
A deviation from expected or documented behavior. Also: expected but undesirable behavior.The Swift compiler itselfFeature → existentials: constrained existentials such as 'any Collection<Int>'Bug: A crash, i.e., an abnormal termination of softwareFeature → existentials: existential member accessesFeature: values of types like `any Collection`, `Any` and `AnyObject`; type-erased valuesFeature: generic declarations and typesArea → compiler: Semantic analysis