Skip to content

[SR-15009] Assertion failure with recursive associatedtype constraints and CaseIterable #57339

@gwynne

Description

@gwynne
Previous ID SR-15009
Radar rdar://problem/81425392
Original Reporter @gwynne
Type Bug
Status Resolved
Resolution Done
Environment

Swift version 5.5-dev (LLVM 87bb245cc153aaf, Swift 18a849e)
Target: x86_64-unknown-linux-gnu

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, CompilerCrash
Assignee None
Priority Medium

md5: 94ac825d416e1a6a2cc1e1c6a81108c6

Issue Description:

The following code causes an assertion failure in 5.4 and the latest 5.5 and main nightlies:

protocol P { associatedtype A: Q where A.B == Self }
protocol Q: CaseIterable { associatedtype B: P where B.A == Self }

The assertion only occurs in the presence of both the recursive associated type constraint and the conformance of one of the protocols to CaseIterable; removing one of the where clauses or the CaseIterable conformance causes the assertion to go away. Assertion trace with latest 5.5 nightly as of this submission:

swift-frontend: /home/build-user/swift/lib/AST/GenericSignatureBuilder.cpp:8486: void checkGenericSignature(swift::CanGenericSignature, swift::GenericSignatureBuilder &): Assertion `isCanonicalAnchor(secondType)' failed.
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project and the crash backtrace.
Stack dump:
0.  Program arguments: /usr/bin/swift-frontend -frontend -interpret test.swift -disable-objc-interop -color-diagnostics -new-driver-path /usr/bin/swift-driver -resource-dir /usr/lib/swift -module-name test
1.  Swift version 5.5-dev (LLVM 87bb245cc153aaf, Swift 18a849ecece6013)
2.
3.  While evaluating request TypeCheckSourceFileRequest(source_file "test.swift")
4.  While type-checking 'P' (at test.swift:1:1)
5.  While type-checking 'A' (at test.swift:1:14)
6.  While evaluating request RequirementRequest(test.(file).P@test.swift:1:10, 0, interface)
7.  While evaluating request ResolveTypeRequest(while resolving type , A.B, (null))
8.  While evaluating request RequirementSignatureRequest(test.(file).P@test.swift:1:10)
9.  While evaluating request RequirementSignatureRequest(test.(file).Q@test.swift:2:10)
10. While checking generic signature <τ_0_0 where τ_0_0 : CaseIterable, τ_0_0 == τ_0_0.B.A.B.A, τ_0_0.B : P> in requirement #&#8203;1
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):
/usr/bin/swift-frontend[0x5a1fcc3]
/usr/bin/swift-frontend[0x5a1dbae]
/usr/bin/swift-frontend[0x5a20045]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7fd56f1133c0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7fd56ebba18b]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7fd56eb99859]
/lib/x86_64-linux-gnu/libc.so.6(+0x25729)[0x7fd56eb99729]
/lib/x86_64-linux-gnu/libc.so.6(+0x36f36)[0x7fd56ebaaf36]
/usr/bin/swift-frontend[0x19734f3]
/usr/bin/swift-frontend[0x143d56b]
/usr/bin/swift-frontend[0x18c4e09]
/usr/bin/swift-frontend[0x18c4c05]
/usr/bin/swift-frontend[0x1856a20]
/usr/bin/swift-frontend[0x18569d4]
/usr/bin/swift-frontend[0x195d22d]
/usr/bin/swift-frontend[0x195ee1b]
/usr/bin/swift-frontend[0x196016a]
/usr/bin/swift-frontend[0x1986757]
/usr/bin/swift-frontend[0x197a809]
/usr/bin/swift-frontend[0x195cf9d]
/usr/bin/swift-frontend[0x195d6f4]
/usr/bin/swift-frontend[0x195ee1b]
/usr/bin/swift-frontend[0x196016a]
/usr/bin/swift-frontend[0x1962ab5]
/usr/bin/swift-frontend[0x143d556]
/usr/bin/swift-frontend[0x18c4e09]
/usr/bin/swift-frontend[0x18c4c05]
/usr/bin/swift-frontend[0x1856a20]
/usr/bin/swift-frontend[0x18569d4]
/usr/bin/swift-frontend[0x195d22d]
/usr/bin/swift-frontend[0x195ee1b]
/usr/bin/swift-frontend[0x196016a]
/usr/bin/swift-frontend[0x1962ab5]
/usr/bin/swift-frontend[0x1971e9e]
/usr/bin/swift-frontend[0x175315d]
/usr/bin/swift-frontend[0x151bdfe]
/usr/bin/swift-frontend[0x15224f3]
/usr/bin/swift-frontend[0x151eac3]
/usr/bin/swift-frontend[0x152ec56]
/usr/bin/swift-frontend[0x151e8db]
/usr/bin/swift-frontend[0x151e89b]
/usr/bin/swift-frontend[0x14942a0]
/usr/bin/swift-frontend[0x1a40e1a]
/usr/bin/swift-frontend[0x1a40b41]
/usr/bin/swift-frontend[0x1a3cb87]
/usr/bin/swift-frontend[0x146a9ff]
/usr/bin/swift-frontend[0x1467f9b]
/usr/bin/swift-frontend[0x146aa7b]
/usr/bin/swift-frontend[0x1467f9b]
/usr/bin/swift-frontend[0x1467e81]
/usr/bin/swift-frontend[0x1530528]
/usr/bin/swift-frontend[0x1531725]
/usr/bin/swift-frontend[0x1531565]
/usr/bin/swift-frontend[0x15302d8]
/usr/bin/swift-frontend[0x15302b4]
/usr/bin/swift-frontend[0x6f759e]
/usr/bin/swift-frontend[0x6f7426]
/usr/bin/swift-frontend[0x55ec9c]
/usr/bin/swift-frontend[0x4b140e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7fd56eb9b0b3]
/usr/bin/swift-frontend[0x4b104e]
Aborted

Metadata

Metadata

Assignees

No one assigned

    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 software

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions