- 
                Notifications
    You must be signed in to change notification settings 
- Fork 10.6k
Closed
Closed
Crash from _appendingKeyPaths -- Fatal error: UnsafeMutableRawBufferPointer with negative count#85019
Bug
Copy link
Labels
bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.A deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwareBug: A crash, i.e., an abnormal termination of softwaretriage neededThis issue needs more specific labelsThis issue needs more specific labels
Description
Description
Compiler crashes when appending two keypaths.
Starting from a keypath like \Foo.dict, and appending an additional keypath like \OrderedDictionary.elements.values to produce \Foo.dict.elements.values used to work, but is currently causing a compiler crash.
Reproduction
Linux docker env setup
- docker run -it -v ~/.ssh:/root/.ssh swift:noble
- Install curl
- Install swiftly
- Install a recent main-snapshot, anything from 2025-10-02 has reproduced -- swiftly install --use main-snapshot-2025-10-02(or newer)
Package setup
- Create swift package with type executable -- swift package init --type executable
- Update Package.swift with the following definition. Import swift-collections (we need OrderedDictionary).
// swift-tools-version: 6.2
import PackageDescription
let package = Package(
    name: "keypath-appending-crash",
    dependencies: [.package(url: "https://github.com/apple/swift-collections.git", "1.0.0" ..< "2.0.0")],
    targets: [
        .executableTarget(
            name: "keypath-appending-crash",
            dependencies: [.product(name: "OrderedCollections", package: "swift-collections")],
        ),
    ]
)- Add the code to Sources
import struct OrderedCollections.OrderedDictionary
struct Foo {
    var dict: OrderedDictionary<Int, Int> = [1: 1]
}
@main
struct Appendage {
    static func main() {
        let dictPath = \Foo.dict
        let valuesPath = \OrderedDictionary<Int, Int>.elements.values
        let combinedPath = dictPath.appending(path: valuesPath) // Crash
    }
}Stack dump
Swift/UnsafeRawBufferPointer.swift:116: Fatal error: UnsafeMutableRawBufferPointer with negative count
💣 Program crashed: System trap at 0x0000ffffa51e55dc
Platform: arm64 Linux (Ubuntu 24.04.3 LTS)
Thread 0 "keypath-appendi" crashed:
  0 0x0000ffffa51e55dc closure #1 in closure #1 in _assertionFailure(_:_:file:line:flags:) + 468 in libswiftCore.so
  1 0x0000ffffa5330a24 _assertionFailure(_:_:file:line:flags:) + 235 in libswiftCore.so
  2 0x0000ffffa5330cc4 _fatalErrorMessage(_:_:file:line:flags:) + 39 in libswiftCore.so
  3 0x0000ffffa523db20 KeyPathBuffer.Builder.pushRaw(size:alignment:) + 187 in libswiftCore.so
  4 0x0000ffffa53a8bbc _appendingKeyPaths<A, B, C, D>(root:leaf:) + 1207 in libswiftCore.so
  5 static Appendage.main() + 107 in keypath-appending-crash at /project/keypath-appending-crash/Sources/keypath-appending-crash/keypath_appending_crash.swift:13:37
    11│         let valuesPath = \OrderedDictionary<Int, Int>.elements.values
    12│ 
    13│         let combinedPath = dictPath.appending(path: valuesPath)                                                                   
      │                                     ▲
    14│     }
    15│ }
  6 0x0000ffffa4c484c4 <unknown> in libc.so.6
  7 0x0000ffffa4c48598 <unknown> in libc.so.6
...
Expected behavior
Appends a keypath without crashing.
Environment
We can reproduce the bug consistently starting from a basic swift:noble container.
$ uname -a
Linux 1bbdaadfcdfd 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:40:17 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux
Swift version 6.3-dev (LLVM 3a427639f2a06cf, Swift 5417f00a58578de)
Target: aarch64-unknown-linux-gnu
Build config: +assertions
Additional information
This regression appears to have started with main-snapshot-2025-10-02. The latest known-good toolchain is main-snapshot-2025-09-29.
Metadata
Metadata
Assignees
Labels
bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.A deviation from expected or documented behavior. Also: expected but undesirable behavior.crashBug: A crash, i.e., an abnormal termination of softwareBug: A crash, i.e., an abnormal termination of softwaretriage neededThis issue needs more specific labelsThis issue needs more specific labels