)]}'
{
  "commit": "14713e5af87efe93a2bd4e21a9ca084ccbe49576",
  "tree": "ecde6285736be017bb06cb487261f300b0d68689",
  "parents": [
    "da80ed0708a09dc096c184345d6eb42cbcd50a1e"
  ],
  "author": {
    "name": "Daniel Paoliello",
    "email": "danpao@microsoft.com",
    "time": "Thu Jul 16 10:47:53 2026 -0700"
  },
  "committer": {
    "name": "Daniel Paoliello",
    "email": "danpao@microsoft.com",
    "time": "Thu Jul 16 10:47:53 2026 -0700"
  },
  "message": "[aarch64][win] Pass oversized c-variadic args indirectly on Arm64EC\n\nOn Arm64EC the variadic portion of a c-variadic call must follow the MS\nx64 ABI: any argument that does not fit in 8 bytes, or whose size is not\n1, 2, 4, or 8 bytes, is passed by reference. rustc\u0027s `va_arg`\nimplementation already reads such arguments indirectly, but the caller\nside in `aarch64::compute_abi_info` passed a scalar `i128` by value (it\nis not an aggregate, so it bypassed `classify_arg`). The callee then\ndereferenced the inline value as a pointer, causing an access violation\n(0xC0000005) at runtime.\n\nMark variadic-tail arguments larger than 8 bytes, or whose size is not a\npower of two, as indirect on Arm64EC so the caller and the `va_arg`\nreader agree. Fixed arguments are unaffected: a fixed `i128` is still\npassed by value, matching MSVC and Clang.\n\nAdd a codegen test verifying that a variadic `i128` is passed as a\npointer while a fixed `i128` is passed by value.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ec2c30756ddc00b46b46ac88a710ed2ced44ba96",
      "old_mode": 33188,
      "old_path": "compiler/rustc_target/src/callconv/aarch64.rs",
      "new_id": "0162aa838cb6bc7c566b7f66123f496e1e4de838",
      "new_mode": 33188,
      "new_path": "compiler/rustc_target/src/callconv/aarch64.rs"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b98463469eee30a2c658de59adaf0d580afcca6b",
      "new_mode": 33188,
      "new_path": "tests/codegen-llvm/arm64ec-c-variadic-i128.rs"
    }
  ]
}
