)]}'
{
  "log": [
    {
      "commit": "30f4ccff5506a00c8c9dfc08d722412bca57e066",
      "tree": "d1fe7fca8ae40fd8ab7c49b545b0779638a956ce",
      "parents": [
        "6e5bc2f49ae2c24d83a286b579efb0f5238b1883"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Fri Jul 17 23:37:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 23:39:52 2026"
      },
      "message": "Reject possibly invalid aliases to template instantiations across targets.\n\nWe were making incorrect assumptions about the completeness of types\nacross targets when generating code for type aliases (because,\ndepending on the set of headers included in a given CU, the completeness\nof a type may differ).\n\nConservatively check that when importing an alien type alias, that type\nalias does not refer to a local decl. This avoids the mismatch.\n\nAlso fixes supported_feature_set.\n\nPiperOrigin-RevId: 949820037\n"
    },
    {
      "commit": "6e5bc2f49ae2c24d83a286b579efb0f5238b1883",
      "tree": "1db42bad3cfa3e980684a33bb4e12eec426bbfe5",
      "parents": [
        "0bcc57cd0f9964ff5bc5b678e65659f8057ceaf1"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Fri Jul 17 23:34:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 23:35:05 2026"
      },
      "message": "Bazel test project.\n\nA test project for the bazel build. This is almost the same as the cmake\ntest project, but due to differences between CMake and Bazel (especially\naround header) placement needs to be a separate project.\n\nPiperOrigin-RevId: 949819051\n"
    },
    {
      "commit": "0bcc57cd0f9964ff5bc5b678e65659f8057ceaf1",
      "tree": "9a7a8755afa43fafc577de0e938e07618e247045",
      "parents": [
        "31a50a1650d66201ec5f2a63dcd0cb663096ec29"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Fri Jul 17 21:43:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 21:45:06 2026"
      },
      "message": "internal change\n\nPiperOrigin-RevId: 949769709\n"
    },
    {
      "commit": "31a50a1650d66201ec5f2a63dcd0cb663096ec29",
      "tree": "f34df36ea9ed7300e0156faf7978bed46c9d9935",
      "parents": [
        "b0b03215aea3fecc668fb45bd5629f1d749b8a14"
      ],
      "author": {
        "name": "Radoslaw Burny",
        "email": "rburny@google.com",
        "time": "Fri Jul 17 15:10:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 15:11:33 2026"
      },
      "message": "Diagnose uninitialized nonnull fields in constructors.\n\nFor classes with constructors (both custom and explicitly defaulted), diagnostics are emitted when a nonnull pointer field is left uninitialized or initialized with a nullable value (including via in-class initializers).\n\nFor explicitly defaulted constructors, diagnostics are emitted at the constructor definition site.\n\nPiperOrigin-RevId: 949576532\n"
    },
    {
      "commit": "b0b03215aea3fecc668fb45bd5629f1d749b8a14",
      "tree": "c5e100f8c2fd9e1d7c9c3da862c7bad8df2390cc",
      "parents": [
        "a3069a278e126ac3963f204f8bceb735f40566db"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Fri Jul 17 06:02:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 06:03:07 2026"
      },
      "message": "Fix code generation for Index/IndexMut.\n\nEnsures that IndexMut implementations have a matching Index implementation;\nsupport lifetime parameters for Index/IndexMut.\n\nPiperOrigin-RevId: 949378895\n"
    },
    {
      "commit": "a3069a278e126ac3963f204f8bceb735f40566db",
      "tree": "f0a56ccf2da4e34f4ffb583cfb80218e65fed596",
      "parents": [
        "36172626fbe30edefe1a0804fcb741667ddfd650"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Fri Jul 17 03:57:44 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 03:58:38 2026"
      },
      "message": "Fix projections of free-function style operator overloads with assume_lifetimes enabled.\n\nPiperOrigin-RevId: 949338543\n"
    },
    {
      "commit": "36172626fbe30edefe1a0804fcb741667ddfd650",
      "tree": "0c3e45ce506a44a8a5cac3e00e372baea1ce920c",
      "parents": [
        "70df821124908555a9d35066d833e7da3e9b567e"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 16 21:24:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 21:25:05 2026"
      },
      "message": "Simplify generate_doc_comment\n\nWill make upcoming changes for opaques more straightforward to reuse this function.\n\nPiperOrigin-RevId: 949173149\n"
    },
    {
      "commit": "70df821124908555a9d35066d833e7da3e9b567e",
      "tree": "cf679a8bf16a507543c904f500e8219e7d01b0a2",
      "parents": [
        "5ff7ef3332929255c361b8c3f258c0abffbda4a2"
      ],
      "author": {
        "name": "Fabian Wolff",
        "email": "fwolff@google.com",
        "time": "Thu Jul 16 20:59:02 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 20:59:43 2026"
      },
      "message": "Update golden tests.\n\nPiperOrigin-RevId: 949159263\n"
    },
    {
      "commit": "5ff7ef3332929255c361b8c3f258c0abffbda4a2",
      "tree": "ce5f5eb0eecdfb94d194ebda81de8d9c27fb54aa",
      "parents": [
        "59d4a33a4a65f8c0e06dd2b037d0bdc84f46cf49"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 16 20:41:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 20:42:09 2026"
      },
      "message": "Cleanup and guard must_use_attr_of\n\nPiperOrigin-RevId: 949149627\n"
    },
    {
      "commit": "59d4a33a4a65f8c0e06dd2b037d0bdc84f46cf49",
      "tree": "add8e4692400e580e8ebab049ff285e2084ef694",
      "parents": [
        "9700d6eaf5f813a1682739814206e4108daebc09"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Thu Jul 16 20:19:27 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 20:20:18 2026"
      },
      "message": "Ancilliary changes to fix up bazel build.\n\n* Import `cc_library` explicitly.\n* Use `@rules_crubit` in place of `@@`.\n* Fix up MODULE.bazel to work as `rules_crubit`\n\nPiperOrigin-RevId: 949137538\n"
    },
    {
      "commit": "9700d6eaf5f813a1682739814206e4108daebc09",
      "tree": "d75ec6109d3110fe6a715f49e3e335bf5efc995b",
      "parents": [
        "795f5e8346968ad8015e3a4983ec66c1808cba4b"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 16 19:13:27 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 19:14:17 2026"
      },
      "message": "Simplify generate_fields\n\nThis makes `generate_fields` private (wasn\u0027t used elsewhere) and also removes `repr_attrs` as an input since it can be derived entirely from `self_ty`.\n\nPiperOrigin-RevId: 949103530\n"
    },
    {
      "commit": "795f5e8346968ad8015e3a4983ec66c1808cba4b",
      "tree": "af46d2b22b0d65297e560e4fab32ccff74be5040",
      "parents": [
        "7629f0699dec5b0e7e7c59fa650c980a760055d6"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 16 18:26:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 18:28:08 2026"
      },
      "message": "Add golden test for return position impl trait\n\nThis doesn\u0027t do anything yet, but will be used in a followup change.\n\nPiperOrigin-RevId: 949076456\n"
    },
    {
      "commit": "7629f0699dec5b0e7e7c59fa650c980a760055d6",
      "tree": "8348e579a43a8df1062632f9bc36fcf4343ca0ba",
      "parents": [
        "9a56d43fb3674dcee05ede3195088241d06977a1"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Thu Jul 16 13:52:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 13:53:05 2026"
      },
      "message": "Update CMakeLists.txt support libs to use INTERFACE.\n\nUsing STATIC forces a linking step that we don\u0027t actually need since our\nsupport libraries are header-only. STATIC causes breakages on macOS, so\nswap to INTERFACE.\n\nPiperOrigin-RevId: 948945764\n"
    },
    {
      "commit": "9a56d43fb3674dcee05ede3195088241d06977a1",
      "tree": "04aa5702dbec6b78a32a002deff4b597ae148615",
      "parents": [
        "66dbfc4d530e9eedb1c19d99f4da97b845bfb6e7"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Thu Jul 16 03:52:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 16 03:54:05 2026"
      },
      "message": "Truncate rs_names that are too long, but add a hash of the original name\nfor some amount of uniqueness.\n\nThis is necessary so that tools like rustdoc don\u0027t try and create files\nwith too-long names.\n\nPiperOrigin-RevId: 948710693\n"
    },
    {
      "commit": "66dbfc4d530e9eedb1c19d99f4da97b845bfb6e7",
      "tree": "438aace15d85b1e14530227831fcfcc2d79c9e07",
      "parents": [
        "98a322ddc400f59de79317d6cce39ab8bec8318e"
      ],
      "author": {
        "name": "Taylor Cramer",
        "email": "cramertj@google.com",
        "time": "Wed Jul 15 20:31:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 20:32:25 2026"
      },
      "message": "Add golden files for rs_bindings_from_cc proto test\n\nPiperOrigin-RevId: 948516170\n"
    },
    {
      "commit": "98a322ddc400f59de79317d6cce39ab8bec8318e",
      "tree": "7fef62b8c4339dc099f152606b7782984dfcd79b",
      "parents": [
        "0ab46adce98706d2466265e2f319fb3b9dd53148"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 15 16:04:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 16:05:34 2026"
      },
      "message": "Simplify Drop extern C thunks\n\nThis change is effectively a noop, but now avoids scary `\u0026\u0027static mut` stuff.\n\nPiperOrigin-RevId: 948368030\n"
    },
    {
      "commit": "0ab46adce98706d2466265e2f319fb3b9dd53148",
      "tree": "a87617cae84a93c8cbc84417bbc6afbaf29cc687",
      "parents": [
        "3a2c584bc75dded2deb9fc4309cd8141caab8d2c"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Wed Jul 15 15:13:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 15:23:35 2026"
      },
      "message": "Set adl_enclosing_record on friend declarations in FunctionDeclImporter::Import.\n\nWhen a friend function is imported by `FunctionDeclImporter::Import`, compute and populate its `.adl_enclosing_record` from its lexical `CXXRecordDecl` context.\n\nWithout `.adl_enclosing_record`, the bindings generator treats the friend function as a normal namespace function and emits a namespace-qualified call, which disables ADL and errors out as it doesn\u0027t exist in the namespace scope.\n\nPiperOrigin-RevId: 948345217\n"
    },
    {
      "commit": "3a2c584bc75dded2deb9fc4309cd8141caab8d2c",
      "tree": "506b831a1f75bcb0e68320927927e712b5a3fa98",
      "parents": [
        "342bf27843b345edc7bdd8bf6158a41a76f65356"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Wed Jul 15 15:13:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 15:18:52 2026"
      },
      "message": "Create a bazel extension for Crubit.\n\nThe role of this extension is threefold:\n\n1. Configure a Rust toolchain\n2. Configure an LLVM toolchain\n3. Check, as much as possible, that those two toolchains are compatible\n\nMainly that means we need to ensure our LLVM toolchain is at least as\nnew as our Rust toolchain. Otherwise, Rust may produce object code that\nisn\u0027t compatible with the linker our LLVM toolchain provides.\n\nPiperOrigin-RevId: 948345095\n"
    },
    {
      "commit": "342bf27843b345edc7bdd8bf6158a41a76f65356",
      "tree": "75fde92783083381fd8f1fc70b226dbd040be6f2",
      "parents": [
        "c4ca064d15e25176a3e559680f3270efc4230303"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Wed Jul 15 15:05:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 15:08:51 2026"
      },
      "message": "Preserve forward-declared enum semantics in protobuf IR by adding `is_incomplete` boolean field to the Enum message.\n\nWhen converting from C++ IR to protobuf IR, if `Enum::enumerators` does not have a value (an incomplete/forward-declared enum rather than a complete definition), `is_incomplete` is set to true. When deserializing in `proto_to_ir.rs`, if `is_incomplete` is set, `enumerators` should be set to None instead of an empty, existent vector, which previously resulted in invalid bindings for opaque enums.\n\nThis should also matter once we migrate to wrap EnumView, since we\u0027ll have no way of distinguishing between `enum ForwardDeclared` and `enum Empty {}` from \u0026[T]\n\nPiperOrigin-RevId: 948341164\n"
    },
    {
      "commit": "c4ca064d15e25176a3e559680f3270efc4230303",
      "tree": "53abbfb907ad99e9fd3ed14c1431889a5dd8a5fe",
      "parents": [
        "078a3c21a4613fabd55fc4a846d9b3ca6896c034"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Wed Jul 15 15:02:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 15:08:12 2026"
      },
      "message": "Update deps in MODULE.bazel\n\nClean up our use of crate extension now with our updated rules_rust.\n\nPiperOrigin-RevId: 948339511\n"
    },
    {
      "commit": "078a3c21a4613fabd55fc4a846d9b3ca6896c034",
      "tree": "3352d418b536d45fe81729882020f92881927842",
      "parents": [
        "b09353aefccd8ed7f028d7490102926486debeb3"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 15 15:02:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 15:03:20 2026"
      },
      "message": "Proper support for proc macro crates in our bazel-\u003eCargo export.\n\nThis is complicated by the fact that, internally to Google, rust_proc_macro is a bazel macro for complicated reasons I don\u0027t understand related to needing to add transitions for platform support.\n\nI believe the one existing proc macro in our Cargo export, `item_exists`, was done by hand. Oops! Well, not anymore, now it\u0027s a completely ordinary automatically updated Cargo.toml file.\n\nPiperOrigin-RevId: 948339439\n"
    },
    {
      "commit": "b09353aefccd8ed7f028d7490102926486debeb3",
      "tree": "ac54457c2cc5d1bb9ce0b466a536635e4e9ce6e9",
      "parents": [
        "138f7bf3bf99aa6697ae2e66b3616b6f67b5deaa"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 15 14:32:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 14:33:08 2026"
      },
      "message": "Make Result and Option methods defined out-of-line\n\nPiperOrigin-RevId: 948326794\n"
    },
    {
      "commit": "138f7bf3bf99aa6697ae2e66b3616b6f67b5deaa",
      "tree": "bd794a63e9997fef879adce6cb6765505beb6422",
      "parents": [
        "3b50be581cfd7c39746ffc36fb4888765d900584"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Wed Jul 15 12:09:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 12:25:18 2026"
      },
      "message": "Provide an empty rust_static_library for bazel build.\n\nThis is used by binding generation to link in allocator symbols for\nRust.\n\nPiperOrigin-RevId: 948271095\n"
    },
    {
      "commit": "3b50be581cfd7c39746ffc36fb4888765d900584",
      "tree": "540c9a0d04f59d3f1e8ce47705f59eda4e9b9b03",
      "parents": [
        "8e552c15ad90049a51b28815c0bf4acd96e78198"
      ],
      "author": {
        "name": "Taylor Cramer",
        "email": "cramertj@google.com",
        "time": "Wed Jul 15 12:06:09 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 12:12:35 2026"
      },
      "message": "Ensure that substs of layout-compatible generics are layout-compatible\n\nWithout this, we would incorrectly bridge types inside e.g. `unique_ptr`, resulting in `cc_std::unique_ptr\u003cOption\u003ci32\u003e\u003e` being translated as `cc_std::unique_ptr\u003cstd::optional\u003cint32_t\u003e\u003e` rather than `cc_std::unique_ptr\u003crs_std::Option\u003ci32\u003e\u003e`.\n\nPiperOrigin-RevId: 948269769\n"
    },
    {
      "commit": "8e552c15ad90049a51b28815c0bf4acd96e78198",
      "tree": "31552b4f346328384958892fe625ca2028451b60",
      "parents": [
        "1aedc0d0ce215eb38b2b06603ae1553c7fb8d07e"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 15 08:15:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 08:17:29 2026"
      },
      "message": "Take #2 on normalizing rs_std/cc_std.\n\nIf we move the logic to another library, which is deployed with the release, then both `cc_std` and `rs_std` can live at head. Any version-specific stuff can be done by depending on that other library. (I don\u0027t really know why I didn\u0027t think of this earlier.)\n\nIn Rust\u0027s case, this has to be a bazel library, with build-time feature flags. (This would avoid the surprising cc_std/cc_std_impl split.)\n\nIn C++\u0027s case, it\u0027s a header with some defines you can `#ifdef` on. (Could also reuse existing headers in bindings_support, but this might be less discoverable in the moment.) Could also use `defines`, but it\u0027s a bit of a heavy hammer, as it affects all transitive rdeps whether they include this transitively or only depend on it without including it (due to e.g. hourglass deps).\n\nThis doesn\u0027t actually do anything, would need to wait for a crosstool release before we can migrate cc_std and rs_std. But I think after this, we could have everything except support/internal live at head, unless I am missing something.\n\nPiperOrigin-RevId: 948175461\n"
    },
    {
      "commit": "1aedc0d0ce215eb38b2b06603ae1553c7fb8d07e",
      "tree": "172ebe27a5c5e9b72c8f11b80501e6c22f8e2aa0",
      "parents": [
        "ac23ac3efb1fd45afa26564c811611fca5bdae26"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Tue Jul 14 22:56:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 22:58:43 2026"
      },
      "message": "Add support for Rust stable 1.97.\n\nDrop support for 1.94 and 1.95 (our latest two stables are now 1.96 \u0026\n1.97). We can clean up some more of the feature gates to remove old\nnightlies we no longer support. I\u0027ve left that as future work since this\ncommit is getting large.\n\nPiperOrigin-RevId: 947953293\n"
    },
    {
      "commit": "ac23ac3efb1fd45afa26564c811611fca5bdae26",
      "tree": "0d57664b6c6b885d1fecdd041476ed43ed026980",
      "parents": [
        "de7cf11f705717878858435d5ff8058e6392f787"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 14 22:12:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 22:14:38 2026"
      },
      "message": "fix option/result requires clauses to be lazy\n\nThe previous constexpr wasn\u0027t evaluated lazily, which was necessary because some conditions rely on previous conditions to succeed otherwise they don\u0027t compile.\n\nPiperOrigin-RevId: 947930161\n"
    },
    {
      "commit": "de7cf11f705717878858435d5ff8058e6392f787",
      "tree": "95ea411b8cde751e01767c9972fdc8e84359d304",
      "parents": [
        "07bf464f094a7e0aedce0b080a0edcc5b56e7aa4"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Tue Jul 14 10:20:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 10:21:25 2026"
      },
      "message": "Make the pinned field projection methods private if the fields are.\n\nPiperOrigin-RevId: 947568092\n"
    },
    {
      "commit": "07bf464f094a7e0aedce0b080a0edcc5b56e7aa4",
      "tree": "2758fa5cc48d76fbc80b0ef84068d0edeca9d2cf",
      "parents": [
        "2ab5bb91d401ab94b63bf2c200f84bc8ab386452"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Tue Jul 14 10:11:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 10:12:16 2026"
      },
      "message": "Split the flag for support paths in two.\n\nOne flag for non-versioned support libraries (should become \"everything except internal\"), one for versioned support libraries (should become just internal).\n\nIt\u0027s useful to have the second flag refer directly into the `internal/` directory so that, as a migration trick, we get an error if we miss one (the path would be incorrect.) As such, this is only correct if unknown commit pans out, otherwise we\u0027d need a third flag. (Specifically, for the rs_std includes, like dyn_callable and lossy_formatter_for_bindings).\n\nThis is a prerequisite for eventually removing the whole `#include \u003ccrubit/foo\u003e` thing, and replacing it with `#include \"third_party/crubit/foo\"`. First, we need to fix the generated code, which requires distinguishing between things that need the trick, and things that don\u0027t. (Unless we get rid of it entirely, I suppose.)\n\nPiperOrigin-RevId: 947564407\n"
    },
    {
      "commit": "2ab5bb91d401ab94b63bf2c200f84bc8ab386452",
      "tree": "8ba2ae7f63f09e2585a0f78a3cc3df0566446b10",
      "parents": [
        "ae8d41da9d8dc216f3b62047ed91bc87369c1cb5"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Tue Jul 14 09:35:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 09:39:53 2026"
      },
      "message": "Allow API owners to write a Real Name for the projected types.\n\nInstead of getting, like, __RandomGibberishEwOmgGross, you can use `#[recursively_pinned(project_pin\u003dBetterName)]` and it will use that type name instead. (Analogously, project_ref\u003d... to customize the return type name for the project_ref method.)\n\nThis is basically the same as `#[::pin_project::pin_project(project\u003dBetterName)]` upstream.\n\nPiperOrigin-RevId: 947547472\n"
    },
    {
      "commit": "ae8d41da9d8dc216f3b62047ed91bc87369c1cb5",
      "tree": "e016c84b9cdd30ee792ab5d2a0b5f33b05ee5396",
      "parents": [
        "5382efc9f30b3bad156d54bafa4dc80b46c2bf63"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Tue Jul 14 09:34:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 09:35:18 2026"
      },
      "message": "Delete dead code (?)\n\nI was exploring `i128` bindings before deciding it wouldn\u0027t work out. Was confused by the code duplication here, but it turns out nothing uses this file.\n\nPiperOrigin-RevId: 947546741\n"
    },
    {
      "commit": "5382efc9f30b3bad156d54bafa4dc80b46c2bf63",
      "tree": "09d8b7a0797c8d50f2699bb2eabf93e65d6eef8a",
      "parents": [
        "954615f6a8c9676306f816cd41cfd3c073c5bd36"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Mon Jul 13 23:16:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 23:17:03 2026"
      },
      "message": "Make Option and Result specializations use helpers for requires clauses\n\nPiperOrigin-RevId: 947300111\n"
    },
    {
      "commit": "954615f6a8c9676306f816cd41cfd3c073c5bd36",
      "tree": "948524f6165c198140f9b7cf5a77035ac38ac504",
      "parents": [
        "5ad58cda405d6b624b0241f1fa28ec042b8ac309"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Mon Jul 13 22:41:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 22:42:06 2026"
      },
      "message": "Add docs for how to include std lib bindings and how to use String in\nC++.\n\nPiperOrigin-RevId: 947282779\n"
    },
    {
      "commit": "5ad58cda405d6b624b0241f1fa28ec042b8ac309",
      "tree": "42d8ccb2a3527b712eb660a70d34d826f240ceba",
      "parents": [
        "3bd8defdc4fabf8d34630e428ee3d9dbb07d7a0c"
      ],
      "author": {
        "name": "Michael VanBemmel",
        "email": "mvanbem@google.com",
        "time": "Mon Jul 13 22:01:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 22:02:58 2026"
      },
      "message": "Adapt to upstream changes to `DefKind::InlineConst`\n\nThis should resolve the nightly test matrix failures (#1409) for nightlies since 2026-07-12, but we\u0027re still broken on stable 1.97.\n\nIdeally we wouldn\u0027t have to copy this whole function, but match arms don\u0027t accept attribute macros. And it can\u0027t be two `match` expressions in one function because expressions don\u0027t accept attribute macros. Same for two `let`-statements in one function.\n\nPiperOrigin-RevId: 947262358\n"
    },
    {
      "commit": "3bd8defdc4fabf8d34630e428ee3d9dbb07d7a0c",
      "tree": "7a2bed62bb02af4dc661d0983d4d17b67ff358ec",
      "parents": [
        "8a2e582f7a054c4f77b0bf1d34d769693b0d153d"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Mon Jul 13 19:10:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 19:11:36 2026"
      },
      "message": "Narrow the blocklist for assume_lifetimes to targets that we know have issues.\n\nPiperOrigin-RevId: 947172763\n"
    },
    {
      "commit": "8a2e582f7a054c4f77b0bf1d34d769693b0d153d",
      "tree": "0fa495542810bd8c0a646f25e938456265014e58",
      "parents": [
        "2b39a236e2522e91a103b9d8fe2431e4e8d3b189"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Mon Jul 13 17:47:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 17:48:19 2026"
      },
      "message": "Use #full_self_ty when possible\n\nSmall refactor to denoise an upcoming change.\n\nPiperOrigin-RevId: 947126745\n"
    },
    {
      "commit": "2b39a236e2522e91a103b9d8fe2431e4e8d3b189",
      "tree": "4bff0ba4909768dad53713daa599980b6bcdcfbe",
      "parents": [
        "89417b58802e20a6a11db7fea7c31692fef25276"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Sat Jul 11 08:42:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jul 11 08:43:54 2026"
      },
      "message": "Add template_blocklist_path_regex to the global Crubit configuration.\n\nThe configuration should is exposed as a list of path regular expressions that get joined into a single regex and passed to rs_bindings_from_cc using the template_blocklist_path_regex flag.\n\nPiperOrigin-RevId: 946114163\n"
    },
    {
      "commit": "89417b58802e20a6a11db7fea7c31692fef25276",
      "tree": "37f1b59986df121a255f4c0c194303437bd75809",
      "parents": [
        "8447ad0e2221425769104cc8d676bcb85c0946d3"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Fri Jul 10 23:24:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 23:25:35 2026"
      },
      "message": "Add cfi_encoding attribute to records.\n\nMangling rules for records are described in https://rcvalle.com/docs/rust-cfi-design-doc/\n\nPiperOrigin-RevId: 945944954\n"
    },
    {
      "commit": "8447ad0e2221425769104cc8d676bcb85c0946d3",
      "tree": "d2ede4f82c28a38dceeb8b27fff446aefdc19200",
      "parents": [
        "db2c4449ea9c9491d243e523bcd53b7a2ba2904c"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Fri Jul 10 21:51:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 21:52:12 2026"
      },
      "message": "Use intern!() macro to intern strings throughout Crubit\n\nPiperOrigin-RevId: 945902726\n"
    },
    {
      "commit": "db2c4449ea9c9491d243e523bcd53b7a2ba2904c",
      "tree": "0423336c075cb6931a5cadf7210fea8a6c0364cb",
      "parents": [
        "da4acc93931d810c50919b99d6d4ec0ea3c9a35b"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Fri Jul 10 21:35:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 21:36:27 2026"
      },
      "message": "Cleanup tuple generating code.\n\nAdd a test that `(u64, u64)` behaves as expected.\n\nPiperOrigin-RevId: 945896431\n"
    },
    {
      "commit": "da4acc93931d810c50919b99d6d4ec0ea3c9a35b",
      "tree": "9b666b5342756f3f14a4dfda5df7c7a9cfe620fa",
      "parents": [
        "2951a80993707109f595768a78d872bd1958b641"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Fri Jul 10 20:59:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 21:00:03 2026"
      },
      "message": "Allow suspicious_runtime_symbol_definitions in Crubit bindings.\n\nUpstream rustc recently enabled this lint, which we trigger since we\nbind standard library symbols (such as `strlen`) with an unexpected\nsignature. The signature is unexpected because we use `ffi_11` types in\nplace of `std::ffi` types. This is expected and intentional, so we allow\nthe lint within Crubit binding code.\n\nPiperOrigin-RevId: 945879986\n"
    },
    {
      "commit": "2951a80993707109f595768a78d872bd1958b641",
      "tree": "09a845fe8dcb9ee0a319b91897c38e23bc0dee5b",
      "parents": [
        "0bbf38e2321d59e2248b39993f897563e9abf14c"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Fri Jul 10 20:41:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 20:42:07 2026"
      },
      "message": "Put the pin projection methods in one impl block, to slightly clean up the generated code (and docs) -- now, there\u0027s only one button to press to hide both, especially if we end up adding more later. (RvalueReference projection? CRef/CMut?)\n\nOne-shotted by Gemini. Finally, a roboCL that isn\u0027t terrible.\n\nPiperOrigin-RevId: 945871436\n"
    },
    {
      "commit": "0bbf38e2321d59e2248b39993f897563e9abf14c",
      "tree": "831628e022b29d50ed497e5178207d51618cc9a4",
      "parents": [
        "59d65e536404dc18c707eb8e058a5d010c1be41f"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 16:24:44 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 16:30:46 2026"
      },
      "message": "Encapsulate Record IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945747778\n"
    },
    {
      "commit": "59d65e536404dc18c707eb8e058a5d010c1be41f",
      "tree": "ae9b3591280144e0dde4d2d9283b6f8aeca86bad",
      "parents": [
        "8cdbe75e073fe1157eeb3dcf36ab8efc169dd95a"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Fri Jul 10 16:20:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 16:30:11 2026"
      },
      "message": "Add nullability annotations to str_ref.h.\n\nPiperOrigin-RevId: 945746081\n"
    },
    {
      "commit": "8cdbe75e073fe1157eeb3dcf36ab8efc169dd95a",
      "tree": "af2f2416daba71d3d83ff91f4844b7eae1ee6d38",
      "parents": [
        "d61d8d3475a948af4cdf47927cc790027d8b8e4c"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 16:16:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 16:21:29 2026"
      },
      "message": "Encapsulate IncompleteRecord IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945744434\n"
    },
    {
      "commit": "d61d8d3475a948af4cdf47927cc790027d8b8e4c",
      "tree": "1ccd738b1b48e623eac52e1b0e158d1a09c4aea1",
      "parents": [
        "01a1888afdd76ed03c68318389cf7002b7ce1516"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:40:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:56:30 2026"
      },
      "message": "Encapsulate Field IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945729585\n"
    },
    {
      "commit": "01a1888afdd76ed03c68318389cf7002b7ce1516",
      "tree": "6bb7bdc7e7d809e0d27205ce864e03a25b33da71",
      "parents": [
        "9555764647177937a82ccdc2830a9e495f25df5c"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:40:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:47:42 2026"
      },
      "message": "Encapsulate TemplateSpezialization IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945729429\n"
    },
    {
      "commit": "9555764647177937a82ccdc2830a9e495f25df5c",
      "tree": "cf334ac7b9c6191d248ec329c9ce895736e0903d",
      "parents": [
        "6086f7258f1ccf81f4948ef15fe7027afb091be4"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:39:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:43:07 2026"
      },
      "message": "Encapsulate Func IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945729240\n"
    },
    {
      "commit": "6086f7258f1ccf81f4948ef15fe7027afb091be4",
      "tree": "ce81a17a4dc9c9dc3d37c34d6cd3cac43c3006cc",
      "parents": [
        "284ce10354cd4a7e3671b8e74b98075bbb906d5f"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:39:09 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:42:45 2026"
      },
      "message": "Encapsulate FuncParam IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945729035\n"
    },
    {
      "commit": "284ce10354cd4a7e3671b8e74b98075bbb906d5f",
      "tree": "b355720e86966456cec1421bbc1b0cb14be5a379",
      "parents": [
        "0626e7fb590759bc0304885a6c312b7b5e68947e"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:38:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:42:21 2026"
      },
      "message": "Encapsulate InstanceMethodMetadata IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945728815\n"
    },
    {
      "commit": "0626e7fb590759bc0304885a6c312b7b5e68947e",
      "tree": "427e88de2924afe5be861e465c99d79db80fa4d7",
      "parents": [
        "772cea13de1fb1958f1a2d9eeee5d03b2331aacf"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:38:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:41:57 2026"
      },
      "message": "Encapsulate Operator IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945728637\n"
    },
    {
      "commit": "772cea13de1fb1958f1a2d9eeee5d03b2331aacf",
      "tree": "dd860d90408d113c74fbc72e0dbaabfdefb4102a",
      "parents": [
        "8d46c0324e8cd65e7584ab477ebcde73423ccc6d"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:37:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:41:35 2026"
      },
      "message": "Encapsulate Enum/Enumerator IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945728390\n"
    },
    {
      "commit": "8d46c0324e8cd65e7584ab477ebcde73423ccc6d",
      "tree": "b8888330754a0a2ade8c961071d552dd9d178601",
      "parents": [
        "a4f80dfad4034325ab09a7201afe83adf6474f8c"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:36:58 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:41:12 2026"
      },
      "message": "Encapsulate TypeAlias IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945728172\n"
    },
    {
      "commit": "a4f80dfad4034325ab09a7201afe83adf6474f8c",
      "tree": "c1a431dc4d385826515eab498107bba9caa24655",
      "parents": [
        "597e9256ac82460428ca7bc5e3c1f88889f213b8"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:36:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:40:46 2026"
      },
      "message": "Encapsulate ExistingRustType IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945727908\n"
    },
    {
      "commit": "597e9256ac82460428ca7bc5e3c1f88889f213b8",
      "tree": "56ae5bfa774518fdb5534ec605917f0efeeaba50",
      "parents": [
        "9738e4072c223f1113324504a784cbdadaf40d0a"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:35:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:40:24 2026"
      },
      "message": "Encapsulate Namespace IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945727713\n"
    },
    {
      "commit": "9738e4072c223f1113324504a784cbdadaf40d0a",
      "tree": "c52bf68acf50cf114fa7ca005bf702fc645a8ee1",
      "parents": [
        "010fb04e5e06f0e046eb287c5799ba22801bae42"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:35:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:35:59 2026"
      },
      "message": "Encapsulate Identifier IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945727375\n"
    },
    {
      "commit": "010fb04e5e06f0e046eb287c5799ba22801bae42",
      "tree": "035992263784f9de5c04ca42d9cb40e02ce19482",
      "parents": [
        "0832e2a8fc3e44bfa475d125db61ea0c88302c97"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 15:26:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 15:27:44 2026"
      },
      "message": "Adapt to upstream refactor of BackendRepr to include a b_offset field and decouple from ABI versions.\n\nPiperOrigin-RevId: 945724093\n"
    },
    {
      "commit": "0832e2a8fc3e44bfa475d125db61ea0c88302c97",
      "tree": "09d0075bbe07d76bc58c9317c506c353dc782050",
      "parents": [
        "dc1e4098f7e051dfe39bedc79f58da20ff49c8f2"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 01:01:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 01:03:17 2026"
      },
      "message": "Encapsulate UnsupportedItem IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945409598\n"
    },
    {
      "commit": "dc1e4098f7e051dfe39bedc79f58da20ff49c8f2",
      "tree": "710be157fb71718d0200efdef3f0e0caeb00245f",
      "parents": [
        "aa5867fe0222f763bc944c4451ea0014a884e5b9"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 00:54:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 00:54:41 2026"
      },
      "message": "Encapsulate UseMod IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945407107\n"
    },
    {
      "commit": "aa5867fe0222f763bc944c4451ea0014a884e5b9",
      "tree": "154e83070d4d566cfea81ca554d662de9d36d435",
      "parents": [
        "00c3f7bb9474f30b1e648fd3ca9080369231c34e"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 00:46:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 00:47:12 2026"
      },
      "message": "Encapsulate Comment IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945404572\n"
    },
    {
      "commit": "00c3f7bb9474f30b1e648fd3ca9080369231c34e",
      "tree": "244278d518ca13f7c404b4666d51462d33e1a005",
      "parents": [
        "9de105a847f724958c1fcc3051c1d9355017527b"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Fri Jul 10 00:38:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 10 00:39:27 2026"
      },
      "message": "Encapsulate Constant IR struct and update callers to use these accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945402099\n"
    },
    {
      "commit": "9de105a847f724958c1fcc3051c1d9355017527b",
      "tree": "e81365b4f45a6eeb0f2228fce22bf281b906b367",
      "parents": [
        "791236b1330c45580a0ac01dfea90d7fc3f34df3"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Thu Jul 09 22:41:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 22:42:41 2026"
      },
      "message": "Encapsulate IntegerConstant IR struct and update callers to use these accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945354010\n"
    },
    {
      "commit": "791236b1330c45580a0ac01dfea90d7fc3f34df3",
      "tree": "840c2cb63844bb225387fc5e7e1e91afe6b30c96",
      "parents": [
        "30542c7dc7eeb7938a54947082467f6eff69fda5"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Thu Jul 09 22:32:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 22:33:56 2026"
      },
      "message": "Encapsulate BazelLabel IR struct and update callers to use its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945349627\n"
    },
    {
      "commit": "30542c7dc7eeb7938a54947082467f6eff69fda5",
      "tree": "84790a5cd299e4653108c95c368fd2535d7d497a",
      "parents": [
        "1736b8114407780174f2143cc139425c4d949be3"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Thu Jul 09 22:22:14 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 22:24:27 2026"
      },
      "message": "Encapsulate GlobalVar IR struct and update callers to call its accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945344502\n"
    },
    {
      "commit": "1736b8114407780174f2143cc139425c4d949be3",
      "tree": "eac7fcdf492b9016a1e00652871abdef35ebefd9",
      "parents": [
        "f5bf8bf338147dc7ad74ca1671eafef34e9eca22"
      ],
      "author": {
        "name": "Kezia Rijadi",
        "email": "rrijadi@google.com",
        "time": "Thu Jul 09 22:10:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 22:11:24 2026"
      },
      "message": "Modify rs_bindings_from_cc to pass GenerateBindingsRequest by value.\n\nThis will make it convenient to refactor bindings generation logic (especially concerning IR mutations, e.g. lifetime transforms) to use the protobuf in place of the Rust IR copy.\n\nPiperOrigin-RevId: 945338508\n"
    },
    {
      "commit": "f5bf8bf338147dc7ad74ca1671eafef34e9eca22",
      "tree": "14ea4fe894e0720d9e1c6fb8ad52536677a756ab",
      "parents": [
        "6abd6b85932ac36a2fed147598d3606e49953293"
      ],
      "author": {
        "name": "Michael VanBemmel",
        "email": "mvanbem@google.com",
        "time": "Thu Jul 09 22:00:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 22:01:45 2026"
      },
      "message": "Introduce `CustomizeMethodsKind` for records\n\nThis change is part of the work to customize the generated bindings for `absl::flat_hash_map` and `absl::flat_hash_set`.\n\nLike the existing `UniformReprTemplateType`, a record\u0027s `CustomizeMethodsKind` is determined by its `TemplateSpecializationKind` combined with some contextual information.\n\nWhen a record\u0027s `customize_methods` field is `Some`, no direct bindings are generated for its methods. This mechanism does not yet provide new customized methods on these types.\n\nPiperOrigin-RevId: 945333523\n"
    },
    {
      "commit": "6abd6b85932ac36a2fed147598d3606e49953293",
      "tree": "c6ebd0b17e2264941f7aa0d7122532a2e53b0ca2",
      "parents": [
        "016b55d3eca1921650f43e4dcfde1cd98cd785ba"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 21:45:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 21:48:33 2026"
      },
      "message": "Encapsulate BaseClass IR struct and update callers to use these accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945325847\n"
    },
    {
      "commit": "016b55d3eca1921650f43e4dcfde1cd98cd785ba",
      "tree": "2ca2ef927bc388f0ad004042ccb938eb0129bae8",
      "parents": [
        "02710da35ae9534bcad11b15d5c87116def80449"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 21:38:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 21:39:46 2026"
      },
      "message": "Encapsulate SizeAlign IR struct and update callers to use these new accessors.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945322530\n"
    },
    {
      "commit": "02710da35ae9534bcad11b15d5c87116def80449",
      "tree": "428abb6fb8f1609023dff9a55476ef9047c06318",
      "parents": [
        "b13aedae6e28d20fc6d4301810cd63585e7424e0"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 21:30:44 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 21:31:43 2026"
      },
      "message": "Encapsulate PointerType IR struct and update relevant call-sites.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945318672\n"
    },
    {
      "commit": "b13aedae6e28d20fc6d4301810cd63585e7424e0",
      "tree": "83ae97d10bf883a13271b11d6026605a379fb9c8",
      "parents": [
        "021e42125560d62db3d81375ef26895410a58de9"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 21:20:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 21:21:36 2026"
      },
      "message": "Add helpers for opaque alises branching on rustversion\n\nThis changes clean up the async fn support, but will be used in a followup for RPIT support.\n\nPiperOrigin-RevId: 945313907\n"
    },
    {
      "commit": "021e42125560d62db3d81375ef26895410a58de9",
      "tree": "c41de3d8b7de50fda95a89558cfa6a5c4a6c6a3a",
      "parents": [
        "b120069460408106dbdf18bf80a60d2d4edeb5d3"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 21:03:03 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 21:04:06 2026"
      },
      "message": "Fix clippy warning unused variable\n\nNeed to keep the parameter around because it\u0027s a db method, so I just prefixed with `_`.\n\nPiperOrigin-RevId: 945304725\n"
    },
    {
      "commit": "b120069460408106dbdf18bf80a60d2d4edeb5d3",
      "tree": "a96309f27dfeddaa399d42c270aa25ba11bc3f26",
      "parents": [
        "1e404a4aa09e7f93b6479c8731fa4e3ba0f691c5"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 20:28:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 20:29:42 2026"
      },
      "message": "Add an `intern!` macro for convenient string interning.\n\nThis macro is shorthand for `interner.intern(format_args!(..))`, allowing you to write things like `intern!(db.interner(), \"foo {}\", bar)`.\n\nThis doesn\u0027t fully start using it around the codebase, that can happen in followup changes.\n\nPiperOrigin-RevId: 945286579\n"
    },
    {
      "commit": "1e404a4aa09e7f93b6479c8731fa4e3ba0f691c5",
      "tree": "5d7e100cadb1b753d6886f988b42679d6d7f7adb",
      "parents": [
        "96cc2a1c6562eb68935fb45fa600d47dbc3e5855"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 20:14:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 20:17:41 2026"
      },
      "message": "Make Interner::intern take format_args!() instead of impl Display\n\nWill be used by followup `intern!()` macro. I realized this is just more readable and consistent than sometimes using `db.interner().intern(thing)` and other times doing `intern!(db.interner(), \"{thing}\")`. This forces consistency.\n\nPiperOrigin-RevId: 945279783\n"
    },
    {
      "commit": "96cc2a1c6562eb68935fb45fa600d47dbc3e5855",
      "tree": "9fa493cb41138b77dac877ee1e31fc1444f6796d",
      "parents": [
        "d28a59cfa3ce6c72edd6207e763d7afe58850726"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 19:58:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 19:59:30 2026"
      },
      "message": "Encapsulate CcType IR struct and update relevant call-sites.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945271366\n"
    },
    {
      "commit": "d28a59cfa3ce6c72edd6207e763d7afe58850726",
      "tree": "7b671ef8de2b5fe50b195619a9c15ef827a9528a",
      "parents": [
        "4e0b07cbc307fcd9ac7dd391209c4f9731d9c9d1"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 18:18:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 18:21:48 2026"
      },
      "message": "Add a string interner to the bindings generator.\n\nThis change introduces an `Interner` struct to deduplicate strings generated during the bindings generation process. The interner uses `Rc\u003cstr\u003e` to manage interned strings to avoid lifetime noise (for now), reducing memory overhead for identical strings. It also accepts `impl Display` so that users can pass in not-yet-allocated things like `format_args!()`, and formats them to a retained buffer to avoid allocator pressure.\n\nCallers can now use it like this:\n```rust\n// old\nlet s \u003d Rc::from(format!(\"thing_{i}\"));\n\n// new\nlet s \u003d db.interner().intern(format_args!(\"thing_{i}\"));\n```\nIt\u0027s possible we might want an `intern!()` macro that lets you do this, but I didn\u0027t want to bloat this change:\n```rust\nlet s \u003d intern!(db, \"thing_{i}\");\n```\n\nFor now, it\u0027s not used by anything yet. In the future, we may want to hand out `\u0026str` or a `Symbol(u32)` newtype instead, but for now this is fine.\n\nPiperOrigin-RevId: 945220339\n"
    },
    {
      "commit": "4e0b07cbc307fcd9ac7dd391209c4f9731d9c9d1",
      "tree": "31a6d12758c1c53af49cb39a3d2ac2707d57624c",
      "parents": [
        "9f6da09881b2a969768c10bec5122b323e2cef20"
      ],
      "author": {
        "name": "Andrew Le",
        "email": "andrewhle@google.com",
        "time": "Thu Jul 09 17:12:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 17:23:34 2026"
      },
      "message": "Add #line directives to extracted C++ thunks.\n\nPiperOrigin-RevId: 945182519\n"
    },
    {
      "commit": "9f6da09881b2a969768c10bec5122b323e2cef20",
      "tree": "85cdd9b6f504e2818511c6848bd1a2e3edc805c7",
      "parents": [
        "89841253d5f38d05f707265fd1f27da5719b7fca"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Thu Jul 09 16:38:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 16:39:23 2026"
      },
      "message": "Add `crubit_supported` and `supported_platforms` `select()` attributes to //third_party/crubit/BUILD to allow conditional target selection on platforms where Crubit toolchains are available.\n\nPiperOrigin-RevId: 945164619\n"
    },
    {
      "commit": "89841253d5f38d05f707265fd1f27da5719b7fca",
      "tree": "5361d5be4dc6a486a50362c2a97860926a71ef2f",
      "parents": [
        "41b928bc5ebd03deb3c719e3df5ee2cb3a03d752"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 15:17:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 15:18:40 2026"
      },
      "message": "Automatic code cleanup.\n\nPiperOrigin-RevId: 945126575\n"
    },
    {
      "commit": "41b928bc5ebd03deb3c719e3df5ee2cb3a03d752",
      "tree": "85cdd9b6f504e2818511c6848bd1a2e3edc805c7",
      "parents": [
        "0acb7f6c2624776d958b8530ff933fc9aba013e6"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Thu Jul 09 14:39:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 14:40:22 2026"
      },
      "message": "Add `crubit_supported` and `supported_platforms` `select()` attributes to //third_party/crubit/BUILD to allow conditional target selection on platforms where Crubit toolchains are available.\n\nPiperOrigin-RevId: 945109867\n"
    },
    {
      "commit": "0acb7f6c2624776d958b8530ff933fc9aba013e6",
      "tree": "5361d5be4dc6a486a50362c2a97860926a71ef2f",
      "parents": [
        "fd1e47c60ed87126011073999b6af6defe2885a9"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 09 14:02:00 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 14:05:16 2026"
      },
      "message": "Encapsulate Lifetime and HeaderName IR nodes and update relevant call-sites.\n\nThis chain of changes refactors IR accesses to use setters/getters. This is done to incrementally migrate bindgen logic to use ProtoViews instead of allocating an intermediate Rust IR struct, with the aim of reducing Crubit\u0027s memory usage.\n\nPiperOrigin-RevId: 945094748\n"
    },
    {
      "commit": "fd1e47c60ed87126011073999b6af6defe2885a9",
      "tree": "af0eb9df6151bba29cc156c009c856308047cf4a",
      "parents": [
        "d0da6d18b13c60b06a6cb793da4b24b7a7f566e7"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Thu Jul 09 07:45:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 07:46:27 2026"
      },
      "message": "(Feature-gated) add all stdlib macros to the list of reserved words.\n\nWe kind of got away with this because, while the standard requires that these are macros, the implementations we tested with did something like `#define stdin stdin`. Hard to notice! Windows doesn\u0027t do this, and other platforms are not required to, so this is a portability hazard.\n\nI uhhhhhhh do not remember how you\u0027re supposed to refresh the lockfile so tbh I just did it by hand.\n\nPiperOrigin-RevId: 944950210\n"
    },
    {
      "commit": "d0da6d18b13c60b06a6cb793da4b24b7a7f566e7",
      "tree": "31b44bb197fd3560dbe37c05ebe809e394eed9da",
      "parents": [
        "b32762501783ee2db4cf3e5b70564e0afd6d35e7"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Thu Jul 09 00:21:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 09 00:22:37 2026"
      },
      "message": "`rs_bindings_from_cc` bindings: Support explicitly provided crate names.\n\nThis CL supports Crubit clients where crate names are not directly based\non a target name.  For example, Chromium uses a mangling / hashing\nscheme to guarantee globally-unique crate names (see `chromium::import!`\nfor more details).  Together with https://crrev.com/c/8027730/1 this CL\nunblocks Chromium\u0027s ability to use transitive dependencies in\n`rs_bindings_from_cc`-generated bindings.\n\nPiperOrigin-RevId: 944789077\n"
    },
    {
      "commit": "b32762501783ee2db4cf3e5b70564e0afd6d35e7",
      "tree": "71e40841b4725f5da73ee6efaf9eb52226c659e2",
      "parents": [
        "20ed751cf4396e1a1fad8840b60c30a3459da1f0"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 23:17:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 23:21:18 2026"
      },
      "message": "Support `__int128` and `unsigned __int128` as primitive types.\n\nNo real downside now that clang and rust match ABIs (2024: https://blog.rust-lang.org/2024/03/30/i128-layout-update/)\n\nThis also enables clean and easy use of absl::(u)int128 once support is enabled, as it takes a u128/i128 in the constructor. So you can just call functions like `Foo(12345_u128.into())`.\n\nOne-shot by Gemini but it really does look right to me, except that I do not know why some primitive types (all of the integers) use a dedicated enum, while other primitives (f32) use CrubitAbiType::transmute. Since CrubitAbiType::transmute was easier, I just did that, but I can also add it to the list of integer types in the CrubitAbiType enum.\n\nPiperOrigin-RevId: 944760362\n"
    },
    {
      "commit": "20ed751cf4396e1a1fad8840b60c30a3459da1f0",
      "tree": "8b8996bb7493ca6fcebc79e9eedaa85093d76071",
      "parents": [
        "823aba026fd061bd7a977c8ea0262deeda1abe3d"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 22:39:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 22:43:08 2026"
      },
      "message": "Enable absl::(u)int128 in Crubit.\n\nThis isn\u0027t as useful as it could be because Crubit does not support `__(u)int128_t` (newly filed as b/532400117 -- we were missing a bug, apparently), so you can\u0027t create an arbitrary 128 bit integer from a Rust native 128 bit integer. So, using functions that accept a uint128 is not as simple as`Foo(1234567_u128.into())`.\n\nWe could manually add a `From`/`Into` impl, but that makes it painful to roll out the `i128`/`u128` types. Instead, I\u0027d like to just add support for the builtin 128 bit integers, right after this.\n\n(If you need an immediate workaround, you can do arithmetic to build up larger int128s.)\n\nPiperOrigin-RevId: 944739140\n"
    },
    {
      "commit": "823aba026fd061bd7a977c8ea0262deeda1abe3d",
      "tree": "13d5665aa5442a1ac4c73ad23720e6cfa9428c37",
      "parents": [
        "d5c08714e32c9e30db66c5b848fe13957f478f4b"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 22:37:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 22:39:05 2026"
      },
      "message": "Cleanup: use `CrubitAbiType::Transmute` for primitives.\n\nEarlier versions of `CrubitAbiType::Transmute` used a fully qualified path for the C++ type, and types with spaces in it needed special-casing. https://github.com/google/crubit/commit/e3d59c5c8d17cd5d4a32a992ab379e76b58633b2 changed it to be an arbitrary `TokenStream`, so we no longer need dedicated variants for types like `unsigned char`.\n\nPiperOrigin-RevId: 944737685\n"
    },
    {
      "commit": "d5c08714e32c9e30db66c5b848fe13957f478f4b",
      "tree": "14e61b0bfd0054d54015bd4584438e4d4bf931c4",
      "parents": [
        "8552fe4b6ac4e1588e06d9ab1a8241ca06697bc1"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 08 22:34:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 22:35:20 2026"
      },
      "message": "Clean up deprecated aliases to `is_golden_test` feature flag.\n\nPiperOrigin-RevId: 944736326\n"
    },
    {
      "commit": "8552fe4b6ac4e1588e06d9ab1a8241ca06697bc1",
      "tree": "dcae4f5f41b575dcdebee643908b88f320ce31b5",
      "parents": [
        "bc13686d082993df2b6177a1bc95fb29934a3db3"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 08 22:22:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 22:23:35 2026"
      },
      "message": "Add declval.rs for future usage by RPIT support\n\nYou can imagine doing something like this:\n```rust\nfn inner\u003cF\u003e(_: impl FnOnce() -\u003e F, this: *mut ()) {\n    unsafe { core::ptr::drop_in_place(this as *mut F); }\n}\ninner(|| my_async_fn(declval(), declval()), this)\n```\n\nUnlike `panic!()`, we can use turbofish syntax to specify what the type system is actually supposed to see, instead of hoping that `!` coerces to the correct type.\n\nPiperOrigin-RevId: 944730362\n"
    },
    {
      "commit": "bc13686d082993df2b6177a1bc95fb29934a3db3",
      "tree": "a808cb00fb3869cf4058e9c814bba9555c1a323f",
      "parents": [
        "4a931e032abfb42d09825f2056d9d2e020e4ab85"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Wed Jul 08 18:21:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 18:22:52 2026"
      },
      "message": "Tweak `rs_bindings_from_cc` tests to also work on 32-bit targets.\n\nPiperOrigin-RevId: 944603684\n"
    },
    {
      "commit": "4a931e032abfb42d09825f2056d9d2e020e4ab85",
      "tree": "116941ac5fa5b674dc61c708063c09212f6b73b5",
      "parents": [
        "079ffd4bc73826eee1536d681ac7b8a066f4cb8e"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 18:06:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 18:07:07 2026"
      },
      "message": "Do a pass over the documentation for ctor.\n\nGoal is to make it actually possible to find the getting started docs and be overall somewhat parseable at a glance, even if it is an in-depth API.\n\nPiperOrigin-RevId: 944595357\n"
    },
    {
      "commit": "079ffd4bc73826eee1536d681ac7b8a066f4cb8e",
      "tree": "ee42f418b0e7e891bdf3c180ba51d0e5d1a8920d",
      "parents": [
        "0fde1b1d8432cbc275ae3c0eb7a5797df6f55d0f"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 08 17:51:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 17:52:10 2026"
      },
      "message": "Fix raw pointer type deduction for derived smart pointer class templates\n\nWhen a class template annotated with `_Nullable` (e.g. `UniqueHandle\u003cT\u003e`) is derived from a smart pointer (`std::unique_ptr\u003cstd::remove_pointer_t\u003cT\u003e\u003e`) without defining its own `pointer`/`element_type` type aliases, `underlyingRawPointerType()` previously fell back to template argument 0 (`FooBar*`) and created a pointer type (`FooBar**`).\n\nThis change ensures that `underlyingRawPointerType()` checks base classes for an underlying raw pointer type before falling back to template argument deduction on the derived class template.\n\nAlso adds regression tests in `smart_pointers_diagnosis.cc` for local variables and `_Nullable` parameters.\n\nPiperOrigin-RevId: 944586692\n"
    },
    {
      "commit": "0fde1b1d8432cbc275ae3c0eb7a5797df6f55d0f",
      "tree": "59edd153c9b4ee6e262d4279d7239578e52b6a02",
      "parents": [
        "685a46aabbdf6552803c5bd77da6628008d0d245"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Wed Jul 08 16:34:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 16:36:04 2026"
      },
      "message": "Apply `cfi_encoding` to structs/newtypes in ffi_11.\n\nPlain type aliases (pub type foo \u003d bar) don\u0027t need or support\ncfi_encoding, but rustc should already give us what we need.\n\nEncodings are documented at https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling-builtin\n\nPiperOrigin-RevId: 944544679\n"
    },
    {
      "commit": "685a46aabbdf6552803c5bd77da6628008d0d245",
      "tree": "4b25ac85f05ebd47a7b79efe3728a789371eb7c9",
      "parents": [
        "6a359fc39732f980056747d1dab835b2f75cd465"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 07:09:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 07:10:23 2026"
      },
      "message": "Check for `CRUBIT_MUST_BIND` before discarding `private` items.\n\nAlso, while I\u0027m here, give a hard error for `CRUBIT_MUST_BIND` + `CRUBIT_DO_NOT_BIND`.\n\nThe goal being, then, that after this CL, `CRUBIT_MUST_BIND` -\u003e if bindings generation succeeded, this declaration has bindings. And `CRUBIT_DO_NOT_BIND` -\u003e if bindings generation succeeded, this declaration does not have bindings.\n\nThere may be other cases, but I think this should be most of it. The declaration importer is the only place where we can have this problem (because it can skip items entirely), and it now does the check at every conditional in the importer\u0027s main function.\n\nTested manually, gives an error as so:\n\n```c++\nstruct TwoWords {\n  void* ptr1;\n  void* ptr2;\n  private: CRUBIT_MUST_BIND void foo() {}\n};\n```\n\n-\u003e\n\n```\nerror: function `unique_ptr_test::TwoWords::foo` could not be bound\n  Private declarations cannot receive bindings\n```\nPiperOrigin-RevId: 944313857\n"
    },
    {
      "commit": "6a359fc39732f980056747d1dab835b2f75cd465",
      "tree": "a4b1ba7759b73102a544f30d39d986e0f679438e",
      "parents": [
        "22767d45ba179d89c68a569b74ef6d2f19f55054"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 03:43:40 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 03:44:31 2026"
      },
      "message": "Allow multiple include paths in Rust Crubit annotations.\n\nI changed the proc macro to allow them, but it won\u0027t actually work (will crash Crubit) until the next crosstool release. This is a concession to implementer convenience / because I might not be here during the next crosstool release. You still get an error, just at a delay (at bindings generation time), so I think this is a reasonable tradeoff to make it all go in one CL and help me fix bugs at a faster rate. :)\n\nPiperOrigin-RevId: 944244520\n"
    },
    {
      "commit": "22767d45ba179d89c68a569b74ef6d2f19f55054",
      "tree": "40198196e53abb8c2765e27df7e663b56b4acb81",
      "parents": [
        "5f581c79424912eed74b169cb6af9042a579d1ae"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Wed Jul 08 03:01:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 03:01:49 2026"
      },
      "message": "Fix `operator\u003c` bindings sans `operator\u003d\u003d`.\n\nThese never were able to get successful bindings. We check for `operator\u003d\u003d`, and, if not present, fail to generate a `PartialOrd`.\n\nThe problem is that when we added the ability to have detailed diagnostics, this caused a stub error trait implementation to get generated, and that would fail to compile -- both because it had the real body containing an `\u003d\u003d` call, but also because of the fact that you can\u0027t implement `PartialOrd`, even with unsatisfied bounds, on a type that doesn\u0027t implement `PartialEq`. There was no regression test for types that only had `operator\u003c`. Bindings generation would fail / cause compilation errors for any target that had a type with `operator\u003c` but no `operator\u003d\u003d`.\n\nIn turn, this blocked turning Crubit on for protobuf\u0027s Message -- the header has such types. Oops!\n\nReally fun bug.\n\nI opted to suppress the `PartialOrd` entirely -- while it\u0027s easy enough to replace the method body with `unreachable!()`, that doesn\u0027t fix one last compilation error caused by uttering the words `impl PartialOrd for X` at all when `X` doesn\u0027t implement `PartialEq`. A future CL could try to be a bit more careful, and only suppress the error trait impl if a missing `PartialEq` is the problem, or generate an error trait impl for `PartialEq` in that event, or something.\n\nNo geminis were harmed (or used) in the creation of this changelist.\n\nPiperOrigin-RevId: 944230835\n"
    },
    {
      "commit": "5f581c79424912eed74b169cb6af9042a579d1ae",
      "tree": "b5695ef5e633f1c582fab103f630e9d0f7c15a8e",
      "parents": [
        "8e9194d38e83bc27272c1ea7a359027e843272bf"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 08 01:24:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 01:25:09 2026"
      },
      "message": "Populate `impl_debug` in Crubit IR.\n\nUpdates the importer to read the `crubit_override_debug` annotation on records, checks whether the `record_impl_debug` feature is enabled for the target, and populates the `impl_debug` boolean field in the IR.\n\nPiperOrigin-RevId: 944201431\n"
    },
    {
      "commit": "8e9194d38e83bc27272c1ea7a359027e843272bf",
      "tree": "93dc05c1fca9a911855898ab8b2c03d7dcb8fc81",
      "parents": [
        "da672c3bf4303b9ff1433e12134c3eda2434f953"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 22:42:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 22:46:17 2026"
      },
      "message": "Correctly handle typedef struct Foo Foo;\n\nThe issue was that Crubit would skip the typedef (because it looked pointless), but users of that typedef wouldn\u0027t really know that it was skipped. So when they tried to generate bindings, they would get an erased byte blob because the ItemId for that TypeAlias was never imported.\n\nThis change fixes that: while we\u0027re importing things like Records, we canonicalize the types of the fields. During this phase, we detect typedefs that are shaped like `typedef struct Foo Foo;` and say \"hey that actually is going to get filtered out, you will now use the inner type instead.\" This \"detection and getting the inner type\" logic is implemented in a single source of truth by `StripCStyleNameIntroducingTypedef` which was added in https://github.com/google/crubit/commit/9eda618745cc305f4ace9541fbc904a7c279c605. That way, there will always be agreement between the type alias importer on which typedefs should be skipped, and the decl canonicalizer on which typedefs should be \"unwrapped\".\n\nPiperOrigin-RevId: 944132475\n"
    },
    {
      "commit": "da672c3bf4303b9ff1433e12134c3eda2434f953",
      "tree": "78ce2b3a59594b4e644c645f9080b15fb0eebd81",
      "parents": [
        "9de487957037938a50121970e49abf14effaa1f4"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 21:55:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 21:58:41 2026"
      },
      "message": "Ensure that type aliases to __foo types also do not generate.\n\nPreviously, we would get an alias to an incomplete. This is wrong: it\u0027s not necessarily true that the type was incomplete, it\u0027s just that we chose to not import it because we ignore dunder types because they are noisy and not particularly useful to Rust users.\n\nThis also solves a real problem: structs that had fields whose type was a type alias to __foo types would not compile, because the type alias would be Incomplete but the rest of Crubit analysis wouldn\u0027t understand that and try to have it inline by value. As the golden diff shows, these aliases no longer generate (which is the correct behavior).\n\nPiperOrigin-RevId: 944108360\n"
    },
    {
      "commit": "9de487957037938a50121970e49abf14effaa1f4",
      "tree": "79fdaa55ed77bcbfb3d107aea5c4d0de7c1b9f54",
      "parents": [
        "3b784e4508335d5b7387fc61f460c76f91f2dd15"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Tue Jul 07 21:53:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 21:53:54 2026"
      },
      "message": "Unify thunk name disambiguation across templates + mangling conflicts.\n\nPiperOrigin-RevId: 944107149\n"
    },
    {
      "commit": "3b784e4508335d5b7387fc61f460c76f91f2dd15",
      "tree": "1ebd28ab15be9911b889d15b33bc5651fabb1fd1",
      "parents": [
        "e8848d1ca3f0574aa4963d3de96e6eef9cb2b70d"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Tue Jul 07 21:31:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 21:32:17 2026"
      },
      "message": "Force thunk generation in presence of mangling name conflicts.\n\nPiperOrigin-RevId: 944096354\n"
    },
    {
      "commit": "e8848d1ca3f0574aa4963d3de96e6eef9cb2b70d",
      "tree": "5844b3d3b972d779f34960805b0459b4ee8f0f18",
      "parents": [
        "0fb4772b914073701c2e26315891c7944d67fa6e"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 21:08:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 21:11:46 2026"
      },
      "message": "Golden for dunder types and aliases to them\n\nThis shows the \"before\" state for some upcoming changes in a following CL.\n\nPiperOrigin-RevId: 944084591\n"
    }
  ],
  "next": "0fb4772b914073701c2e26315891c7944d67fa6e"
}
