)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "0fb4772b914073701c2e26315891c7944d67fa6e",
      "tree": "e3f95b718542b5934904f9cb0c85826da7d67d4d",
      "parents": [
        "27a5afd712234c9e6b8cb7802cd7e02fa5e35b54"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 20:54:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 20:56:12 2026"
      },
      "message": "Add typedef_incomplete_types golden test using wrapper mode\n\nThese tests don\u0027t show anything exciting yet, but will be updated in a followup which will change the struct fields from uninit blobs to pointers to the incomplete types.\n\nPiperOrigin-RevId: 944077168\n"
    },
    {
      "commit": "27a5afd712234c9e6b8cb7802cd7e02fa5e35b54",
      "tree": "9561e8698e94eb3691e0b00754f56ee30b066ca1",
      "parents": [
        "9eda618745cc305f4ace9541fbc904a7c279c605"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Tue Jul 07 20:51:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 20:52:33 2026"
      },
      "message": "Add cfi_encoding attribute to generated enums, which are passed by value\n(and therefore need to have an encoding that matches the original C++).\n\nPiperOrigin-RevId: 944075367\n"
    },
    {
      "commit": "9eda618745cc305f4ace9541fbc904a7c279c605",
      "tree": "cd1e7d055fdca12258b96b89d361eea762db678d",
      "parents": [
        "96ab519b459cbf14fdc2c8d6785f53e04c685c6c"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 20:42:56 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 20:43:54 2026"
      },
      "message": "Make helper StripCStyleNameIntroducingTypedef\n\nThis function extracts the inner TagDecl of a typedef that is shaped like a C-style name introducing typedef:\n\n```c\n// strips\ntypedef struct Foo Foo;\ntypedef struct Foo { /* ... */ } Foo;\nextern \"C\" {\ntypedef struct Foo Foo;\ntypedef struct Foo { /* ... */ } Foo;\n}\n\n// ignores\ntypedef struct Bar Foo;\ntypedef struct Bar { /* ... */ } Foo;\ntypedef other_decl_context::Foo Foo;\n```\n\nThis will be used in a followup change.\n\nPiperOrigin-RevId: 944070976\n"
    },
    {
      "commit": "96ab519b459cbf14fdc2c8d6785f53e04c685c6c",
      "tree": "901bf682ea7c6da9078007ac32212a1097745677",
      "parents": [
        "fa0b80e60fbe0f20113cd20ee6ca44d9d5067cdb"
      ],
      "author": {
        "name": "Michael VanBemmel",
        "email": "mvanbem@google.com",
        "time": "Tue Jul 07 18:04:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 18:05:25 2026"
      },
      "message": "Define `TemplateSpecializationKind`s for `absl::flat_hash_set` and `absl::flat_hash_map` and set them in the IR\n\nThese will be used to customize the bindings for these types on the Rust side.\n\nPiperOrigin-RevId: 943990664\n"
    },
    {
      "commit": "fa0b80e60fbe0f20113cd20ee6ca44d9d5067cdb",
      "tree": "bf682834441faa4bdba4a301faa10f762c65f8e6",
      "parents": [
        "6ee3e041b56e8e9c8f7d7edb55cdeb108df0f4cc"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 17:55:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 17:56:28 2026"
      },
      "message": "Cleanup IsProto2Message logic\n\nPiperOrigin-RevId: 943985531\n"
    },
    {
      "commit": "6ee3e041b56e8e9c8f7d7edb55cdeb108df0f4cc",
      "tree": "d4a917da03edfc6515d26b61519ce556e5f797ee",
      "parents": [
        "802f90dc68e9e080227c44bc3b698dfe9b6cecc5"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Tue Jul 07 17:47:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 17:48:29 2026"
      },
      "message": "Refactor Into thunks to use new make_thunk_name.\n\nFix an issue around duplicate thunks. Due to the blanket impl in the\nstandard library for From/Into and us generating bindings to Into and\nFrom for constructors and conversion operators, we\u0027ll end up in a\nsituation where we try to generate a duplicate thunk for an Into impl.\nInstead we check for when that occurs and don\u0027t emit the thunk for the\nconstructor relying on the generate_into_impl to provide the thunk.\n\nPiperOrigin-RevId: 943980751\n"
    },
    {
      "commit": "802f90dc68e9e080227c44bc3b698dfe9b6cecc5",
      "tree": "ea501aa70e2cc839624cf3d1886e6c82e6a8df56",
      "parents": [
        "558eb1fd5a585479028a35709b2459022a749ba4"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 12:29:52 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 12:31:05 2026"
      },
      "message": "Add a diagram to the Unpin design doc.\n\nThe diagram visualizes the mapping between Rust\u0027s Unpin/needs_drop properties and C++\u0027s ABI properties (trivial, clang::trivial_abi).\n\nPiperOrigin-RevId: 943835634\n"
    },
    {
      "commit": "558eb1fd5a585479028a35709b2459022a749ba4",
      "tree": "d5177930381520f0f90d0563c7cae8171cb9059e",
      "parents": [
        "0d569e8dd5fbbedb6457979b5c00acd5f53c9ac6"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jul 07 09:29:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 09:33:29 2026"
      },
      "message": "Introduce Non-Prod (iOS \u0026 android) toolchain support in Crubit.\n\nPiperOrigin-RevId: 943767049\n"
    },
    {
      "commit": "0d569e8dd5fbbedb6457979b5c00acd5f53c9ac6",
      "tree": "0bc865da6f8b0c885e8b71a7eccfe326b5df4da0",
      "parents": [
        "dd8af6282730cbe828abfec020379f050e383a1d"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Tue Jul 07 06:18:00 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 07 06:18:48 2026"
      },
      "message": "unique_ptr: Add doc comments for get and release, struct docs for pin.\n\nI\u0027m not sure anything else has missing docs. There is a potential revamp in progress in unknown commit, which also reframes the documentation, but I didn\u0027t lean into that too much.\n\nPiperOrigin-RevId: 943693697\n"
    },
    {
      "commit": "dd8af6282730cbe828abfec020379f050e383a1d",
      "tree": "741a8c105449bed89a2b1b301b5316e95c26c045",
      "parents": [
        "2e7297f590333f4b8762dc30bf483c408d0653a4"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Mon Jul 06 20:48:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 20:49:22 2026"
      },
      "message": "Refactor vec drop to use the new thunk naming logic.\n\nPiperOrigin-RevId: 943476742\n"
    },
    {
      "commit": "2e7297f590333f4b8762dc30bf483c408d0653a4",
      "tree": "6eb72edd94ac4cf05f851485ca1eeed02d1ad32b",
      "parents": [
        "170926e2d6d0c0085a77564a8390d5860fd40bd0"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Mon Jul 06 20:30:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 20:31:34 2026"
      },
      "message": "Add tests showing usage of `String`.\n\nPiperOrigin-RevId: 943467478\n"
    },
    {
      "commit": "170926e2d6d0c0085a77564a8390d5860fd40bd0",
      "tree": "fe711c2b3fe5e8d9822310cc512c7b3b042e457c",
      "parents": [
        "f82d25cb7aba1cc6939ea39f6f3defcaefd6b947"
      ],
      "author": {
        "name": "Michael VanBemmel",
        "email": "mvanbem@google.com",
        "time": "Mon Jul 06 17:36:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 17:37:49 2026"
      },
      "message": "Add an isolated test for `absl::flat_hash_map` bindings\n\nThese bindings aren\u0027t particularly useful right now, but checking this in first isolates the diffs from upcoming behavior changes.\n\nPiperOrigin-RevId: 943371903\n"
    },
    {
      "commit": "f82d25cb7aba1cc6939ea39f6f3defcaefd6b947",
      "tree": "c6eb80f4ed82fc72c07b4eb9d91c0d302b0ad4c9",
      "parents": [
        "c6bbcef463b4ace9abdcc679d698285333fc2503"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Mon Jul 06 15:04:25 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 15:05:00 2026"
      },
      "message": "Deprecate serialization of child_item_ids in rs_bindings_from_cc.\n\nchild_item_ids fields are no longer used in the backend following the restructure. We move them from the C++ IR to the Clang `Invocation` as they are now only used as an internal implementation detail in the importer.\n\nThis finalizes the cleanup needed for the IR restructure in[]\n\nPiperOrigin-RevId: 943292542\n"
    },
    {
      "commit": "c6bbcef463b4ace9abdcc679d698285333fc2503",
      "tree": "4701e5fc07fc44ad393b3fe01b3538e36008229d",
      "parents": [
        "41f29163e77de20878912e901d469fa12f31f0c7"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Mon Jul 06 14:10:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 14:15:56 2026"
      },
      "message": "Deprecate children_item_ids in the rs_bindings_from_cc\u0027s backend and test matchers.\n\nchildren_item_ids are no longer used in the backend to resolve the db IR, hence we remove them and refactor tests to use the children items directly.\n\nPiperOrigin-RevId: 943267094\n"
    },
    {
      "commit": "41f29163e77de20878912e901d469fa12f31f0c7",
      "tree": "4ffc3ab7cc5f33adf6ec000f6ca415415fb0f611",
      "parents": [
        "11a3be857fd6f9851e3c62de4d2c7a7c1bb6f14e"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Mon Jul 06 14:08:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 14:10:23 2026"
      },
      "message": "Remove deprecated top-level IR fields (flat items array \u0026 top_level_item_ids) from the C++ IR struct.\n\nFollowing removal of top_level_item_ids from the Rust IR in the parent CL, this change removes the top_level_item_ids field from the IR::ToJson() serialization, and moves it from the C++ IR to an internal field on the Clang `Invocation`.\n\nPiperOrigin-RevId: 943266179\n"
    },
    {
      "commit": "11a3be857fd6f9851e3c62de4d2c7a7c1bb6f14e",
      "tree": "768b6e118a08661db0a59d5e6795c4fa0bbf3441",
      "parents": [
        "375d281509f3a43f72dfa8a9a65e1bea567a9827"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Mon Jul 06 13:55:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 13:56:31 2026"
      },
      "message": "Support Unpin trait impls\n\nUnlike regular trait impls in cc_bindings_from_rs, `Unpin` starts out as `kIsImplemented \u003d true` for all types, and Crubit generates specializations for `kIsImplemented \u003d false` for types that are `!Unpin`. I originally didn\u0027t have it negated, but that massively bloated generated APIs and this way felt more intuitive anyways.\n\nPiperOrigin-RevId: 943260280\n"
    },
    {
      "commit": "375d281509f3a43f72dfa8a9a65e1bea567a9827",
      "tree": "86ee9d901ec30da158f33bbfd46a4673edecbc18",
      "parents": [
        "cc142f72bdca4893f370805ef4c2bd35ce072e90"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Mon Jul 06 08:14:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 06 08:15:43 2026"
      },
      "message": "Format `Ctor![T]` parameters as `T` in C++ under new feature flag.\n\n(With some LLM help, I\u0027m still getting used to the whole \"work\" thing again.)\n\nThis was tricky and took some iteration (ty lukasza@!). The basic problem is: we actually have _three_ different types we want to use:\n\n1. The original Rust function uses `impl Ctor`\n2. The thunk needs to use a pointer or rvalue reference\n3. The C++ API should accept `T` by value.\n\nAnd this should be different for `impl Ctor` vs `RvalueReference` (which uses an rvalue reference at step 3).\n\nTo distinguish it from `RvalueReference`, I added a new type, `ByValue`. This sounds extra, but it ends up being actually useful, because in some trait contexts you can\u0027t actually use `impl Ctor`, and without this type being exposed to users, you\u0027d have no way to reproduce certain C++ APIs. (See below, When to use ByValue).\n\nTo distinguish between thunks and the API, I just use the fact that they take different code paths, and pass through an `is_thunk` parameter.\n\nTo distinguish between C++ and Rust, I reuse the already existing substitution code, shared with `impl Into` and the like.\n\nSo as a whole it makes sense to me now, and I\u0027m not sure there\u0027s any way to do this more simply. Most of the alternatives seem much hackier and more awkward.\n\n##### When to use ByValue\n\nConsider the following:\n\n```rust\nimpl\u003cC: Ctor\u003cOutput\u003dType1, Error\u003d...\u003e\u003e From\u003cC\u003e for Struct {...}\nimpl\u003cC: Ctor\u003cOutput\u003dType2, Error\u003d...\u003e\u003e From\u003cC\u003e for Struct {...}\n```\n\nNo type can implement both `Ctor\u003cOutput\u003dType1, ...\u003e` and `Ctor\u003cOutput\u003dType2, ...\u003e`, because each impl has to pick exactly one associated type, and it has to be either `Type1` or `Type2`. Unfortunately, Rust doesn\u0027t know this, and doesn\u0027t infer that blanket impls are disjoint if they have disjoint associated types on the trait constraint. Soooooo, you need to use a concrete type.\n\nBefore this CL, we\u0027d use `RvalueReference`. (This is what happens for Rust bindings to C++ functions that get mapped to traits.) The problem is, `RvalueReference` would accept, well, an rvalue reference in C++. It isn\u0027t a drop-in replacement, if you need one. `ByValue` would be, allowing hopefully more seamless porting to Rust where applicable.\n\nPiperOrigin-RevId: 943114728\n"
    },
    {
      "commit": "cc142f72bdca4893f370805ef4c2bd35ce072e90",
      "tree": "a483f2040d219bbf65c2307f0fe8a6281c5b8bb8",
      "parents": [
        "cf841857e1dbfae38314e03bfc3b1c2d8334f0e1"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Thu Jul 02 22:40:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 02 22:41:32 2026"
      },
      "message": "Remove deprecated top-level IR fields (flat items array \u0026 top_level_item_ids) from the rs_bindings_from_cc\u0027s backend and test matchers.\n\nThese fields are no longer used in the backend to resolve bindings, and tests are updated to assert on the root top_level_items directly.\n\nThis CL should be a no-op.\n\nPiperOrigin-RevId: 941842425\n"
    },
    {
      "commit": "cf841857e1dbfae38314e03bfc3b1c2d8334f0e1",
      "tree": "32f87b1ff9f1918bbfeee35ed169c3f496842324",
      "parents": [
        "44dd8522fc1592a173de1168129abefa42c18a36"
      ],
      "author": {
        "name": "Fabian Wolff",
        "email": "fwolff@google.com",
        "time": "Thu Jul 02 13:07:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 02 13:09:58 2026"
      },
      "message": "Use \"east `const`\" in member functions of `rs_std::Vec` to avoid double `const`.\n\nPiperOrigin-RevId: 941659999\n"
    },
    {
      "commit": "44dd8522fc1592a173de1168129abefa42c18a36",
      "tree": "3466f7f72d0518503059a806121209f10014a90e",
      "parents": [
        "1208b2c852fc649c53c653622f29eca40c477358"
      ],
      "author": {
        "name": "Tobias Werth",
        "email": "twerth@google.com",
        "time": "Thu Jul 02 09:43:25 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 02 09:44:11 2026"
      },
      "message": "Automatic code cleanup.\n\nPiperOrigin-RevId: 941573916\n"
    },
    {
      "commit": "1208b2c852fc649c53c653622f29eca40c477358",
      "tree": "80181ad488e9aef02977b3fcd86df4976a583222",
      "parents": [
        "64b0d6ffd5743ed4fead267654e2d63079841d87"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Thu Jul 02 00:27:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 02 00:32:23 2026"
      },
      "message": "Avoid conflicting thunk names for C++ func decls with same mangled names\n\nPiperOrigin-RevId: 941375055\n"
    },
    {
      "commit": "64b0d6ffd5743ed4fead267654e2d63079841d87",
      "tree": "c9dfa26a8ee35e26017f85be37ead2c38367cbb1",
      "parents": [
        "577b66a46ed31b86b37c5f9089dd88745c5746d1"
      ],
      "author": {
        "name": "Taylor Cramer",
        "email": "cramertj@google.com",
        "time": "Thu Jul 02 00:25:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jul 02 00:27:24 2026"
      },
      "message": "Add C++ spaceship operator (\u003c\u003d\u003e) support to cc_bindings_from_rs\n\nGenerate operator\u003c\u003d\u003e when a Rust type implements Ord or PartialOrd.\n* Returns std::strong_ordering if the type implements Ord.\n* Returns std::partial_ordering if the type implements PartialOrd but not Ord.\n* Skips generating the PartialOrd operator if the type already implements Ord to avoid C++ overload conflicts.\n\nPiperOrigin-RevId: 941374487\n"
    },
    {
      "commit": "577b66a46ed31b86b37c5f9089dd88745c5746d1",
      "tree": "16d2515a607951cb522024cea1bfb7554b95eada",
      "parents": [
        "d9999f3bb39968bd53aa0ac043c12019cc0767e4"
      ],
      "author": {
        "name": "Ethan Smith",
        "email": "ethansmith@google.com",
        "time": "Wed Jul 01 22:45:56 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 22:46:49 2026"
      },
      "message": "Consolidate thunk naming logic.\n\nWe have a couple of spots scattered across the codebase that handle\nnaming thunks. This has led to our thunk naming logic being inconsistent\nor incorrect due it being unclear how to get a thunk name without also\ngenerating the rest of a thunk. This CL breaks out the thunk naming\nlogic as a standalone function that can be re-used without having to\ngenerate the actual thunks.\n\nIt also fixes an amibiguity around trait method thunk names in golden\ntests. Trait methods are allowed to overlap in name more than functins\nare, so it\u0027s not sufficient to rely on method name alone. Thunks now use\nthe trait, self type, and type args to disambiguate thunks for trait\nmethods.\n\nNo change in behavior is expected\n\nPiperOrigin-RevId: 941336216\n"
    },
    {
      "commit": "d9999f3bb39968bd53aa0ac043c12019cc0767e4",
      "tree": "fd86d3222b8406151089f62d3874b2d3666ffb5c",
      "parents": [
        "be0bee929944007b476b4e59cc55883527890237"
      ],
      "author": {
        "name": "Andrew Le",
        "email": "andrewhle@google.com",
        "time": "Wed Jul 01 22:35:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 22:36:20 2026"
      },
      "message": "Support function signatures in inline_cpp! macro.\n\nPiperOrigin-RevId: 941330998\n"
    },
    {
      "commit": "be0bee929944007b476b4e59cc55883527890237",
      "tree": "b403238d759b6cbfcb2cab761416e9c0e9ba7f7f",
      "parents": [
        "2d2e6174223ea204431c7c9f78bd6e1d3c2371dc"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Wed Jul 01 17:57:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 18:01:34 2026"
      },
      "message": "Skip Rust bindings for C/C++ functions with conflicting thunk names.\n\nPiperOrigin-RevId: 941188583\n"
    },
    {
      "commit": "2d2e6174223ea204431c7c9f78bd6e1d3c2371dc",
      "tree": "46f539a6782bde80d97c8e707aff55c0849c475e",
      "parents": [
        "4139165b0136cbaa59fac0a760cb93ea377806f6"
      ],
      "author": {
        "name": "Luke Zarko",
        "email": "zarko@google.com",
        "time": "Wed Jul 01 17:39:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 17:46:16 2026"
      },
      "message": "Add annotations to allow fine-grained control of template instantiation.\n\nThis restricts which templates are instantiated with the\n`template_instantiation` feature. A future change will provide a mechanism to\n(effectively) apply CRUBIT_ALWAYS_INSTANTIATE to all templates in a target.\n\nThe new annotations are:\n\n`CRUBIT_ALWAYS_INSTANTIATE`: when applied to a template, this annotation will fully instantiate and bind all instances created from that template. For example:\n\n```c++\ntemplate \u003ctypename T, typename S\u003e\nstruct CRUBIT_ALWAYS_INSTANTIATE AlwaysBoundTs {\n  AlwaysBoundTs(T t, S s) {}\n  void Member() {}\n};\n```\n\n`AlwaysBoundTs` will be instantiated for all `T` and `S`.\n\n`CRUBIT_BIND_INSTANTIATION`: can be used to fully instantiate and bind a *specific instance* of a template. It\u0027s a function-style macro that (pretends to) take a type as an argument. For example:\n\n```c++\nCRUBIT_BIND_INSTANTIATION(Ts\u003cint, float\u003e);\n```\n\n`Ts\u003cint,float\u003e` and all of its (valid) members will be instantiated and bound.\n\nTemplates from the top-level namespaces std, absl, c9, and rs_std will always\nbe instantiated. We may elect to add annotations to these headers at a later\npoint to eliminate the special-casing.\n\nPiperOrigin-RevId: 941178449\n"
    },
    {
      "commit": "4139165b0136cbaa59fac0a760cb93ea377806f6",
      "tree": "b184d72e38f94e5a59aafa279ebfe982093133b8",
      "parents": [
        "3799074bb6a9d709bbe55d5f1022ab6b28d7da24"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 01 17:07:25 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 17:12:07 2026"
      },
      "message": "Introduce `record_impl_debug` Crubit feature flag.\n\nDefines the new `record_impl_debug` feature flag in `CrubitFeature` and registers it in `features/BUILD`. Will gate the automated generation of `impl Debug` bindings for C++ records.\n\nPiperOrigin-RevId: 941161402\n"
    },
    {
      "commit": "3799074bb6a9d709bbe55d5f1022ab6b28d7da24",
      "tree": "3cc7f50015f8425bcb3998d740155be52e6d828d",
      "parents": [
        "eb62697cacf2cfa5ed813cb83f0172effc2d270a"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@google.com",
        "time": "Wed Jul 01 17:00:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 17:07:16 2026"
      },
      "message": "Move non-mangled and dollar-sign function tests to new test suite.\n\nMove `llvm_no_mangle_marker` and `asm_name_with_dollar_sign` from the `simple`\ntest package to a new `special_naming` test package.\n\nThis separates tests for functions with special symbols in their ASM names\nfrom general simple function tests.\n\nPiperOrigin-RevId: 941157331\n"
    },
    {
      "commit": "eb62697cacf2cfa5ed813cb83f0172effc2d270a",
      "tree": "0212edab3f28b25122ca16f371a2717ad6c08349",
      "parents": [
        "a9ea4ede385fc864ce46218519d8b33c25b68ab6"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 01 15:40:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 15:44:42 2026"
      },
      "message": "Cleanup stale doc links\n\nPiperOrigin-RevId: 941117168\n"
    },
    {
      "commit": "a9ea4ede385fc864ce46218519d8b33c25b68ab6",
      "tree": "78e37513bb06dd2a7a08cc780bb67476bff8e4a4",
      "parents": [
        "d682180674a38915e5c884220776f40a5d7563cf"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 01 15:12:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 15:18:47 2026"
      },
      "message": "Add goldens for Send and Sync\n\nThese don\u0027t do anything yet, but will in a followup CL.\n\nPiperOrigin-RevId: 941103358\n"
    },
    {
      "commit": "d682180674a38915e5c884220776f40a5d7563cf",
      "tree": "2f00ce2d90e31c569ee061ab92a31bac0bf37f04",
      "parents": [
        "b93193b0afb829b14994e2d07f5d9193675f91eb"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Wed Jul 01 00:07:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 01 00:08:57 2026"
      },
      "message": "Fix lifetime elision in manual `Display` generation for types with lifetimes.\n\nPreviously, manual `Display` implementations were generated as `impl Display for TypeName` even if the type had lifetime parameters, resulting in compilation errors. Now, generate `impl Display for TypeName\u003c\u0027_\u003e` (using stubbed lifetime parameters) when the type has lifetimes.\n\nAlso adds a reproduction test case using `simple_string_view` with `SV`\u0027s `AbslStringify` binding to `impl Display`.\n\nPiperOrigin-RevId: 940736845\n"
    },
    {
      "commit": "b93193b0afb829b14994e2d07f5d9193675f91eb",
      "tree": "bf25b35b249b66135eeada93d96c2bf3684687c2",
      "parents": [
        "07e1ddea25cca7fba5c9417024a86e5e18b2dd1c"
      ],
      "author": {
        "name": "Devin Jeanpierre",
        "email": "jeanpierreda@google.com",
        "time": "Tue Jun 30 22:28:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 30 22:29:00 2026"
      },
      "message": "Fix rvalue references (and `impl Ctor`) parameters in compound data types.\n\nIt isn\u0027t exactly a pleasant fix, especially for the `impl Ctor` case: where Rust accepts things \"by value\", they end up being by pointer in C++ (not by reference). But I would actually like to change the handling of `impl Ctor` to not map to rvalue references in C++ to begin with. (Actually, I wrote that CL first, but it was broken in ways this CL starts to address.)\n\nWhile I was here I noticed that const rvalue references aren\u0027t supported (I gather because this code path was added for `impl Ctor`\u0027s sake), and also CRef/CMut for that matter. I didn\u0027t change anything big, but I suspect we\u0027ll want to once it\u0027s a plethora of ADTs that want to pretend to be references.\n\n(Thanks to lukasza for pointing out missing test coverage here!)\n\n(AI disclosure: a bit collaborative, except the LLM wrote those unit tests using rust_out. I wrote the C++ tests and refactored the code to suit my sensibilities e.g. removing nested if -\u003e replacing it with a separate guarded case, and reworking its copy-pasted nonsense. As always, Gemini has the code quality of an unreconstructed goober, but it was a bit helpful.)\n\nPiperOrigin-RevId: 940689797\n"
    },
    {
      "commit": "07e1ddea25cca7fba5c9417024a86e5e18b2dd1c",
      "tree": "beddb57ea22c23bd5ba894018e9a15667c382123",
      "parents": [
        "d567f8a077cc7d4d0f777f613aa41a703ffb809c"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jun 30 22:20:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 30 22:22:40 2026"
      },
      "message": "Support typedefs in extern C block\n\nPreviously when the declaration is inside an extern \"C\" block (`clang::LinkageSpecDecl`), Clang assigns different `DeclContext` pointers to the two AST nodes:\n\n* For `struct Foo;` (`CXXRecordDecl`), Clang does not treat linkage specifications as semantic declaration contexts, so its `getDeclContext()` skips the extern \"C\" block and returns the enclosing `TranslationUnitDecl`.\n* For `typedef ... Foo;` (`TypedefNameDecl`), Clang sets `getDeclContext()` to the `LinkageSpecDecl` (extern \"C\" block) directly.\n\nBecause `tag_decl-\u003egetDeclContext() \u003d\u003d decl_context` compared `TranslationUnitDecl \u003d\u003d LinkageSpecDecl`, the check evaluated to false. Crubit assumed the typedef referred to a struct defined in some other scope and imported both. By using `getRedeclContext()`, we \"see through\" the extern \"C\" block:\n\n```cpp\n  /// getRedeclContext - Retrieve the context in which an entity conflicts with\n  /// other entities of the same name, or where it is a redeclaration if the\n  /// two entities are compatible. This skips through transparent contexts.\n```\n(extern \"C\" blocks are a transparent context.)\n\nPiperOrigin-RevId: 940685757\n"
    },
    {
      "commit": "d567f8a077cc7d4d0f777f613aa41a703ffb809c",
      "tree": "5e287eb60fc5f84ec94954ddcd23d952e4f509b8",
      "parents": [
        "0ebd471c5d435dd1efe254bffee970186d4a388f"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jun 30 22:17:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 30 22:18:22 2026"
      },
      "message": "Make generate_trait_impl_specialization return a simpler Err type\n\nPiperOrigin-RevId: 940684135\n"
    },
    {
      "commit": "0ebd471c5d435dd1efe254bffee970186d4a388f",
      "tree": "5117e94ad244d44ecf97d878c4162810d86e0e2f",
      "parents": [
        "2b0f2bd05cb0a0e86a0337387cf273bbe01826a1"
      ],
      "author": {
        "name": "Googler",
        "email": "no-reply@google.com",
        "time": "Tue Jun 30 21:03:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 30 21:03:56 2026"
      },
      "message": "Change collect_trait_impls to append_trait_impls\n\nWas working with this function in a followup CL and the iterators were too complex, this simplifies to some for loops :)\n\nPiperOrigin-RevId: 940646885\n"
    },
    {
      "commit": "2b0f2bd05cb0a0e86a0337387cf273bbe01826a1",
      "tree": "4f8ff25c2b9e06cc0e1fbe960f1b1c5231ba04a1",
      "parents": [
        "516d4be38976a5aa853be9cca108a8eca0b6c62b"
      ],
      "author": {
        "name": "Dhairya Gupta",
        "email": "dhairyagupta@google.com",
        "time": "Tue Jun 30 20:40:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 30 20:41:22 2026"
      },
      "message": "Update Bazel build dependencies for `cc_bindings_from_rust`\n\nPiperOrigin-RevId: 940634320\n"
    }
  ],
  "next": "516d4be38976a5aa853be9cca108a8eca0b6c62b"
}
