)]}'
{
  "commit": "5d9fd47c3640bf190b405c31f21593aa48f02cd9",
  "tree": "25ec5a06e7a8510d733e2b468ad2df936d9c6617",
  "parents": [
    "d31e02004d860452bc7273f002f6890d0adc94fa"
  ],
  "author": {
    "name": "Philipp Wollermann",
    "email": "philwo@chromium.org",
    "time": "Tue Jun 23 17:29:05 2026 +0900"
  },
  "committer": {
    "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Jun 24 16:54:26 2026 -0700"
  },
  "message": "ninja_rust_binary_target_writer: link C++-reachable transitive rlibs\n\nA rustc-driven link (rust_bin/cdylib/dylib) only links rlibs reachable\nthrough the Rust crate graph (--extern + crate metadata). Rust libraries\nreachable only through a C++ dependency were dropped from the link,\nproducing undefined cxx-bridge symbols for bridges whose Rust half lives\nbehind a C++ target (e.g. //base\u0027s rust_logger, serde_json_lenient).\n\nThe C++ linker path already handles this via the \"rlibs\" ninja variable\n(NinjaCBinaryTargetWriter). Mirror it for final Rust targets: walk the\ninherited library closure and link, as an archive via the existing\nnonrustdeps -Clink-arg path, any RUST_LIBRARY that rustc does not link\nitself. The \"rustc links it\" set is computed precisely as the\ncrate-graph closure of the --extern (directly-accessible) crates, so\nrlibs reachable purely through rust deps are not passed twice.\n\nUpdates RlibInLibrary and TransitiveRustDepsThroughSourceSet goldens,\nwhich previously asserted the (buggy) dropped-rlib behavior.\n\nBug: 513478482\nChange-Id: I069dde441c0e1648f39562f18d59e0efde125038\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/23360\nCommit-Queue: Philipp Wollermann \u003cphilwo@chromium.org\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Matt Stark \u003cmsta@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b77157a705eeeeed9ab07c5cd837ac2f2646fe0d",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_rust_binary_target_writer.cc",
      "new_id": "a8bea8f0211a7be0e4bbf174cd4512dc499adf25",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_rust_binary_target_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "f38b892c75d97a4057fed29d1bd1e5d4d5c419db",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_rust_binary_target_writer_unittest.cc",
      "new_id": "3f20c5accb975fe405130e7c8e0568482cd15aad",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_rust_binary_target_writer_unittest.cc"
    }
  ]
}
