)]}'
{
  "log": [
    {
      "commit": "bb8bd1b0211752477707f0084f92c2af526eba89",
      "tree": "f1d6cf6ba86a31cb391c609c0b2a4c3ded7f0e41",
      "parents": [
        "37e5b0c90b8b5b24a62d43a1c0f3e63e5ddba561"
      ],
      "author": {
        "name": "saimskywalker",
        "email": "15120878+saimskywalker@users.noreply.github.com",
        "time": "Tue Oct 27 22:41:52 2026 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 14:48:53 2026 +0000"
      },
      "message": "book: Drop the system-deps section from the pkg-config page\n"
    },
    {
      "commit": "37e5b0c90b8b5b24a62d43a1c0f3e63e5ddba561",
      "tree": "345f7413ba577435f37affc9c901e439b4568fb2",
      "parents": [
        "0961e4829390e94c912291dff07c76d5357febb4"
      ],
      "author": {
        "name": "saimskywalker",
        "email": "15120878+saimskywalker@users.noreply.github.com",
        "time": "Sun Oct 25 18:26:36 2026 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 14:48:53 2026 +0000"
      },
      "message": "book: Document how to find libraries with pkg-config\n\nAdd a page to the user guide showing how to pass the include paths\nfound by the pkg-config crate to bindgen, with a short note on the\nsystem-deps crate.\n\nCloses #1247\n"
    },
    {
      "commit": "0961e4829390e94c912291dff07c76d5357febb4",
      "tree": "d5121d54696579a5bd2e217089dcb355751c69bd",
      "parents": [
        "4f64bf1c5fcd6c112cbf59623697b88a6c744d1e"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 09:39:59 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 10:06:40 2026 +0000"
      },
      "message": "comp: Prevent recursive layout computation with template unions.\n\nMore minimal version of #3419 which avoids the crash even though it\ndoesn\u0027t get the right layout (we\u0027d need to enforce rust unions for\nthese).\n\nIn llvm/llvm-project#185449, LLVM\u0027s libc++ changed a header to use a\nrecursive self-referential type, which looks approximately like:\n\n```\ntemplate \u003cclass A0, class... As\u003e union RUnion { A0 arg; RUnion\u003cAs...\u003e u; };\ntemplate \u003cclass A\u003e union RUnion\u003cA\u003e { A arg; };\nstruct Wrap { RUnion\u003cint, float\u003e u; };\n```\n\nUninstantiated union templates don\u0027t have a meaningful layout anyway, so\nreturn `None` from `CompInfo::layout` for them.\n\nCloses #3397\n"
    },
    {
      "commit": "4f64bf1c5fcd6c112cbf59623697b88a6c744d1e",
      "tree": "00f27cb26c34deebd4e878e535e6fa15b8a540f0",
      "parents": [
        "a5e753582716355a0f71181cf4003babf227568e"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 09:01:15 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 09:57:56 2026 +0000"
      },
      "message": "ci: Run tests on llvm 22.\n"
    },
    {
      "commit": "a5e753582716355a0f71181cf4003babf227568e",
      "tree": "eda2077f37c1a21b6f50404ef0430dce23921467",
      "parents": [
        "7249e69a0b13ffa10c0f11afa86764d1730d0036"
      ],
      "author": {
        "name": "Arthur031221",
        "email": "levi74108520963@gmail.com",
        "time": "Sun Oct 18 12:27:35 2026 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 09:31:21 2026 +0000"
      },
      "message": "ir: Don\u0027t treat nested alias template instantiations as recursive types\n\nEvery instantiation of an alias template shares the template\u0027s declaration, so while parsing U\u003cU\u003cint\u003e\u003e the inner U\u003cint\u003e was found on the currently parsed types stack and resolved to the outer type. The instantiation then ended up as its own template argument and codegen recursed until the stack overflowed.\n\nAlias templates cannot refer to themselves, so skip the recursion check for them.\n\nSigned-off-by: Arthur031221 \u003clevi74108520963@gmail.com\u003e\n"
    },
    {
      "commit": "7249e69a0b13ffa10c0f11afa86764d1730d0036",
      "tree": "772e520022363dbbfaa3a90287f5233ed7a4ca9e",
      "parents": [
        "f08d4fff0e060fb4081222b0ad624e0bd7ec247d"
      ],
      "author": {
        "name": "Jaden Fix",
        "email": "163031992+jadenfix@users.noreply.github.com",
        "time": "Sat Oct 17 14:20:33 2026 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 27 08:51:25 2026 +0000"
      },
      "message": "objc: Don\u0027t panic on Objective-C methods returning `Class`\n\n`CXType_ObjCClass` shared a match arm with `CXType_ObjCInterface`, so\nthe builtin `Class` type was parsed with `ObjCInterface::from_ty` on\nwhatever cursor the type was seen at. For a method return type that is\nthe method cursor, so the invented interface was named after the\nselector and `rust_ident(\"take:\")` panicked. Without a colon it did not\npanic but still generated a bogus `struct cls(pub id)` interface.\n\nAdd `TypeKind::ObjCClass`, treated like `ObjCId` everywhere and\ngenerated as `*mut objc::runtime::Class`.\n\nFixes #3484.\n"
    },
    {
      "commit": "f08d4fff0e060fb4081222b0ad624e0bd7ec247d",
      "tree": "33f44e961b4e3eabf9341920b6b80536ea9d65e9",
      "parents": [
        "841f911a8085dcf6fad69ddd67d17f0f6d8f8e24"
      ],
      "author": {
        "name": "GBra 4.669",
        "email": "35969802+GBra-4-669@users.noreply.github.com",
        "time": "Fri Oct 16 12:49:56 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Oct 16 11:44:18 2026 +0000"
      },
      "message": "objc: Don\u0027t panic on Objective-C methods with C-style parameters\n"
    },
    {
      "commit": "841f911a8085dcf6fad69ddd67d17f0f6d8f8e24",
      "tree": "fcdf51f2a1938fdda2d740f2fb3c42025dff4ea6",
      "parents": [
        "2a68e884a08a04f3ecf980723c968e16d025b427"
      ],
      "author": {
        "name": "Maximilian Hils",
        "email": "mhils@google.com",
        "time": "Wed Oct 14 00:17:05 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Oct 14 10:47:12 2026 +0000"
      },
      "message": "Peel all array dimensions in clang::Type::is_const\n\nPreviously, ir/var.rs and ir/ty.rs only peeled a single array layer when checking whether a ConstantArray or IncompleteArray had const-qualified elements. As a result, multidimensional const arrays (e.g. `extern const int baz[1][1];` or `extern const int qux[][1];`) were emitted as `pub static mut`, and 3D+ const array parameters were emitted as `*mut`.\n\nMove the array-peeling loop into `clang::Type::is_const` so all callers handle arbitrary-dimensional constant and incomplete arrays consistently.\n"
    },
    {
      "commit": "2a68e884a08a04f3ecf980723c968e16d025b427",
      "tree": "f6fabede735422a882a8ed4e803ac17649d4cbdb",
      "parents": [
        "ab389cd60e5a874cbf9567dbac490c97959b4b9a"
      ],
      "author": {
        "name": "Jaden Fix",
        "email": "163031992+jadenfix@users.noreply.github.com",
        "time": "Sun Oct 11 23:45:36 2026 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 13 11:39:32 2026 +0000"
      },
      "message": "clang: Only match the attribute name when detecting function attributes.\n\nWhen an attribute comes from a macro, libclang reports an extent that\nstarts at the attribute in the macro definition but ends at the\nexpansion site. Tokenizing that range lexes everything in between, so\n`has_attrs` saw the `_Noreturn` from an unrelated `#define` and marked a\ndeprecated function as `-\u003e !`. If the macro lives in another file, the\nrange spans two files and tokenizes to nothing, so a real `_Noreturn`\nbehind such a macro was missed.\n\nOnly look at the first token at the start of the attribute\u0027s extent,\nwhich is the attribute name and is lexed from the right place either way.\n\nFixes #3496\n"
    },
    {
      "commit": "ab389cd60e5a874cbf9567dbac490c97959b4b9a",
      "tree": "d46bb85c6e17b3f33238eaee5c0c6f5dd728fb1e",
      "parents": [
        "381d374a7ee91873563930f64ffb5d5e1dc02f8c"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 13 12:44:24 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 13 10:52:39 2026 +0000"
      },
      "message": "tests: Fix wrap_static_fns with newer cargo.\n"
    },
    {
      "commit": "381d374a7ee91873563930f64ffb5d5e1dc02f8c",
      "tree": "98ce853557bd3cb4ea6a358855ee0405d28d64ad",
      "parents": [
        "1738d7c5b0d8a3002b28c7a5480472d49cd3c88d"
      ],
      "author": {
        "name": "Xiangfei Ding",
        "email": "dingxiangfei2009@protonmail.ch",
        "time": "Mon Dec 15 10:39:12 2025 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 13 10:47:40 2026 +0000"
      },
      "message": "Allow macro definitions to pick up precise C types\n\nUpon activating the `--macro-const-use-ctypes` flag, `bindgen` should\ngenerate bindings with precise type resolution to the exact C types.\n\nThis flag implies `--clang-macro-fallback` as its pre-requisite.\n\nSigned-off-by: Xiangfei Ding \u003cdingxiangfei2009@protonmail.ch\u003e\nCo-authored-by: Emilio Cobos Álvarez \u003cemilio@crisal.io\u003e\n"
    },
    {
      "commit": "1738d7c5b0d8a3002b28c7a5480472d49cd3c88d",
      "tree": "e49ad15fc62ba73fbcb9f63d1db228bc9ea90b7d",
      "parents": [
        "3d7ec570ad932708c78a0e66d313bf17b1699854"
      ],
      "author": {
        "name": "Daniel Scherzer",
        "email": "daniel.e.scherzer@gmail.com",
        "time": "Fri Oct 09 13:53:45 2026 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Oct 13 09:57:59 2026 +0000"
      },
      "message": "Clippy: address new Rust 1.99 lint `assert_is_empty`\n"
    },
    {
      "commit": "3d7ec570ad932708c78a0e66d313bf17b1699854",
      "tree": "d10b5bed66947a3339abbd93ca525fbb8a3c34ff",
      "parents": [
        "303e353f48e5fc1b9ab39902af647fdd47ac46ae"
      ],
      "author": {
        "name": "oghenerukevwe Sandra Idjighere",
        "email": "101811979+Sandijigs@users.noreply.github.com",
        "time": "Wed Sep 30 18:34:45 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Oct 05 12:23:03 2026 +0000"
      },
      "message": "Install doctoc from a lockfile\n"
    },
    {
      "commit": "303e353f48e5fc1b9ab39902af647fdd47ac46ae",
      "tree": "9c1e52240987a74f1385dcae0ebf9ccdf25d4c66",
      "parents": [
        "cbf5c0148d00373d3d6db73bc4f7e50260f66800"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Oct 05 14:14:33 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Oct 05 12:21:38 2026 +0000"
      },
      "message": "ci: try to bump Linux version.\n"
    },
    {
      "commit": "cbf5c0148d00373d3d6db73bc4f7e50260f66800",
      "tree": "e52bd09c91fe348ca3d9bdccad4e0ea86393269e",
      "parents": [
        "2829d9a5f48ae377a88ef7438c1e47d0779a4165"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Oct 05 13:51:08 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Oct 05 12:21:38 2026 +0000"
      },
      "message": "ty: Deal with clang\u0027s new CXType_PredefinedSugar.\n\nFixes #3509\n"
    },
    {
      "commit": "2829d9a5f48ae377a88ef7438c1e47d0779a4165",
      "tree": "1f23c2af07645e5895a35bb3dd7e4fb827e59702",
      "parents": [
        "9c6c5043995aab74d282d6a7ce34426ffab6a06d"
      ],
      "author": {
        "name": "Ryan VanderMeulen",
        "email": "rvandermeulen@mozilla.com",
        "time": "Sat Sep 26 10:14:45 2026 -0400"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 27 19:47:42 2026 +0000"
      },
      "message": "Map *-windows-gnullvm targets to *-windows-gnu for clang\n\nClang does not know the gnullvm environment and rejects the triple (\"version \u0027llvm\u0027 in target triple\nis invalid\"), so a build script cross-compiling to a gnullvm target failed as soon as bindgen passed\n--target. The gnullvm targets use the same clang triple as their gnu counterparts.\n"
    },
    {
      "commit": "9c6c5043995aab74d282d6a7ce34426ffab6a06d",
      "tree": "c44db2961f8889c0f291396a7812d4236163644d",
      "parents": [
        "d26242b4eb6ad5f2aa44bde15b64d7e5f8c64d06"
      ],
      "author": {
        "name": "Aleksei Bavshin",
        "email": "alebastr89@gmail.com",
        "time": "Tue Sep 22 23:32:50 2026 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Thu Sep 24 09:10:14 2026 +0000"
      },
      "message": "codegen: Fix union member wrappers with rust-target \u003c 1.83\n\nConstification of the __BindgenUnionField mut accessor in 82911a260\nrequires `const_mut_refs`, stabilized only in 1.83.0.\n\nTo address that, as_mut() is now constified conditional on the target\ncompiler support.\n"
    },
    {
      "commit": "d26242b4eb6ad5f2aa44bde15b64d7e5f8c64d06",
      "tree": "917bd3a1f425b4dfcc43339d0ba6f85c40f788bc",
      "parents": [
        "f8160de2c261b1f73ca12f698322b9cdbe377b71"
      ],
      "author": {
        "name": "Tamir Duberstein",
        "email": "tamird@gmail.com",
        "time": "Mon Sep 14 22:53:00 2026 -0400"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Sep 23 12:58:30 2026 +0000"
      },
      "message": "Fix bitfields spanning nine storage bytes\n\n496817f7c replaced bit-at-a-time access with byte loops that assemble\nthe field in a u64. A valid 64-bit field starting one bit into storage\nspans nine bytes, so get(1, 64) and set(1, 64, value) shift by 64 on the\nlast iteration. The setter also discards the high bit when aligning the\nvalue. The existing full-word regression test covered aligned fields and\nfields ending at bit 64, leaving this crossing case untested.\n\nHandle the ninth byte separately, after shifting the first word on reads\nand before shifting away the high bits on writes. Share the read and\nwrite implementations across runtime, raw-pointer, and const-generic\naccessors instead of maintaining separate usize and u64 algorithms. The\nconst-generic wrappers pass their constants into the inlineable helpers,\nand the getters remain usable in constants.\n\nStore byte-aligned 64-bit fields directly with write_unaligned. Such\nfields use native byte order and need no read-modify-write. This keeps\nAArch64 code generation to a single store instead of vectorizing eight\nbyte extractions into shifts, shuffles, and constant-pool loads.\n\nUse byte pointers without creating references to the whole storage, so\nraw access can leave neighboring bytes uninitialized. Check the field\u0027s\nbounds before accessing storage, including in release builds, to\npreserve the safe accessors\u0027 bounds checking and reject invalid writes\nbefore modifying any bytes.\n\nReplace comparisons between accessors sharing the same algorithm with\nbit-at-a-time expected values. Cover narrow and full-width fields at\nevery intra-byte offset, preservation of neighboring bits, constant\nevaluation, indirect storage, and bounds failures. Enable this coverage\non both endiannesses while retaining the older little-endian-specific\ncases behind their existing condition.\n"
    },
    {
      "commit": "f8160de2c261b1f73ca12f698322b9cdbe377b71",
      "tree": "abcb28a105e9b825da64dd75ea0a8929b7eec148",
      "parents": [
        "c5b24eb34561982db2b0be0c72e23657a8b91b1b"
      ],
      "author": {
        "name": "Cheerful Ottering",
        "email": "160561672+lwz23@users.noreply.github.com",
        "time": "Wed Sep 23 10:19:18 2026 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Sep 23 11:53:24 2026 +0000"
      },
      "message": "codegen: Resolve function typedefs in block pointers\n"
    },
    {
      "commit": "c5b24eb34561982db2b0be0c72e23657a8b91b1b",
      "tree": "83f6f8854e1f96d8ff6438bf3781389bbc02f937",
      "parents": [
        "2374c8f39db7c81ef3aaaaae604f69cf6748f52a"
      ],
      "author": {
        "name": "Cheerful Ottering",
        "email": "160561672+lwz23@users.noreply.github.com",
        "time": "Wed Sep 23 10:19:14 2026 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Sep 23 11:52:34 2026 +0000"
      },
      "message": "codegen: Use _Complex keyword in static function wrappers\n"
    },
    {
      "commit": "2374c8f39db7c81ef3aaaaae604f69cf6748f52a",
      "tree": "574c3c696ec8dd8839d24b72a4998182f7a33662",
      "parents": [
        "d130628608c85276a7186d1a222784741ff14fae"
      ],
      "author": {
        "name": "Daniel Scherzer",
        "email": "daniel.e.scherzer@gmail.com",
        "time": "Tue Sep 08 12:55:47 2026 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Sep 23 11:45:28 2026 +0000"
      },
      "message": "Add support for marking functions as safe\n\nIn the same way that `Builder::allowlist_function()` and the command line\n`--allowlist-function` option permit marking some function as to-be-generated,\nthe new `Builder::safe_function()` method and `--safe-functions` option allow\nmarking functions as safe.\n\nFixes #3443\n"
    },
    {
      "commit": "d130628608c85276a7186d1a222784741ff14fae",
      "tree": "ab87da204c2e5e514da4840c1ee8c04aba3dfad8",
      "parents": [
        "f148583d9a61bd4304437bcd96abd328394770b2"
      ],
      "author": {
        "name": "fly1d",
        "email": "309400591+fly1d@users.noreply.github.com",
        "time": "Mon Sep 07 11:57:31 2026 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Sep 11 10:32:17 2026 +0000"
      },
      "message": "Handle C++23 explicit object member functions\n\nDetect explicit object parameters from the first parameter token because libclang does not expose this distinction directly. Represent those members separately from static methods so their declared object parameter is preserved without injecting an implicit receiver.\n\nMove the regression into the standard header expectation infrastructure with a minimum libclang version marker, covering value and reference receivers while leaving ordinary member functions unchanged.\n\nFixes #3441\n\nDeveloped with assistance from OpenAI Codex.\n"
    },
    {
      "commit": "f148583d9a61bd4304437bcd96abd328394770b2",
      "tree": "b34f28e08e750b845a2a780cbdf2514d75d6a47e",
      "parents": [
        "73c69d681eec90b84ffba4f993b5fb2f19580781"
      ],
      "author": {
        "name": "Julia Hansbrough",
        "email": "flowerhack@google.com",
        "time": "Tue Sep 08 21:52:53 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Thu Sep 10 07:54:59 2026 +0000"
      },
      "message": "Fix tests that fail when run concurrently.\n\nWhen building \u0026 testing bindgen on a multicore machine, I noticed\npersistent failures in `header_issue_753_h` and\n`header_macro_fallback_include_builtin_h`.\n\nUpon investigation, it seems the root cause is:\n\n* Both headers enable `--clang-macro-fallback`.\n* BUT, neither provides a `--clang_macro_fallback_build_dir`.\n* So, scratch files are (by default) written directly into the current\n  directory (see\nhttps://github.com/flowerhack/rust-bindgen/blob/main/bindgen/ir/context.rs#L2089).\n* When these tests simultaneously tried to write to the same file\n  (\"-precompile.h.pch\"), and clobbered each other.\n\nBy creating a temporary directory for `clang_macro_fallback_build_dir`\nwhen `clang-macro-fallback` is passed in, we ensure the tests remain\nisolated by writing that file to different temporary directories.\n\n(I think perhaps this issue hasn\u0027t come up for most users since running\ntests on a machine with *lots* of cores may be somewhat uncommon?  But\nthis should fix it for everyone.)\n"
    },
    {
      "commit": "73c69d681eec90b84ffba4f993b5fb2f19580781",
      "tree": "5b5e9697b1da0fc29bf02e568d557970664f4b2e",
      "parents": [
        "77cbc723acf88854ac2d25f15413def50e029a2b"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Sep 08 11:40:49 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Sep 08 09:52:32 2026 +0000"
      },
      "message": "chore: Release\n"
    },
    {
      "commit": "77cbc723acf88854ac2d25f15413def50e029a2b",
      "tree": "cbc8a3ec85aed2e64d10f7665a5b3bd51b68e0bf",
      "parents": [
        "dc615310095a04739d06aa02b317cbc219ed145c"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Sep 07 14:19:31 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Sep 07 12:59:38 2026 +0000"
      },
      "message": "codegen: Pad bitfields to field offset if applicable.\n\nThis fixes the bitfield cases discussed in #3453.\n"
    },
    {
      "commit": "dc615310095a04739d06aa02b317cbc219ed145c",
      "tree": "41e58e36c5bf70455f9b99a3376574ffcdcb6918",
      "parents": [
        "4348523dc31f872b1e1e363100b211cd30e7e1ae"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Sep 07 13:39:29 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Sep 07 12:35:24 2026 +0000"
      },
      "message": "ty: More struct layout fixes for overaligned integers / aliases.\n\nThis fixes most of the test-cases discussed in #3453.\n\nThe remaining one is related to bitfields and needs a bit more thought\n(I think we currently don\u0027t pad bitfields based on the clang-reported\noffset and maybe should).\n"
    },
    {
      "commit": "4348523dc31f872b1e1e363100b211cd30e7e1ae",
      "tree": "c938bd3e5812de031679b7570eb0399ff7f9e65d",
      "parents": [
        "efb6e0c05fec83cc30fce0f697c1c0f97968df29"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 22:34:55 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Sep 07 10:43:13 2026 +0000"
      },
      "message": "codegen: Revert some bitfield codegen changes and silence unnecessary_transmutes instead.\n\nThis reverts commits a502187aa552e8edcaba07c84fc3744cf36550a2 and\n01d65d946ca11c77b1c2074404412499c16287f6, because it breaks when the\nbitfield is a newtype enum, and adds a test for that.\n\nFixes #3454.\n"
    },
    {
      "commit": "efb6e0c05fec83cc30fce0f697c1c0f97968df29",
      "tree": "bda5115448271b71c5212a672a7b78e3af65fd2f",
      "parents": [
        "18fc3ac91264031fd3d57c071ca654763e79fb11"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 21:14:02 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 20:26:03 2026 +0000"
      },
      "message": "ty: Use underlying layout of typedefs if available.\n\nThis fixes struct layout issues with over-aligned typedefs, which\nrust can\u0027t represent, see #3449 for context and some other discussion.\n\nThis is kinda ugly tho, but as far as I can tell there\u0027s no good way of\ngetting the right ABI and struct layout at the same time...\n"
    },
    {
      "commit": "18fc3ac91264031fd3d57c071ca654763e79fb11",
      "tree": "5626e4655440cfab683b3ff1f170ae6ad3e1886b",
      "parents": [
        "910679f40978ee35518fcde8621650e0224d875e"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 21:04:12 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:16:34 2026 +0000"
      },
      "message": "codegen: Simplify bitfield merging code.\n\nWe don\u0027t really need to manually pad fields now like that, and it\u0027d be\nincorrect for the case where new_field_layout didn\u0027t quite match the\nreal rust layout, like aligned typedefs.\n"
    },
    {
      "commit": "910679f40978ee35518fcde8621650e0224d875e",
      "tree": "171f0d79c2e09901c05d4a12e97921138a776f3d",
      "parents": [
        "38ebc486a780a014bce11e7927aaba0785bb96a5"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 20:36:35 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:14:27 2026 +0000"
      },
      "message": "codegen: Remove hack that is no longer needed now that we have repr(align) everywhere.\n"
    },
    {
      "commit": "38ebc486a780a014bce11e7927aaba0785bb96a5",
      "tree": "ab21422e3f84c9812381271987db1d43937f383d",
      "parents": [
        "64f0939766c792822bd03c6733972e7e1067724e"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:39:08 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:14:27 2026 +0000"
      },
      "message": "codegen: Don\u0027t force padding to be aligned.\n\nSince we know precisely the amount of bytes we need.\n"
    },
    {
      "commit": "64f0939766c792822bd03c6733972e7e1067724e",
      "tree": "9b96cb5f9667b9a2e59fbaae5bde0554df8d7181",
      "parents": [
        "cf8faab758ba737d17ed06051d643c5bbead200e"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:32:33 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:14:27 2026 +0000"
      },
      "message": "codegen: Don\u0027t force padding for over-aligned fields.\n\nIt\u0027s not necessary now that we support repr(align) properly.\n\nThere\u0027s probably some edge cases where we still get the padding wrong\ntho.\n\nFixes #3406.\n"
    },
    {
      "commit": "cf8faab758ba737d17ed06051d643c5bbead200e",
      "tree": "b4d2944df2cb885862b4e1c9e7a5131e2e6449f0",
      "parents": [
        "a7c8b2ca623289849834a7c0e7ce8fd329005ca9"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:48:47 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:14:27 2026 +0000"
      },
      "message": "codegen: Simplify some conditions about repr(align).\n"
    },
    {
      "commit": "a7c8b2ca623289849834a7c0e7ce8fd329005ca9",
      "tree": "541d2020e36c09d415523d6f634aea8025f877ee",
      "parents": [
        "66a1e2aa3a4829c831d618d9ce6861419e097781"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 19:44:58 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Sep 06 17:54:33 2026 +0000"
      },
      "message": "tests: Remove some unnecessary libclang-specific expectations.\n\nThese actually fail in libclang 22 (and pass in 23) but it\u0027s just about\ncomments attached to macros, which aren\u0027t the point of the tests.\n"
    },
    {
      "commit": "66a1e2aa3a4829c831d618d9ce6861419e097781",
      "tree": "889c4e23349bb7a2bbe9f403d8c239c3167205b7",
      "parents": [
        "f531ae3f84b1b08a393402bde8eb41fe42a21691"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 19:09:49 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 17:16:40 2026 +0000"
      },
      "message": "chore: Release\n"
    },
    {
      "commit": "f531ae3f84b1b08a393402bde8eb41fe42a21691",
      "tree": "a99c118158cb1fe43c08ef7e72b2e6f0b93ab549",
      "parents": [
        "d73cb7aef4eee895430ce891bf834dcc880ff6a1"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 18:40:14 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 17:16:40 2026 +0000"
      },
      "message": "build(deps): Widen range for syn.\n\nWe don\u0027t depend on any of the breaking changes and this allows avoiding\nduplicated dependencies.\n"
    },
    {
      "commit": "d73cb7aef4eee895430ce891bf834dcc880ff6a1",
      "tree": "e3bcf01cba1550ef37383ab720e21651e60223f1",
      "parents": [
        "6d276db6e017194ae0bae024888c6d93d1b7d459"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Sat Sep 05 15:53:58 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 16:53:44 2026 +0000"
      },
      "message": "build(deps): update rust crates\n\n```console\n$ cargo update --config \u0027resolver.incompatible-rust-versions\u003d\"fallback\"\u0027\n```\n"
    },
    {
      "commit": "6d276db6e017194ae0bae024888c6d93d1b7d459",
      "tree": "6d9ac421e8538e969f0980a4b192c3fd8db7a809",
      "parents": [
        "8afb6a2f247adfabf037e438aa5b4006ef3b6075"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 16:19:44 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 15:00:45 2026 +0000"
      },
      "message": "chore: Release\n"
    },
    {
      "commit": "8afb6a2f247adfabf037e438aa5b4006ef3b6075",
      "tree": "e24dd516beb1359fe63778bc779e383d142d29e2",
      "parents": [
        "e12371fe14bd74bd4394e271aa69c6e0e055991d"
      ],
      "author": {
        "name": "Jules Bertholet",
        "email": "julesbertholet@quoi.xyz",
        "time": "Sun Aug 16 18:33:20 2026 -0400"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:48:55 2026 +0000"
      },
      "message": "Don\u0027t derive or implement traits for aliases to `c_void`\n"
    },
    {
      "commit": "e12371fe14bd74bd4394e271aa69c6e0e055991d",
      "tree": "4d89dfef172c1bed58d32f8f8d9d56f270ce43b4",
      "parents": [
        "a213781273061f828917ce017b08416d6ee87670"
      ],
      "author": {
        "name": "Jonas Platte",
        "email": "jplatte+git@posteo.de",
        "time": "Tue Jul 28 21:44:42 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:29:07 2026 +0000"
      },
      "message": "Remove needless by_ref calls\n"
    },
    {
      "commit": "a213781273061f828917ce017b08416d6ee87670",
      "tree": "20f41b42b245594a5ce40c008cdad0f8d4f6accb",
      "parents": [
        "7a6db4b604820c1e87332e4d610f7352d2609b42"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Sat Aug 01 01:02:33 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:27:30 2026 +0000"
      },
      "message": "chore(cargo): remove deprecated package authors field\n"
    },
    {
      "commit": "7a6db4b604820c1e87332e4d610f7352d2609b42",
      "tree": "489a6aa1b72e58620026c671fe77a64d60092a32",
      "parents": [
        "5bceb096d48fd694d15e1ed6de9a757d1192f017"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Sun Aug 09 17:38:16 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:27:03 2026 +0000"
      },
      "message": "build(deps): update rust crates\n"
    },
    {
      "commit": "5bceb096d48fd694d15e1ed6de9a757d1192f017",
      "tree": "46167762f774c181510b87ddfc3c2e0a70a2abd8",
      "parents": [
        "ab7df343b974021667659856a03fb63bf59e0ef5"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Sun Aug 09 21:27:55 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:26:37 2026 +0000"
      },
      "message": "build(deps): bump bitflags from 2.9.1 to 2.13.1\n"
    },
    {
      "commit": "ab7df343b974021667659856a03fb63bf59e0ef5",
      "tree": "c10543cd3df0629ccc24e4f8d9f0385283030faa",
      "parents": [
        "d0805899d1a1922717c312b841b47e8e9be41e1b"
      ],
      "author": {
        "name": "Julia Hansbrough",
        "email": "flowerhack@google.com",
        "time": "Wed Aug 12 21:27:01 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:25:29 2026 +0000"
      },
      "message": "Do not insert dummy fields into bitfields in cases where this would\ncause misalignment.\n\nSuppose you have the following C++ code:\n\n```\n// reproduce.h\nstruct __attribute__((aligned(8))) StructWithBitfieldAndDouble {\n  unsigned int bitfield: 32;\n  double standard_field;\n};\n\n// reproduce.cpp\n #include \"reproduce.h\"\n #include \u003ciostream\u003e\nint main() {\n  std::cout \u003c\u003c \"cpp_size\u003d\" \u003c\u003c sizeof(SomeStruct) \u003c\u003c std::endl;\n  std::cout \u003c\u003c \"cpp_align\u003d\" \u003c\u003c alignof(SomeStruct) \u003c\u003c std::endl;\n  return 0;\n}\n```\n\nAs of right now, Bindgen will produce the following Rust code:\n\n```\n #[repr(C)]\n #[repr(align(8))]\n #[derive(Debug, Default, Copy, Clone)]\npub struct StructWithBitfieldAndDouble {\n  pub _bindgen_align: [u64; 0],\n  pub _bitfield_1: __BindgenBitfieldUnit\u003c[u8, 4usize]\u003e,\n  pub standard_field: f64,\n}\n```\n\nIf Bindgen compiles this targeting a 32-bit architecture, the C++ struct\nwill be 16 bytes in size (as one would expect, based on the `aligned(8)`),\nbut the Rust struct will be only 12 bytes in size (because the alignment\nof u64 is 4, so _bindgen_align, as a zero-length struct, ends up\noccupying 0 bytes of space, and the struct\u0027s overall size will thus be\n12).\n\nThis occurs because of the way dummy fields are added to bitfields as\nper https://github.com/rust-lang/rust-bindgen/pull/3247.\n\nWe should check that the target primitive\u0027s alignment is\ngreater-than-or-equal-to the explicitly-defined alignment in these\ncases, and fall back to simply using the explicit alignment in those\ncases.\n"
    },
    {
      "commit": "d0805899d1a1922717c312b841b47e8e9be41e1b",
      "tree": "f225b7a44d7c1aabe8339fb11d45d1c137dd6c5d",
      "parents": [
        "0dde4912611e17d30c79ab762ae0f9d5393c67cb"
      ],
      "author": {
        "name": "Dimitris Papaioannou",
        "email": "dimtpap@protonmail.com",
        "time": "Thu Aug 27 21:54:18 2026 +0300"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Sep 05 14:24:12 2026 +0000"
      },
      "message": "Pass system header paths to fallback parser\n\nIf a macro needed to be parsed using the fallback parser but the macro\nused items included in a builtin header, the parsing would fail since\nthe location of the header would be unknown.\n"
    },
    {
      "commit": "0dde4912611e17d30c79ab762ae0f9d5393c67cb",
      "tree": "9ce5d14fc455d33d99dd8f01e75878ffc8e5614f",
      "parents": [
        "ddf66f4ad081fc9d2dafd8251cd701a286d6dcaf"
      ],
      "author": {
        "name": "Anuraag Agrawal",
        "email": "anuraaga@gmail.com",
        "time": "Thu Sep 03 14:25:05 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Thu Sep 03 10:42:49 2026 +0000"
      },
      "message": "Update changelog for next release\n"
    },
    {
      "commit": "ddf66f4ad081fc9d2dafd8251cd701a286d6dcaf",
      "tree": "e59a001c27de5a98328492d3c4f5fac75063a0e9",
      "parents": [
        "6bbde80a916cd0591f452b1a061ed8f12281f277"
      ],
      "author": {
        "name": "Julia Hansbrough",
        "email": "flowerhack@google.com",
        "time": "Tue Aug 11 22:47:56 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Sep 02 21:10:36 2026 +0000"
      },
      "message": "Regenerate test expectations for libclang 23.0.0.\n\nWhen using bindgen with the newest clang version, `bindgen-tests` currently fail.\n\nI believe these are linked to a couple changes in Clang, e.g.\n*  https://github.com/llvm/llvm-project/pull/198452, which changes how\n   doc comments are extracted\n* https://github.com/llvm/llvm-project/pull/147835, which changes how\n  dependent types names are parsed, and thus e.g. what *was* a\n  BindgenOpaqueArray is now omitted (because bindgen can more easily parse\n  the new format)\n\nThis commit regenerates test expectations so they pass with the newer\nclang.\n\n(We observed this in Chromium because Chromium rolls Clang roughtly\nevery 1-2 weeks; this corresponds with 23.0.0.)\n"
    },
    {
      "commit": "6bbde80a916cd0591f452b1a061ed8f12281f277",
      "tree": "542a3cbdda71b7f5275ee0718f21a115d572ed85",
      "parents": [
        "80d5bd01173b30dcb3141839b37b04d5297c534d"
      ],
      "author": {
        "name": "Jonathan Schwender",
        "email": "schwenderjonathan@gmail.com",
        "time": "Wed Feb 25 04:37:13 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Aug 21 16:03:17 2026 +0000"
      },
      "message": "update implementation\n"
    },
    {
      "commit": "80d5bd01173b30dcb3141839b37b04d5297c534d",
      "tree": "8f49fad13fa3981d8a5733bd27119e7d66e1faae",
      "parents": [
        "995b2b3eea3d238182b3c1552b39b0f46fb25664"
      ],
      "author": {
        "name": "Jonathan Schwender",
        "email": "schwenderjonathan@gmail.com",
        "time": "Wed Feb 25 04:10:07 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Aug 21 16:03:17 2026 +0000"
      },
      "message": "revert impl change\n"
    },
    {
      "commit": "995b2b3eea3d238182b3c1552b39b0f46fb25664",
      "tree": "05cfbd5cc1c02dcca4b557a2694d7ea15b9cf93a",
      "parents": [
        "01a19dce32258e8e5f16b486e23abf3d0938d1b0"
      ],
      "author": {
        "name": "Jonathan Schwender",
        "email": "schwenderjonathan@gmail.com",
        "time": "Sat Feb 08 13:16:09 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Aug 21 16:03:17 2026 +0000"
      },
      "message": "Generate doc comment when type alias is hidden\n\nIf a type is not documented, but a type alias with\nthe same canonical path is, then generate the\ndocumentation of the typealias onto the type,\nsince otherwise it would be lost.\n"
    },
    {
      "commit": "01a19dce32258e8e5f16b486e23abf3d0938d1b0",
      "tree": "56e1da16346a3f1b6f01ca0409ba2acc3faa5403",
      "parents": [
        "1a081175fa6058eb48ce05a3e01a0f2d80ec6b37"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Sun Aug 09 15:52:45 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 15:12:14 2026 +0000"
      },
      "message": "fix deprecated lint names\n"
    },
    {
      "commit": "1a081175fa6058eb48ce05a3e01a0f2d80ec6b37",
      "tree": "f51ce02285ffe5fa12e652bc5205459fa49de9c5",
      "parents": [
        "38da5390c1a5a305bec0e77e6dc7a2a5cce1e8e2"
      ],
      "author": {
        "name": "dhmztr",
        "email": "koniecznyrad@gmail.com",
        "time": "Tue Jul 28 23:09:37 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:33:03 2026 +0000"
      },
      "message": "fix: generate a Debug impl for NewType/NewTypeDeref alias wrappers when the inner type only has a manual impl\n\n`AliasVariation::NewType`/`NewTypeDeref` newtype wrapper structs only\never got a `#[derive(...)]` attribute list built from\n`derives_of_item`. If the wrapped type itself doesn\u0027t derive `Debug`\n(e.g. a union, which always gets a hand-written `impl Debug` via\n`--impl-debug` since unions can\u0027t derive it), the wrapper ended up\nwith no `Debug` impl at all - neither derived nor manual.\n\nAny struct containing such a wrapper still generates a manual\n`Debug` impl that formats the field with `{:?}`, which then fails to\ncompile with `` `Foo` doesn\u0027t implement `Debug` ``, since the\nnewtype\u0027s own `Debug` is missing entirely.\n\nThis mirrors the same \"does this derive, and if not, do we need a\nmanual impl\" logic that `CompInfo::codegen` already applies to\nregular structs/unions, applied to the newtype wrapper case.\n\nFixes #3268\n"
    },
    {
      "commit": "38da5390c1a5a305bec0e77e6dc7a2a5cce1e8e2",
      "tree": "86d4d56c831a4153cefa669fbfbf93641d9e85d3",
      "parents": [
        "9732dcad1d0a8153eb54b175c64d9716407b0284"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Sat Aug 01 01:12:12 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:30:20 2026 +0000"
      },
      "message": "ci: bump cargo-dist to 0.32.0\n"
    },
    {
      "commit": "9732dcad1d0a8153eb54b175c64d9716407b0284",
      "tree": "87d8ee6e2dca899ff2cac3844ff7d9140743a648",
      "parents": [
        "4ffa53d642c377047b98e239f84f6d40ba5141d4"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Fri Jul 31 19:31:27 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:29:49 2026 +0000"
      },
      "message": "chore: fix rustfmt TOML\n\n```log\n  Error: The value must be one of [\"Front\", \"Back\"], but found \"back\"\n    at ./rustfmt.toml:2:19\n```\n"
    },
    {
      "commit": "4ffa53d642c377047b98e239f84f6d40ba5141d4",
      "tree": "0b78bafbea297588cbe49087707b408a26f807fe",
      "parents": [
        "7918a39b446a0af4ae999fb6ba125a2c65e80502"
      ],
      "author": {
        "name": "AudaciousAxiom",
        "email": "179637270+AudaciousAxiom@users.noreply.github.com",
        "time": "Sun Jul 26 16:33:44 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:28:58 2026 +0000"
      },
      "message": "chore(bindgen): bump `syn` to v3\n"
    },
    {
      "commit": "7918a39b446a0af4ae999fb6ba125a2c65e80502",
      "tree": "c3a020ff8ec5ebceb50961bd7e859b4275b2bb61",
      "parents": [
        "dd7f8fcca2e58d81832c4117bbb06be3e25c68da"
      ],
      "author": {
        "name": "AudaciousAxiom",
        "email": "179637270+AudaciousAxiom@users.noreply.github.com",
        "time": "Sun Jul 26 16:34:48 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:28:58 2026 +0000"
      },
      "message": "chore(workspace): bump the MSRV to 1.71\n"
    },
    {
      "commit": "dd7f8fcca2e58d81832c4117bbb06be3e25c68da",
      "tree": "028320b3ed6681ab631d19b1ca7881a9f7494a8d",
      "parents": [
        "be5112c273a3f42c4fb4b4aada9ddca7e69e28ae"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Tue Jul 28 22:53:14 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:28:13 2026 +0000"
      },
      "message": "build(deps): bump cc from 1.2.63 to 1.4.0\n"
    },
    {
      "commit": "be5112c273a3f42c4fb4b4aada9ddca7e69e28ae",
      "tree": "aa050b4146a28a3d99aad249d646332736169727",
      "parents": [
        "25b23474496e78f6a1fbf1c02cb66f11e4d176d0"
      ],
      "author": {
        "name": "xtqqczze",
        "email": "45661989+xtqqczze@users.noreply.github.com",
        "time": "Tue Jul 28 22:51:37 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun Aug 09 14:27:29 2026 +0000"
      },
      "message": "build(deps): bump rand from 0.8.5 to 0.8.7\n"
    },
    {
      "commit": "25b23474496e78f6a1fbf1c02cb66f11e4d176d0",
      "tree": "35cbd5082c9cc35713f4a25c712733aead0062b1",
      "parents": [
        "848b2758c3236e2baeca69d56b7d78a3f16af799"
      ],
      "author": {
        "name": "AudaciousAxiom",
        "email": "179637270+AudaciousAxiom@users.noreply.github.com",
        "time": "Tue Jul 28 10:46:25 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 28 13:15:04 2026 +0000"
      },
      "message": "chore(bindgen): remove the dependency on `itertools`\n"
    },
    {
      "commit": "848b2758c3236e2baeca69d56b7d78a3f16af799",
      "tree": "3d778d35b907650699d65f33a8e53cfde0276f8f",
      "parents": [
        "9d26c6eddeff9192ddedb563192abe3128fc5aae"
      ],
      "author": {
        "name": "AudaciousAxiom",
        "email": "179637270+AudaciousAxiom@users.noreply.github.com",
        "time": "Tue Jul 28 10:15:12 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 28 13:15:04 2026 +0000"
      },
      "message": "refactor(bindgen): remove the need for `itertools`\n"
    },
    {
      "commit": "9d26c6eddeff9192ddedb563192abe3128fc5aae",
      "tree": "b1012e68239eec6f9640fe56a15ef7708742cafb",
      "parents": [
        "d0f91f1bc8b28844e8cea689ce723eabf37a9be8"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Jul 24 14:23:01 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Jul 24 12:54:48 2026 +0000"
      },
      "message": "ci: Test LLVM 20, retire LLVM 9\n"
    },
    {
      "commit": "d0f91f1bc8b28844e8cea689ce723eabf37a9be8",
      "tree": "fe3f4c1f47b4b3410fec68edb0118508b7537516",
      "parents": [
        "93726885850c20847ac445664bc7bb2b827d9642"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Jul 24 14:19:05 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Jul 24 12:25:09 2026 +0000"
      },
      "message": "misc: Appease clippy.\n"
    },
    {
      "commit": "93726885850c20847ac445664bc7bb2b827d9642",
      "tree": "d8a09e61fefa86b791f3683ca99a71e2159565ae",
      "parents": [
        "8028f22f43c13996f406eaba70d43ab8f93eaf4f"
      ],
      "author": {
        "name": "Armoha",
        "email": "kein0011@naver.com",
        "time": "Tue Jul 07 13:08:50 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 07 09:47:01 2026 +0000"
      },
      "message": "Return NoHeadersProvided error when no input headers are provided\n"
    },
    {
      "commit": "8028f22f43c13996f406eaba70d43ab8f93eaf4f",
      "tree": "f03ab9eca86fd43b7ac993dd5b1bc20866b50874",
      "parents": [
        "100717c3fb7360f6093e601098e582ca342df6b0"
      ],
      "author": {
        "name": "Alejandro Núñez",
        "email": "alejnp@rti.com",
        "time": "Fri May 01 08:04:23 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 07 09:41:25 2026 +0000"
      },
      "message": "fix #3367: Consolidate extern fn block for fn and static symbols\n"
    },
    {
      "commit": "100717c3fb7360f6093e601098e582ca342df6b0",
      "tree": "a45705b3babf1837a8a49cfce6223b88ce12a322",
      "parents": [
        "a0a303743d8fb5fa3bc13d1ebead4eb4436df3bd"
      ],
      "author": {
        "name": "Armoha",
        "email": "kein0011@naver.com",
        "time": "Tue Jul 07 11:07:12 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 07 09:38:55 2026 +0000"
      },
      "message": "Restrict newtype constant wrapping to actual type aliases\n\nFixes #3303\n"
    },
    {
      "commit": "a0a303743d8fb5fa3bc13d1ebead4eb4436df3bd",
      "tree": "02bb1b23d33398dc948e327c411fa981b2b25aad",
      "parents": [
        "8f5206363e74385e254d887e90c113a54c5cabce"
      ],
      "author": {
        "name": "Armoha",
        "email": "kein0011@naver.com",
        "time": "Tue Jul 07 10:51:30 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 07 09:38:55 2026 +0000"
      },
      "message": "Add test case for issue #3303\n"
    },
    {
      "commit": "8f5206363e74385e254d887e90c113a54c5cabce",
      "tree": "d0def2ac0223cfa6d1e3565720ae4a557b2643dc",
      "parents": [
        "4609f3fdd5d4c66ea67a6103a7850989c612273e"
      ],
      "author": {
        "name": "Mike Hommey",
        "email": "mh@glandium.org",
        "time": "Fri Jul 03 16:34:38 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Jul 07 09:37:38 2026 +0000"
      },
      "message": "Avoid IR cycle for compiler-builtin ObjC typedefs shadowing themselves\n\nObjective-C\u0027s id/SEL/Class are compiler builtins, but SDK headers also\nredeclare them via a same-named typedef.\n\nUnder clang 22, asking such a typedef for its underlying type reports\nback the same declaration instead of desugaring to the written-out type.\nTreating that as an ordinary Alias creates a cycle once resolve_typerefs\nresolves the deferred reference, and nothing that computes canonical\ntypes checks for cycles, so it recurses forever - a stack overflow, or\nan infinite loop if the recursion gets tail-call-optimized.\n\nDetect the same-USR case in CXType_Typedef handling and resolve directly\nas the inner kind instead of aliasing to it, so the cycle is never\nconstructed.\n\nAdds a self-contained regression test (the typedef lives in an auxiliary\nheader included via -isystem, so it doesn\u0027t need a real macOS SDK) that\nsegfaults on main and passes with this fix.\n\nFixes #3386\n"
    },
    {
      "commit": "4609f3fdd5d4c66ea67a6103a7850989c612273e",
      "tree": "69dc2dc02b300ad76c4361cf28bdbaa935ba56c5",
      "parents": [
        "7acba9a69f4bf5a25ac2af55dba3b5595afc21e7"
      ],
      "author": {
        "name": "Ronen Ulanovsky",
        "email": "ronen.ulanovsky@nanit.com",
        "time": "Sat Jun 06 14:49:51 2026 +0300"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Jul 06 16:21:22 2026 +0000"
      },
      "message": "fix: propagate implicit target to macro fallback\n"
    },
    {
      "commit": "7acba9a69f4bf5a25ac2af55dba3b5595afc21e7",
      "tree": "dfa6ad578fa9632de474b3a7ba5912245a8b7dcc",
      "parents": [
        "01d65d946ca11c77b1c2074404412499c16287f6"
      ],
      "author": {
        "name": "Armoha",
        "email": "kein0011@naver.com",
        "time": "Tue Jul 07 00:50:10 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Jul 06 16:20:36 2026 +0000"
      },
      "message": "Update tests\n"
    },
    {
      "commit": "01d65d946ca11c77b1c2074404412499c16287f6",
      "tree": "905a16ff5965c83255cce8021e928e5d6725478f",
      "parents": [
        "9098393b8da1f53c6d353de7f5903180b3a1f8bb"
      ],
      "author": {
        "name": "Armoha",
        "email": "kein0011@naver.com",
        "time": "Tue Jul 07 00:49:45 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Jul 06 16:20:36 2026 +0000"
      },
      "message": "Fix unnecessary transmute and unsafe warnings on bitfield codegen\n"
    },
    {
      "commit": "9098393b8da1f53c6d353de7f5903180b3a1f8bb",
      "tree": "b9867485eaa2b6690797a839b08782cd6907c243",
      "parents": [
        "2048231f45c87cd65d7891f55090aac81cc0d66b"
      ],
      "author": {
        "name": "Armoha",
        "email": "kein0011@naver.com",
        "time": "Mon Jul 06 16:23:35 2026 +0900"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Jul 06 12:39:35 2026 +0000"
      },
      "message": "ci: pin libtinfo5 to a permanent archive URL\n\nUse old-releases.ubuntu.com to install libtinfo5 instead of live pool mirror, to avoid breakage when jammy hits EOL or the version of libtinfo5 that CI depends disappears from the live mirror.\n"
    },
    {
      "commit": "2048231f45c87cd65d7891f55090aac81cc0d66b",
      "tree": "4fb41697639d1125eebfa184195c3dc02373f91e",
      "parents": [
        "3addc3bdd4d021eaf77da83caa22d0dc1d81b2e0"
      ],
      "author": {
        "name": "Paolo Barbolini",
        "email": "paolo.barbolini@m4ss.net",
        "time": "Wed Jun 03 15:11:25 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Jun 03 15:19:21 2026 +0000"
      },
      "message": "Bump cc to the latest version\n"
    },
    {
      "commit": "3addc3bdd4d021eaf77da83caa22d0dc1d81b2e0",
      "tree": "2c81cb8046c969d187753cd609393637ce1fea3c",
      "parents": [
        "c8c9a5a4ed7a01651cf781df1dede059dbf2401e"
      ],
      "author": {
        "name": "Paolo Barbolini",
        "email": "paolo.barbolini@m4ss.net",
        "time": "Tue Jun 02 22:25:37 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Jun 03 15:19:21 2026 +0000"
      },
      "message": "Upgrade shlex to version 2\n\nThe cc crate already upgraded to shlex 2.x. Bumping our dependency avoids\nhaving both shlex 1.x and 2.x in the lock file.\n\nThis also pulls in the soundness fix in comex/rust-shlex#26, which\nthis project was not affected by.\n"
    },
    {
      "commit": "c8c9a5a4ed7a01651cf781df1dede059dbf2401e",
      "tree": "10bb5e8347c8be706e848a0309586a906ae17d90",
      "parents": [
        "6b865b83fbffc3de497592fc7fe730056f95ac98"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@chromium.org",
        "time": "Tue May 12 20:01:41 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sun May 24 11:29:22 2026 +0000"
      },
      "message": "Update `tempfile` dependency to `3.27.0` or later.\n\nWorks around https://github.com/bytecodealliance/rustix/issues/1620\nFixes https://crbug.com/510018493 (see #comment20)\n"
    },
    {
      "commit": "6b865b83fbffc3de497592fc7fe730056f95ac98",
      "tree": "3ac810354ebb484205a06f685de24b800ac1310b",
      "parents": [
        "5b1b56dd69fcc0ed16ceb7f1fac3ce907c430d6b"
      ],
      "author": {
        "name": "Erick Tryzelaar",
        "email": "etryzelaar@google.com",
        "time": "Mon May 18 17:56:28 2026 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon May 18 18:50:31 2026 +0000"
      },
      "message": "Add `libcpp` feature\n\nThis adds a `libcpp` feature, which in turn enables `libcpp` from\nthe `clang-sys` crate. This allows bindgen to use `libc++` from LLVM\ninstead of the system c++ standard library.\n"
    },
    {
      "commit": "5b1b56dd69fcc0ed16ceb7f1fac3ce907c430d6b",
      "tree": "5068bdafe8a2bba748d98c0d946999251d99a127",
      "parents": [
        "0c5b8d3449c6e08a31e361d47e57e61e6fb410be"
      ],
      "author": {
        "name": "David Hotham",
        "email": "david.hotham@blueyonder.co.uk",
        "time": "Sat May 16 18:31:14 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat May 16 18:39:09 2026 +0000"
      },
      "message": "Tighten upper-bound debug_assert in bitfield_unit accessors\n\nThe upper-bound check in get/set/raw_get/raw_set and their const-generic\nsiblings used floor division: `(bit_offset + bit_width) / 8 \u003c\u003d len`.\nThe byte-loop touches indices up to\n`start_byte + bytes_needed - 1 \u003d ceil((bit_offset + bit_width) / 8) - 1`,\nso the correct check is `(bit_offset + bit_width + 7) / 8 \u003c\u003d len`.\n\nCodegen never produces values that would fail the tighter assert, so\nthis is a hardening of the safety check rather than a runtime fix.\nRegenerate the matching expectations.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "0c5b8d3449c6e08a31e361d47e57e61e6fb410be",
      "tree": "5cfd61cd697368693b5286dc29a5ba9deaaec74e",
      "parents": [
        "b6ddc455fbe5708445f0334df4fbfcc66b13c33c"
      ],
      "author": {
        "name": "David Hotham",
        "email": "david.hotham@blueyonder.co.uk",
        "time": "Sat May 16 18:07:27 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat May 16 18:39:09 2026 +0000"
      },
      "message": "Fix shift-overflow in const-generic bitfield accessors\n\nWhen BIT_WIDTH equals the native word size (e.g. a 64-bit field on a\n64-bit target), `(1usize \u003c\u003c BIT_WIDTH) - 1` shifted by the full width\nof usize, panicking in debug builds and producing a wrong mask in\nrelease. Affected `get_const`, `set_const`, `raw_get_const` and\n`raw_set_const`.\n\nGuard the value mask with `BIT_WIDTH \u003c usize::BITS` and compute\nthe runtime `set`. Add a regression test exercising width \u003d 64.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "b6ddc455fbe5708445f0334df4fbfcc66b13c33c",
      "tree": "138e2eaab16a6e5e4635af7b84022b72d761e2d0",
      "parents": [
        "937b8d0b10e5cfd2b16c26ec4ebe03baa4aab9f3"
      ],
      "author": {
        "name": "David Hotham",
        "email": "david.hotham@blueyonder.co.uk",
        "time": "Sat May 16 18:18:35 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat May 16 18:39:09 2026 +0000"
      },
      "message": "Fix clippy::collapsible_match in ObjC interface parsing\n\n`cargo clippy -- -D warnings` was failing on stable with a\ncollapsible_match lint in ObjCInterface::from_ty: a nested `if` inside\na `CXCursor_ObjCClassRef` match arm should be expressed as a match\nguard. Collapse it as suggested. No behaviour change.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "937b8d0b10e5cfd2b16c26ec4ebe03baa4aab9f3",
      "tree": "0281c7354d128c5fc0f237e07173ab9d583eb6c9",
      "parents": [
        "d2a40334a332cbf654eb7a45ac547d0a92029647"
      ],
      "author": {
        "name": "Dan Robertson",
        "email": "",
        "time": "Fri Mar 06 23:15:39 2026 -0500"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon May 04 11:41:43 2026 +0000"
      },
      "message": "Allow zero sized unions to be defined\n\nA union may be defined in C that contains only zero sized types. We\nshould in turn generate a rust union in this case.\n"
    },
    {
      "commit": "d2a40334a332cbf654eb7a45ac547d0a92029647",
      "tree": "aef8a4fa352109d6cdf90f0eb3f4f28d6e80920a",
      "parents": [
        "092d90e2bf48be2df30d797e9fde8e32b184db34"
      ],
      "author": {
        "name": "Danny Wolf",
        "email": "wolfd@users.noreply.github.com",
        "time": "Fri Apr 03 11:47:39 2026 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon May 04 11:12:53 2026 +0000"
      },
      "message": "Allow for renaming struct/union fields\n\nI\u0027ve added a `ParseCallbacks` method called `field_name` which is given\nthe same `FieldInfo` struct that `field_visibility` takes.\n\nI wasn\u0027t entirely sure where to change field names, I ended up doing it\nin what was `deanonymize_fields` which has been renamed to\n`assign_field_names` as suggested by [this\ncomment](https://github.com/rust-lang/rust-bindgen/pull/1058#discussion_r142717644)\n\nRelated to https://github.com/rust-lang/rust-bindgen/issues/1097 and https://github.com/rust-lang/rust-bindgen/issues/1098\n"
    },
    {
      "commit": "092d90e2bf48be2df30d797e9fde8e32b184db34",
      "tree": "236a85bd63a32c9a2eca43e9c3ebf5f836d22a0b",
      "parents": [
        "b7b501feb2642b6ac3796f8c5f2a1461640a2a67"
      ],
      "author": {
        "name": "Miguel Ojeda",
        "email": "ojeda@kernel.org",
        "time": "Sun Apr 26 17:37:11 2026 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon May 04 11:09:31 2026 +0000"
      },
      "message": "ci: Move forward Rust for Linux version to v7.1-rc1\n\nLinux v7.1 will have our new MSRVs: Rust 1.85.0 and `bindgen` 0.71.1.\n\nSigned-off-by: Miguel Ojeda \u003cojeda@kernel.org\u003e\n"
    },
    {
      "commit": "b7b501feb2642b6ac3796f8c5f2a1461640a2a67",
      "tree": "832c5577075e2545be760fb067ef8923bed8050c",
      "parents": [
        "5ae4b31e9aecc9fe583e752e2d4b4e68dc057ebd"
      ],
      "author": {
        "name": "Dan Robertson",
        "email": "dan@dlrobertson.com",
        "time": "Tue Feb 24 09:43:23 2026 -0500"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Feb 24 15:48:01 2026 +0000"
      },
      "message": "Do not use the canonical declaration for enum type building\n\nAllow forward declarations to be used by avoiding the use of the\ncanonical declaration when building the underlying representation.\n"
    },
    {
      "commit": "5ae4b31e9aecc9fe583e752e2d4b4e68dc057ebd",
      "tree": "c1feb529b22d89ad703f5d78d67b1754685c63af",
      "parents": [
        "a502187aa552e8edcaba07c84fc3744cf36550a2"
      ],
      "author": {
        "name": "bendn",
        "email": "bend.n@outlook.com",
        "time": "Mon Dec 22 04:05:31 2025 +0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 10:02:58 2026 +0000"
      },
      "message": "tests\n"
    },
    {
      "commit": "a502187aa552e8edcaba07c84fc3744cf36550a2",
      "tree": "e4a94a73240173b5a43be629ada9532662739119",
      "parents": [
        "04083330e4c05670ab175e9d05b4e375b3d47b5f"
      ],
      "author": {
        "name": "bendn",
        "email": "bend.n@outlook.com",
        "time": "Mon Dec 22 03:30:25 2025 +0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 10:02:58 2026 +0000"
      },
      "message": "fix unnecessary transmute triggering on bitfield codegen\n"
    },
    {
      "commit": "04083330e4c05670ab175e9d05b4e375b3d47b5f",
      "tree": "43ad3cb4dd732be23a45d60ae1397a913e1a08e2",
      "parents": [
        "44f451df4d63abeecb527bd6122ff36dfe5b29e7"
      ],
      "author": {
        "name": "naoNao89",
        "email": "90588855+naoNao89@users.noreply.github.com",
        "time": "Tue Dec 16 04:37:38 2025 +0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 10:02:47 2026 +0000"
      },
      "message": "refactor: centralize comment generation checks (fixes #445)\n\n- Add doc_comment() method to FieldData that checks generate_comments flag\n- Add doc_comment() method to EnumVariant that checks generate_comments flag\n- Remove redundant generate_comments checks from field codegen\n- Remove redundant generate_comments checks from enum variant codegen\n\nThis makes the code more idiomatic by having types that generate comments\nhandle the flag check themselves, eliminating duplication and centralizing\nthe decision logic.\n"
    },
    {
      "commit": "44f451df4d63abeecb527bd6122ff36dfe5b29e7",
      "tree": "5197a350effb958edd05e3a61c65665bfdd790e8",
      "parents": [
        "c2c1151c5d61c3532c8dc2f3d02fe4e592147b28"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 10:51:01 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 09:56:31 2026 +0000"
      },
      "message": "ci: Bump RFL kernel\n"
    },
    {
      "commit": "c2c1151c5d61c3532c8dc2f3d02fe4e592147b28",
      "tree": "bd8cf5e73ed977212e2666b5549e46acb026ae95",
      "parents": [
        "0d0a33b77d1382d554edb85006d5ff33857f3fba"
      ],
      "author": {
        "name": "Per Larsen",
        "email": "perlarsen@google.com",
        "time": "Wed Jan 14 15:03:13 2026 -0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 09:56:31 2026 +0000"
      },
      "message": "ci: isolate DYLD_LIBRARY_PATH during git diff checks\n"
    },
    {
      "commit": "0d0a33b77d1382d554edb85006d5ff33857f3fba",
      "tree": "c90414c941eded6219b60b84a4ca2ad3783b8d2a",
      "parents": [
        "74a5f30c14769891e12de53ba275233ef2616819"
      ],
      "author": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 10:27:26 2026 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Sat Feb 21 09:56:31 2026 +0000"
      },
      "message": "features: Add some comments to appease clippy.\n"
    },
    {
      "commit": "74a5f30c14769891e12de53ba275233ef2616819",
      "tree": "46ca893b660d63b1af4cfc2f2dc957408df39134",
      "parents": [
        "82911a260820fa60486c4ca715ff226047f02227"
      ],
      "author": {
        "name": "luohewuyang",
        "email": "luohewuyang@outlook.com",
        "time": "Mon Dec 22 11:26:03 2025 +0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Dec 31 12:55:56 2025 +0000"
      },
      "message": "chore: fix some typos in comments\n\nSigned-off-by: luohewuyang \u003cluohewuyang@outlook.com\u003e\n"
    },
    {
      "commit": "82911a260820fa60486c4ca715ff226047f02227",
      "tree": "310e300e6427bfbe0572a17ecb89d403ca133994",
      "parents": [
        "23e2b0124d37105125d605df6a69b9c56b49b062"
      ],
      "author": {
        "name": "mematthias",
        "email": "107192630+mematthias@users.noreply.github.com",
        "time": "Mon Dec 29 11:10:36 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Wed Dec 31 12:55:30 2025 +0000"
      },
      "message": "Emit const __BindgenUnionField accessors and comply with Rust 2024 unsafe-op-in-unsafe-fn\n"
    },
    {
      "commit": "23e2b0124d37105125d605df6a69b9c56b49b062",
      "tree": "18a45eeb85ed3695e0ed2ad34455573b66993850",
      "parents": [
        "5af54289b4cc82b1d1c776ec64eecd1ec8ff04a3"
      ],
      "author": {
        "name": "Bennet Bleßmann",
        "email": "bb-github@t-online.de",
        "time": "Mon Dec 15 21:13:44 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Dec 16 10:06:11 2025 +0000"
      },
      "message": "handle versions in the formats `1.71.1-beta`, `1.71.1-beta.1`, `1.71.1-nightly`\n"
    },
    {
      "commit": "5af54289b4cc82b1d1c776ec64eecd1ec8ff04a3",
      "tree": "73788b9bd69088268caa289bc1d9950eba890250",
      "parents": [
        "496817f7cc0c05e47ae12183518dc9aaac2e3a02"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jsgf@meta.com",
        "time": "Sat Dec 06 02:49:36 2025 -0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Dec 16 09:33:17 2025 +0000"
      },
      "message": "Add const-generic bitfield accessors for compile-time optimization\n\nAdd a specialized impl block for `__BindgenBitfieldUnit\u003c[u8; N]\u003e` with\nconst-generic methods: `get_const`, `set_const`, `raw_get_const`, and\n`raw_set_const`. These methods take bit offset and width as const generic\nparameters, allowing the compiler to fully optimize bitfield access at\ncompile time.\n\nUpdate codegen to use the new const-generic methods for generated\nbitfield accessors. Since all bitfield offsets and widths are known at\ncode generation time, this enables better optimization.\n\nThe original runtime-parameter methods are preserved for backwards\ncompatibility with users who provide custom implementations via the\nblocklist mechanism.\n"
    },
    {
      "commit": "496817f7cc0c05e47ae12183518dc9aaac2e3a02",
      "tree": "caf29234c041c139b1ec2e9d3993ea4e7ac8d716",
      "parents": [
        "7c38446b40fb487bae84b693c3c06fdb0d28e4d8"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jsgf@meta.com",
        "time": "Sat Dec 06 02:43:57 2025 -0800"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Dec 16 09:33:17 2025 +0000"
      },
      "message": "Optimize BitfieldUnit get/set with byte-wise operations\n\nReplace bit-at-a-time loops in get(), set(), raw_get(), and raw_set()\nwith byte-wise shift/mask operations. This significantly improves\nperformance for multi-bit field access.\n\nThe new implementation reads/writes bytes in chunks and uses shifts\nand masks to extract/insert values, rather than iterating over each\nbit individually.\n\nFor big-endian targets, the algorithm reverses bits within bytes and\nthe final value to maintain the same semantics as the original\nimplementation.\n"
    },
    {
      "commit": "7c38446b40fb487bae84b693c3c06fdb0d28e4d8",
      "tree": "53c838e731af6dce2c1f660e3c332ae6369bf12b",
      "parents": [
        "953fc761b6fa2c6d467d96335709ce19667f5edd"
      ],
      "author": {
        "name": "Marijn Suijten",
        "email": "marijn@traverseresearch.nl",
        "time": "Mon Dec 08 14:24:29 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Tue Dec 16 09:31:28 2025 +0000"
      },
      "message": "Change `Bindings::write()` to take `impl Write` instead of `\u0026mut dyn Write`\n\nDynamic dispatch is not (always) needed here, and this way an owned\n`File` can trivially be moved into the function again like before\nwithout forcing a mutable borrow.  Noting that `Write` is even\nimplemented on `\u0026File`, which can now be more easily passed without\nhaving it under `mut`.\n"
    },
    {
      "commit": "953fc761b6fa2c6d467d96335709ce19667f5edd",
      "tree": "b3b0dbb126e748691e04e8e261973eade6f90dd0",
      "parents": [
        "ccd563767ab1509f7c0eb68c6effc79eaf3684a9"
      ],
      "author": {
        "name": "Xiangfei Ding",
        "email": "dingxiangfei2009@protonmail.ch",
        "time": "Mon Dec 15 10:36:29 2025 +0000"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Dec 15 11:52:10 2025 +0000"
      },
      "message": "Simplify some pattern matching\n\nThis small patch is to pulled away off another patch.\nWith this we are one `clone` less and the pattern getting matched\nagainst is more obvious.\n\nSigned-off-by: Xiangfei Ding \u003cdingxiangfei2009@protonmail.ch\u003e\n"
    },
    {
      "commit": "ccd563767ab1509f7c0eb68c6effc79eaf3684a9",
      "tree": "14636efd104e53b36a68d1728a34fb07c9160fc7",
      "parents": [
        "192fd6a5a308599137fb5943a95b3db960e30c27"
      ],
      "author": {
        "name": "Marijn Suijten",
        "email": "marijn@traverseresearch.nl",
        "time": "Tue Nov 11 12:26:51 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Dec 08 12:40:11 2025 +0000"
      },
      "message": "Don\u0027t require a `Box` wrapper on `Bindings::write()`\n\nThe function in question doesn\u0027t store the `dyn Write` trait object\nanywhere, allowing us to pass a plain `\u0026mut dyn Write` (which is also\nimplemented for `\u0026mut Box\u003cdyn Write\u003e` allowing the existing CLI parser\nto operate normally).\n\nThis in turn no longer requires users of `bindgen` to wrap their\n`\u0026mut File` or `\u0026mut Vec\u003cu8\u003e` in a moved `Box` just to be able to give\ntemporary mutable access to the `write() function`.\n"
    },
    {
      "commit": "192fd6a5a308599137fb5943a95b3db960e30c27",
      "tree": "5f7735a2f85f15f207e316ceaa584f27d8d57820",
      "parents": [
        "ac3bc6ebfd5a8d6c99d42837ec123a90d37af679"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jsgf@fb.com",
        "time": "Tue Oct 21 18:17:09 2025 -0700"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Dec 08 12:38:03 2025 +0000"
      },
      "message": "Support nested flexible array members\n\nAdd support for structs where the last field is itself a struct\ncontaining a flexible array member (FAM). For example:\n\n    struct Name {\n        int count;\n        char name[];\n    };\n\n    struct Field {\n        int id;\n        struct Name name;  // Last field has a FAM\n    };\n\nThe Name struct is generated with a generic FAM parameter:\n\n    pub struct Name\u003cFAM: ?Sized \u003d [c_char; 0]\u003e {\n        pub count: c_int,\n        pub name: FAM,\n    }\n\nAnd Field propagates this parameter to its nested field:\n\n    pub struct Field\u003cFAM: ?Sized \u003d [c_char; 0]\u003e {\n        pub id: c_int,\n        pub name: Name\u003cFAM\u003e,\n    }\n\nFor packed structs, the nested FAM field is wrapped in ManuallyDrop\nsince packed structs cannot directly contain DST fields:\n\n    #[repr(C, packed)]\n    pub struct FieldPacked\u003cFAM: ?Sized \u003d [c_char; 0]\u003e {\n        pub id: c_int,\n        pub name: ::std::mem::ManuallyDrop\u003cName\u003cFAM\u003e\u003e,\n    }\n\nImplementation:\n- Enhanced flex_array_member() in ir/comp.rs to recursively detect\n  when a struct\u0027s last field is a compound type with its own FAM\n- Updated field code generation to parameterize nested FAM field\n  types with \u003cFAM\u003e and wrap in ManuallyDrop for packed structs\n- Added test cases for nested FAMs in both regular and packed structs\n\nRelated to #2936\n"
    },
    {
      "commit": "ac3bc6ebfd5a8d6c99d42837ec123a90d37af679",
      "tree": "6fa263a2d3ad10752e9ac1cd28dda0b75b10ca0e",
      "parents": [
        "1cea6959c5e0ef6d068bc2cbf379e49f41cd626b"
      ],
      "author": {
        "name": "Jonathan Schwender",
        "email": "schwenderjonathan@gmail.com",
        "time": "Fri Nov 28 15:20:26 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Nov 28 16:32:05 2025 +0000"
      },
      "message": "Fix clippy lint\n"
    },
    {
      "commit": "1cea6959c5e0ef6d068bc2cbf379e49f41cd626b",
      "tree": "a5df613a548f4731cff5b5689df424aaa855a01f",
      "parents": [
        "5813198164bf15d8b7020baed28cd920d83938c0"
      ],
      "author": {
        "name": "Jonathan Schwender",
        "email": "schwenderjonathan@gmail.com",
        "time": "Sun Feb 02 09:53:11 2025 +0100"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Fri Nov 28 16:32:05 2025 +0000"
      },
      "message": "Prevent default derives for Forward declared types.\n\nWe do not know the layout for forward declared types.\nDeriving Copy, Clone, Hash, PartialEq etc. is simply wrong.\nDeriving Debug is debatable, since it can\u0027t print anything\nuseful. Since we previously would derive Debug, lets just\nkeep it, to avoid needless breaking changes.\n\nChanged tests:\n- func-return-must-use: Don\u0027t use forward declared structs in the\n  test, since that would result in wrong bindings!\n- issue-1238-fwd-no-copy test no longer requires an annotation,\n  since Forward declared types should always be no copy\n- forward-declaration-autoptr.rs: Manually implement clone.\n  The inner type is unknown, so requiring clone/copy is not correct.\n"
    },
    {
      "commit": "5813198164bf15d8b7020baed28cd920d83938c0",
      "tree": "271b0ce1710f1d8c25ab38840da9898c0cb79056",
      "parents": [
        "6fe53022c2506b93fa15e097d3016bb29948cbee"
      ],
      "author": {
        "name": "Simonas Kazlauskas",
        "email": "git@kazlauskas.me",
        "time": "Mon Nov 10 19:33:36 2025 +0200"
      },
      "committer": {
        "name": "Emilio Cobos Álvarez",
        "email": "emilio@crisal.io",
        "time": "Mon Nov 10 23:41:39 2025 +0000"
      },
      "message": "feat(dyngen): preconvert path to `OsStr` when opening the library\n\nIn libloading 0.9 the argument bound changed from `AsRef\u003cOsStr\u003e` to\n`libloading::AsFilename`. This was necessary in order to enable\ncompilation of libloading for usecases that cannot depend on libstd.\n`libloading::AsFilename` supports most of the same types, but cannot be\nimplemented generally for any `T: AsRef\u003cOsStr\u003e` due to the orphan rule.\n\nThis makes the generated code support both 0.8 and 0.9 versions of\nlibloading transparently, and at the same time it also reduces the\nnumber of different instantiations of `Library::new`.\n\nWhen bindgen is adjusted to work with libloading 0.9 only it will be\nworthwhile to adjust the generation of `from_library` to use `c\"string\"`\nliterals over `b\"string\\0\"` ones as those can forgo any runtime checking\nof the argument(s). However we can\u0027t do it right while libloading 0.8 is\nstill supported.\n"
    }
  ],
  "next": "6fe53022c2506b93fa15e097d3016bb29948cbee"
}
