swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.49k stars 10.35k forks source link

Compiler crash with complex protocol with associated types (ConcreteTypeMatcher::verify(): Duplicate substitution AND Rewrite system exceeded concrete type nesting depth limit) #77099

Open technicated opened 2 days ago

technicated commented 2 days ago

Description

When conforming to a complex protocol with (at least?) three associated types, where:

When the conformer itself is used as the substitution for Param and Ret, the compiler goes stuck for a bit and then crashes saying:

(there's more info after the stack trace)

error: compile command failed due to signal 6 (use -v to see invocation)
ConcreteTypeMatcher::verify(): Duplicate substitution
Abstract differences with LHS < RHS:
Abstract differences with RHS < LHS:
- τ_1_0 (#1) -> τ_0_0
- τ_1_0 (#3) -> τ_0_0
... lots and lots of this ...
- τ_1_0 (#65533) -> τ_0_0
- τ_1_0 (#65535) -> τ_0_0
Concrete differences with LHS < RHS:
Concrete differences with RHS < LHS:
Concrete conflicts:
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
(trace #1)

If I remove Param (which is on function parameter position) and replace it with the type (A) -> B, everything is ok. But if I replace Ret (which is on function return position) with B, the compiler crashes again but with a different error:

error: compile command failed due to signal 6 (use -v to see invocation)
Rewrite system exceeded concrete type nesting depth limit
Requirement machine for fresh signature < τ_0_0 τ_1_0 >
Rewrite system: {
- [Copyable].[Copyable] => [Copyable] [permanent]
- [Escapable].[Escapable] => [Escapable] [permanent]
- τ_1_0.[Copyable] => τ_1_0 [explicit]
- τ_1_0.[Escapable] => τ_1_0 [explicit]
- τ_0_0.[concrete: (τ_0_0) -> τ_1_0] => τ_0_0 [explicit] [subst↓]
- τ_0_0.[concrete: (@escaping (τ_0_0) -> τ_1_0) -> τ_1_0] => τ_0_0 [subst↓]
- τ_0_0.[concrete: (@escaping (@escaping (τ_0_0) -> τ_1_0) -> τ_1_0) -> τ_1_0] => τ_0_0 [subst↓]
- τ_0_0.[concrete: (@escaping (@escaping (@escaping (τ_0_0) -> τ_1_0) -> τ_1_0) -> τ_1_0) -> τ_1_0] => τ_0_0 [subst↓]
- τ_0_0.[concrete: (@escaping (@escaping (@escaping (@escaping (τ_0_0) -> τ_1_0) -> τ_1_0) -> τ_1_0) -> τ_1_0) -> τ_1_0] => τ_0_0 [subst↓]
... every row expands with one nested level per row until it gets massive! ...
Conformance paths: {
}
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
(trace #2)

Reproduction

protocol Crash {
  associatedtype A
  associatedtype Param: Crash
  associatedtype Ret: Crash

  func fn<B>(param: Param) -> Ret
    where Param.A == (A) -> B, Ret.A == B
}

extension Optional: Crash {
  typealias A = Wrapped
  typealias Param = Optional
  typealias Ret = Optional

  func fn<B>(param: Param) -> Ret {
    fatalError()
  }
}

/* Also try to replace `Param` with `(A) -> B` and `Ret` with `B` */

Stack dump

(trace #1)

0.  Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file crash.swift -target arm64-apple-macosx14.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk -color-diagnostics -new-driver-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-driver -empty-abi-descriptor -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -module-name sw -disable-clang-spi -target-sdk-version 15.0 -target-sdk-name macosx15.0 -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 -plugin-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -o /var/folders/32/8zz3lkfd3tld9689tm_2nyym0000gp/T/TemporaryDirectory.MeEQ6t/sw-1.o
1.  Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
2.  Compiling with effective version 5.10
3.  While evaluating request TypeCheckSourceFileRequest(source_file "crash.swift")
4.  While type-checking extension of Optional (at crash.swift:10:1)
5.  While type-checking protocol conformance Optional<Wrapped>: Crash at extension of Optional (at crash.swift:10:1)
6.  While evaluating request ResolveValueWitnessesRequest(<Wrapped> Optional<Wrapped>: Crash module sw)
7.  While evaluating request AbstractGenericSignatureRequest(NULL, {τ_0_0, τ_1_0}, {τ_0_0 : Copyable, τ_0_0 : Escapable, Optional<τ_0_0> : Crash, τ_1_0 == Optional<Wrapped>.A, Optional<Wrapped>.A == (Optional<Wrapped>.A) -> τ_1_0}, 0)
8.  While evaluating request AbstractGenericSignatureRequest(NULL, {τ_0_0, τ_1_0}, {τ_0_0 : Copyable, τ_0_0 : Escapable, Optional<τ_0_0> : Crash, τ_1_0 == τ_0_0, τ_0_0 == (τ_0_0) -> τ_1_0}, 0)
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           0x0000000107c1f0fc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000107c1d350 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x0000000107c1f6c8 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x000000018ec06584 _sigtramp + 56
4  libsystem_pthread.dylib  0x000000018ebd5c20 pthread_kill + 288
5  libsystem_c.dylib        0x000000018eae2a30 abort + 180
6  swift-frontend           0x0000000103fcdb64 swift::rewriting::RewriteSystem::computeTypeDifference(swift::rewriting::Term, swift::rewriting::Symbol, swift::rewriting::Symbol, std::__1::optional<unsigned int>&, std::__1::optional<unsigned int>&) + 2216
7  swift-frontend           0x0000000103f97a1c swift::rewriting::PropertyMap::unifyConcreteTypes(swift::rewriting::Term, std::__1::optional<swift::rewriting::Symbol>&, llvm::SmallVectorImpl<std::__1::pair<swift::rewriting::Symbol, unsigned int>>&, swift::rewriting::Symbol, unsigned int) + 760
8  swift-frontend           0x0000000103f944dc swift::rewriting::PropertyMap::buildPropertyMap() + 1688
9  swift-frontend           0x0000000103fa6c40 swift::rewriting::RequirementMachine::computeCompletion(swift::rewriting::RewriteSystem::ValidityPolicy) + 240
10 swift-frontend           0x0000000103fa7d30 swift::rewriting::RequirementMachine::initWithWrittenRequirements(llvm::ArrayRef<swift::GenericTypeParamType*>, llvm::ArrayRef<swift::StructuralRequirement>) + 772
11 swift-frontend           0x0000000103fac1a4 swift::AbstractGenericSignatureRequest::evaluate(swift::Evaluator&, swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool) const + 3744
12 swift-frontend           0x0000000103a29b50 swift::SimpleRequest<swift::AbstractGenericSignatureRequest, llvm::PointerIntPair<swift::GenericSignature, 3u, swift::optionset::OptionSet<swift::GenericSignatureErrorFlags, unsigned int>, llvm::PointerLikeTypeTraits<swift::GenericSignature>, llvm::PointerIntPairInfo<swift::GenericSignature, 3u, llvm::PointerLikeTypeTraits<swift::GenericSignature>>> (swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool), (swift::RequestFlags)2>::evaluateRequest(swift::AbstractGenericSignatureRequest const&, swift::Evaluator&) + 288
13 swift-frontend           0x0000000103ecb8cc swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultUncached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 660
14 swift-frontend           0x0000000103ecb580 swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultCached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'(), (void*)0>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 692
15 swift-frontend           0x0000000103fabb94 swift::AbstractGenericSignatureRequest::evaluate(swift::Evaluator&, swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool) const + 2192
16 swift-frontend           0x0000000103a29b50 swift::SimpleRequest<swift::AbstractGenericSignatureRequest, llvm::PointerIntPair<swift::GenericSignature, 3u, swift::optionset::OptionSet<swift::GenericSignatureErrorFlags, unsigned int>, llvm::PointerLikeTypeTraits<swift::GenericSignature>, llvm::PointerIntPairInfo<swift::GenericSignature, 3u, llvm::PointerLikeTypeTraits<swift::GenericSignature>>> (swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool), (swift::RequestFlags)2>::evaluateRequest(swift::AbstractGenericSignatureRequest const&, swift::Evaluator&) + 288
17 swift-frontend           0x0000000103ecb8cc swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultUncached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 660
18 swift-frontend           0x0000000103ecb580 swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultCached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'(), (void*)0>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 692
19 swift-frontend           0x0000000103ec99b4 swift::buildGenericSignature(swift::ASTContext&, swift::GenericSignature, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool) + 272
20 swift-frontend           0x0000000103f7267c swift::RequirementEnvironment::RequirementEnvironment(swift::DeclContext*, swift::GenericSignature, swift::ProtocolDecl*, swift::ClassDecl*, swift::RootProtocolConformance*) + 2280
21 swift-frontend           0x0000000103a03c90 swift::matchWitness(llvm::DenseMap<std::__1::pair<swift::GenericSignatureImpl const*, swift::ClassDecl const*>, swift::RequirementEnvironment, llvm::DenseMapInfo<std::__1::pair<swift::GenericSignatureImpl const*, swift::ClassDecl const*>, void>, llvm::detail::DenseMapPair<std::__1::pair<swift::GenericSignatureImpl const*, swift::ClassDecl const*>, swift::RequirementEnvironment>>&, swift::ProtocolDecl*, swift::RootProtocolConformance*, swift::DeclContext*, swift::ValueDecl*, swift::ValueDecl*) + 520
22 swift-frontend           0x0000000103a04d28 swift::WitnessChecker::findBestWitness(swift::ValueDecl*, bool*, swift::NormalProtocolConformance*, llvm::SmallVectorImpl<swift::RequirementMatch>&, unsigned int&, unsigned int&, bool&) + 868
23 swift-frontend           0x0000000103a078d0 swift::ConformanceChecker::resolveWitnessViaLookup(swift::ValueDecl*) + 552
24 swift-frontend           0x0000000103a09ab0 swift::ConformanceChecker::resolveValueWitnesses() + 1364
25 swift-frontend           0x0000000103a2c1ec swift::SimpleRequest<swift::ResolveValueWitnessesRequest, std::__1::tuple<> (swift::NormalProtocolConformance*), (swift::RequestFlags)2>::evaluateRequest(swift::ResolveValueWitnessesRequest const&, swift::Evaluator&) + 140
26 swift-frontend           0x0000000103f69f9c swift::ResolveValueWitnessesRequest::OutputType swift::Evaluator::getResultCached<swift::ResolveValueWitnessesRequest, swift::ResolveValueWitnessesRequest::OutputType swift::evaluateOrDefault<swift::ResolveValueWitnessesRequest>(swift::Evaluator&, swift::ResolveValueWitnessesRequest, swift::ResolveValueWitnessesRequest::OutputType)::'lambda'(), (void*)0>(swift::ResolveValueWitnessesRequest const&, swift::ResolveValueWitnessesRequest::OutputType swift::evaluateOrDefault<swift::ResolveValueWitnessesRequest>(swift::Evaluator&, swift::ResolveValueWitnessesRequest, swift::ResolveValueWitnessesRequest::OutputType)::'lambda'()) + 1260
27 swift-frontend           0x0000000103a15694 (anonymous namespace)::MultiConformanceChecker::checkAllConformances() + 16612
28 swift-frontend           0x0000000103a0ecd4 swift::TypeChecker::checkConformancesInContext(swift::IterableDeclContext*) + 6792
29 swift-frontend           0x000000010399e42c (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 22656
30 swift-frontend           0x0000000103998b9c swift::TypeChecker::typeCheckDecl(swift::Decl*) + 152
31 swift-frontend           0x0000000103a7fd5c swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 660
32 swift-frontend           0x0000000103a873c0 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'()) + 620
33 swift-frontend           0x0000000103a7faac swift::performTypeChecking(swift::SourceFile&) + 328
34 swift-frontend           0x000000010299ece0 swift::CompilerInstance::performSema() + 260
35 swift-frontend           0x00000001025cc190 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1528
36 swift-frontend           0x00000001025caf58 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
37 swift-frontend           0x000000010255201c swift::mainEntry(int, char const**) + 3680
38 dyld                     0x000000018e84b154 start + 2476

(trace #2)

0.  Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file crash.swift -target arm64-apple-macosx14.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk -color-diagnostics -new-driver-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-driver -empty-abi-descriptor -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -module-name sw -disable-clang-spi -target-sdk-version 15.0 -target-sdk-name macosx15.0 -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 -plugin-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -o /var/folders/32/8zz3lkfd3tld9689tm_2nyym0000gp/T/TemporaryDirectory.XtqAK2/sw-1.o
1.  Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
2.  Compiling with effective version 5.10
3.  While evaluating request TypeCheckSourceFileRequest(source_file "crash.swift")
4.  While type-checking extension of Optional (at crash.swift:9:1)
5.  While type-checking protocol conformance Optional<Wrapped>: Crash at extension of Optional (at crash.swift:9:1)
6.  While evaluating request ResolveValueWitnessesRequest(<Wrapped> Optional<Wrapped>: Crash module sw)
7.  While evaluating request AbstractGenericSignatureRequest(NULL, {τ_0_0, τ_1_0}, {τ_0_0 : Copyable, τ_0_0 : Escapable, Optional<τ_0_0> : Crash, τ_1_0 : Copyable, τ_1_0 : Escapable, Optional<Wrapped>.A == (Optional<Wrapped>.A) -> τ_1_0}, 0)
8.  While evaluating request AbstractGenericSignatureRequest(NULL, {τ_0_0, τ_1_0}, {τ_0_0 : Copyable, τ_0_0 : Escapable, Optional<τ_0_0> : Crash, τ_1_0 : Copyable, τ_1_0 : Escapable, τ_0_0 == (τ_0_0) -> τ_1_0}, 0)
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           0x0000000107bbf0fc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000107bbd350 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x0000000107bbf6c8 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x000000018ec06584 _sigtramp + 56
4  libsystem_pthread.dylib  0x000000018ebd5c20 pthread_kill + 288
5  libsystem_c.dylib        0x000000018eae2a30 abort + 180
6  swift-frontend           0x0000000103f45e44 swift::rewriting::RequirementMachine::checkCompletionResult(swift::rewriting::CompletionResult) const + 88
7  swift-frontend           0x0000000103f4c1b0 swift::AbstractGenericSignatureRequest::evaluate(swift::Evaluator&, swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool) const + 3756
8  swift-frontend           0x00000001039c9b50 swift::SimpleRequest<swift::AbstractGenericSignatureRequest, llvm::PointerIntPair<swift::GenericSignature, 3u, swift::optionset::OptionSet<swift::GenericSignatureErrorFlags, unsigned int>, llvm::PointerLikeTypeTraits<swift::GenericSignature>, llvm::PointerIntPairInfo<swift::GenericSignature, 3u, llvm::PointerLikeTypeTraits<swift::GenericSignature>>> (swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool), (swift::RequestFlags)2>::evaluateRequest(swift::AbstractGenericSignatureRequest const&, swift::Evaluator&) + 288
9  swift-frontend           0x0000000103e6b8cc swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultUncached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 660
10 swift-frontend           0x0000000103e6b580 swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultCached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'(), (void*)0>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 692
11 swift-frontend           0x0000000103f4bb94 swift::AbstractGenericSignatureRequest::evaluate(swift::Evaluator&, swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool) const + 2192
12 swift-frontend           0x00000001039c9b50 swift::SimpleRequest<swift::AbstractGenericSignatureRequest, llvm::PointerIntPair<swift::GenericSignature, 3u, swift::optionset::OptionSet<swift::GenericSignatureErrorFlags, unsigned int>, llvm::PointerLikeTypeTraits<swift::GenericSignature>, llvm::PointerIntPairInfo<swift::GenericSignature, 3u, llvm::PointerLikeTypeTraits<swift::GenericSignature>>> (swift::GenericSignatureImpl const*, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool), (swift::RequestFlags)2>::evaluateRequest(swift::AbstractGenericSignatureRequest const&, swift::Evaluator&) + 288
13 swift-frontend           0x0000000103e6b8cc swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultUncached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 660
14 swift-frontend           0x0000000103e6b580 swift::AbstractGenericSignatureRequest::OutputType swift::Evaluator::getResultCached<swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'(), (void*)0>(swift::AbstractGenericSignatureRequest const&, swift::AbstractGenericSignatureRequest::OutputType swift::evaluateOrDefault<swift::AbstractGenericSignatureRequest>(swift::Evaluator&, swift::AbstractGenericSignatureRequest, swift::AbstractGenericSignatureRequest::OutputType)::'lambda'()) + 692
15 swift-frontend           0x0000000103e699b4 swift::buildGenericSignature(swift::ASTContext&, swift::GenericSignature, llvm::SmallVector<swift::GenericTypeParamType*, 2u>, llvm::SmallVector<swift::Requirement, 2u>, bool) + 272
16 swift-frontend           0x0000000103f1267c swift::RequirementEnvironment::RequirementEnvironment(swift::DeclContext*, swift::GenericSignature, swift::ProtocolDecl*, swift::ClassDecl*, swift::RootProtocolConformance*) + 2280
17 swift-frontend           0x00000001039a3c90 swift::matchWitness(llvm::DenseMap<std::__1::pair<swift::GenericSignatureImpl const*, swift::ClassDecl const*>, swift::RequirementEnvironment, llvm::DenseMapInfo<std::__1::pair<swift::GenericSignatureImpl const*, swift::ClassDecl const*>, void>, llvm::detail::DenseMapPair<std::__1::pair<swift::GenericSignatureImpl const*, swift::ClassDecl const*>, swift::RequirementEnvironment>>&, swift::ProtocolDecl*, swift::RootProtocolConformance*, swift::DeclContext*, swift::ValueDecl*, swift::ValueDecl*) + 520
18 swift-frontend           0x00000001039a4d28 swift::WitnessChecker::findBestWitness(swift::ValueDecl*, bool*, swift::NormalProtocolConformance*, llvm::SmallVectorImpl<swift::RequirementMatch>&, unsigned int&, unsigned int&, bool&) + 868
19 swift-frontend           0x00000001039a78d0 swift::ConformanceChecker::resolveWitnessViaLookup(swift::ValueDecl*) + 552
20 swift-frontend           0x00000001039a9ab0 swift::ConformanceChecker::resolveValueWitnesses() + 1364
21 swift-frontend           0x00000001039cc1ec swift::SimpleRequest<swift::ResolveValueWitnessesRequest, std::__1::tuple<> (swift::NormalProtocolConformance*), (swift::RequestFlags)2>::evaluateRequest(swift::ResolveValueWitnessesRequest const&, swift::Evaluator&) + 140
22 swift-frontend           0x0000000103f09f9c swift::ResolveValueWitnessesRequest::OutputType swift::Evaluator::getResultCached<swift::ResolveValueWitnessesRequest, swift::ResolveValueWitnessesRequest::OutputType swift::evaluateOrDefault<swift::ResolveValueWitnessesRequest>(swift::Evaluator&, swift::ResolveValueWitnessesRequest, swift::ResolveValueWitnessesRequest::OutputType)::'lambda'(), (void*)0>(swift::ResolveValueWitnessesRequest const&, swift::ResolveValueWitnessesRequest::OutputType swift::evaluateOrDefault<swift::ResolveValueWitnessesRequest>(swift::Evaluator&, swift::ResolveValueWitnessesRequest, swift::ResolveValueWitnessesRequest::OutputType)::'lambda'()) + 1260
23 swift-frontend           0x00000001039b5694 (anonymous namespace)::MultiConformanceChecker::checkAllConformances() + 16612
24 swift-frontend           0x00000001039aecd4 swift::TypeChecker::checkConformancesInContext(swift::IterableDeclContext*) + 6792
25 swift-frontend           0x000000010393e42c (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 22656
26 swift-frontend           0x0000000103938b9c swift::TypeChecker::typeCheckDecl(swift::Decl*) + 152
27 swift-frontend           0x0000000103a1fd5c swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 660
28 swift-frontend           0x0000000103a273c0 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'()) + 620
29 swift-frontend           0x0000000103a1faac swift::performTypeChecking(swift::SourceFile&) + 328
30 swift-frontend           0x000000010293ece0 swift::CompilerInstance::performSema() + 260
31 swift-frontend           0x000000010256c190 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1528
32 swift-frontend           0x000000010256af58 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
33 swift-frontend           0x00000001024f201c swift::mainEntry(int, char const**) + 3680
34 dyld                     0x000000018e84b154 start + 2476

Expected behavior

I expected the compiler to not crash and give some info about why the code is wrong at high level (e.g. the issue is that the generic constraints are... under constrained, so there are infinite solutions available?), not in tau / substitution map terms.

Environment

swift-driver version: 1.115 Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2) Target: arm64-apple-macosx14.0

Additional information

No response

xedin commented 1 day ago

cc @slavapestov