Skip to content

Compiler crash when using a KeyPath as a consuming closure #84150

@porglezomp

Description

@porglezomp

Description

While implementing a non-copyable container, I encountered a crash while trying to use my map method on a keypath.
Passing a KeyPath to a parameter that expects a consuming closure appears to consistently crash.
Passing a closure which does the equivalent field access does not crash.

Reproduction

protocol ID: ~Copyable {
    var id: Int { borrowing get }
}

struct Container<Wrapped: ~Copyable>: ~Copyable {
    let wrapped: Wrapped

    consuming func map<Output>(_ operation: (consuming Wrapped) -> Output) {
        // If we were doing a real map we would transform it, but we don't even need to use it to get a crash:
        // Container<Output>(wrapped: operation(wrapped))
    }
}

func example<T: ~Copyable & ID>(_ value: consuming Container<T>) {
    value.map(\.id)
}

Compile with:

$ swiftc -c Example.swift

Stack dump

<unknown>:0: note: Invalid conformance in type-checked AST
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: /Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file Example.swift -target arm64-apple-macosx15.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -color-diagnostics -Xcc -fcolor-diagnostics -empty-abi-descriptor -no-auto-bridging-header-chaining -module-name Example -in-process-plugin-server-path /Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -plugin-path /Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/local/lib/swift/host/plugins -target-sdk-version 15.4 -target-sdk-name macosx15.4 -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 -o Example.o
1.	Apple Swift version 6.2-dev (LLVM d04575f608ab42f, Swift cbcef93a5469a1a)
2.	Compiling with effective version 5.10
3.	While evaluating request ASTLoweringRequest(Lowering AST to SIL for file "Example.swift")
4.	While silgen emitFunction SIL function "@$s7Example7exampleyyAA9ContainerVyxGnAA2IDRzRi_zlF".
 for 'example(_:)' (at Example.swift:13:1)
5.	While silgen closureexpr SIL function "@$s7Example7exampleyyAA9ContainerVyxGnAA2IDRzRi_zlFSixcfu_".
 for expression at [Example.swift:14:15 - line:14:17] RangeText="\."
 #0 0x000000010a87f9f4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x105a539f4)
 #1 0x000000010a87e120 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x105a52120)
 #2 0x000000010a88003c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x105a5403c)
 #3 0x0000000192e3b624 (/usr/lib/system/libsystem_platform.dylib+0x1804ab624)
 #4 0x0000000192e0188c (/usr/lib/system/libsystem_pthread.dylib+0x18047188c)
 #5 0x0000000192d0ac60 (/usr/lib/system/libsystem_c.dylib+0x18037ac60)
 #6 0x000000010531f72c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1004f372c)
 #7 0x000000010a7fe174 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1059d2174)
 #8 0x000000010a7fe074 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1059d2074)
 #9 0x0000000105764124 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100938124)
#10 0x0000000105764fd8 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100938fd8)
#11 0x00000001054accc4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100680cc4)
#12 0x0000000106926f9c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x101afaf9c)
#13 0x0000000106946218 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x101b1a218)
#14 0x00000001069461e4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x101b1a1e4)
#15 0x000000010690fb38 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x101ae3b38)
#16 0x00000001057656e8 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1009396e8)
#17 0x0000000105764530 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100938530)
#18 0x00000001056c620c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089a20c)
#19 0x00000001056c5ba4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100899ba4)
#20 0x00000001056cd46c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008a146c)
#21 0x0000000105a5c354 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100c30354)
#22 0x00000001056c7dc4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089bdc4)
#23 0x0000000105752ec4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100926ec4)
#24 0x0000000105752b30 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100926b30)
#25 0x000000010575298c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10092698c)
#26 0x0000000105752934 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100926934)
#27 0x0000000105747d5c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10091bd5c)
#28 0x0000000105737e74 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10090be74)
#29 0x000000010571b428 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ef428)
#30 0x000000010571b618 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ef618)
#31 0x000000010571b390 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ef390)
#32 0x000000010571b520 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ef520)
#33 0x000000010574a2f0 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10091e2f0)
#34 0x0000000105737e74 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10090be74)
#35 0x000000010571b428 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ef428)
#36 0x00000001056accf4 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100880cf4)
#37 0x00000001056e5674 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008b9674)
#38 0x00000001056d6478 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008aa478)
#39 0x00000001056e3b44 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008b7b44)
#40 0x00000001056eeedc (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008c2edc)
#41 0x00000001056ee888 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008c2888)
#42 0x00000001056d9a7c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ada7c)
#43 0x00000001056d818c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008ac18c)
#44 0x0000000105738450 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10090c450)
#45 0x00000001057ca5ac (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10099e5ac)
#46 0x00000001057c94dc (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10099d4dc)
#47 0x000000010575dc80 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100931c80)
#48 0x00000001056c5b7c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100899b7c)
#49 0x00000001056c6a9c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089aa9c)
#50 0x00000001056c428c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089828c)
#51 0x00000001056c9670 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089d670)
#52 0x00000001056c9b8c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089db8c)
#53 0x00000001057c8eb8 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10099ceb8)
#54 0x00000001056cdd10 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1008a1d10)
#55 0x00000001056ca1b0 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x10089e1b0)
#56 0x00000001050e9b58 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1002bdb58)
#57 0x00000001050f9e4c (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1002cde4c)
#58 0x00000001050eda94 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1002c1a94)
#59 0x00000001050eb1d0 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x1002bf1d0)
#60 0x0000000104e64510 (/Users/cassie/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-09-04-a.xctoolchain/usr/bin/swift-frontend+0x100038510)
#61 0x0000000192a62b4c

Expected behavior

Using value.map { $0.id } instead of value.map(\.id) works correctly and does not encounter a crash.

Environment

$ swiftly use
main-snapshot-2025-09-04 (default)
$ swiftc --version
Apple Swift version 6.2-dev (LLVM d04575f608ab42f, Swift cbcef93a5469a1a)
Target: arm64-apple-macosx15.0
Build config: +assertions

Tested on macOS 24E263 but that is probably not relevant.

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwaretriage neededThis issue needs more specific labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions