diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d413552
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*/target/
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..bfd20ff
--- /dev/null
+++ b/README.md
@@ -0,0 +1,11 @@
+This repository contains mirrored source of the
+[`cbindgen`](https://crates.io/crates/cbindgen) crate from crates.io.
+
+To update to a new version, use [`cargo download`](https://crates.io/crates/cargo-download).
+
+```sh
+cargo download cbindgen==<VERSION> | tar zxf -
+```
+
+Modifications from the upstream source:
+* None
diff --git a/cbindgen-0.24.5/.cargo_vcs_info.json b/cbindgen-0.24.5/.cargo_vcs_info.json
new file mode 100644
index 0000000..d58459c
--- /dev/null
+++ b/cbindgen-0.24.5/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+  "git": {
+    "sha1": "3680e4d539e33977d613f161530c91a284a82428"
+  },
+  "path_in_vcs": ""
+}
\ No newline at end of file
diff --git a/cbindgen-0.24.5/.clippy.toml b/cbindgen-0.24.5/.clippy.toml
new file mode 100644
index 0000000..8eb9e00
--- /dev/null
+++ b/cbindgen-0.24.5/.clippy.toml
@@ -0,0 +1,2 @@
+# Specify the minimum supported Rust version
+msrv = "1.54.0"
diff --git a/cbindgen-0.24.5/.gitattributes b/cbindgen-0.24.5/.gitattributes
new file mode 100644
index 0000000..2da8204
--- /dev/null
+++ b/cbindgen-0.24.5/.gitattributes
@@ -0,0 +1,4 @@
+# Running test suite will update test expectations to use LF line endings,
+# so they need to be checked out using LF as well.
+* text=auto eol=lf
+linestyle_crlf* -text
diff --git a/cbindgen-0.24.5/.github/workflows/cbindgen.yml b/cbindgen-0.24.5/.github/workflows/cbindgen.yml
new file mode 100644
index 0000000..65aa42d
--- /dev/null
+++ b/cbindgen-0.24.5/.github/workflows/cbindgen.yml
@@ -0,0 +1,87 @@
+name: cbindgen
+
+on:
+  push:
+    branches:
+      - master
+  pull_request:
+    branches:
+      - master
+
+jobs:
+  rustfmt-clippy:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v3
+
+    - name: Install stable
+      uses: dtolnay/rust-toolchain@stable
+      with:
+        components: "clippy, rustfmt"
+
+    - name: Run rustfmt
+      run: |
+        cargo fmt --check
+
+    - name: Run clippy
+      run: |
+        cargo clippy --workspace -- -D warnings
+
+    - name: Install minimum supported Rust version
+      id: msrv
+      uses: dtolnay/rust-toolchain@1.54
+
+    - name: Build with minimum supported Rust version
+      run: |
+        cargo +${{steps.msrv.outputs.name}} test nonexistent-test --verbose
+
+  build:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v3
+
+    - name: Install stable Rust
+      uses: dtolnay/rust-toolchain@stable
+
+    - name: Install Python
+      uses: actions/setup-python@v4
+      with:
+        python-version: '3.8'
+
+    - name: Install Cython
+      run: |
+        python -m pip install --upgrade pip wheel
+        pip install Cython==0.29.*
+
+    - name: Build
+      run: |
+        cargo build --verbose
+
+    - name: Build no-default-features
+      run: |
+        cargo build --verbose --no-default-features
+
+    - name: Test package
+      env:
+        CBINDGEN_TEST_VERIFY: 1
+      run: |
+        cargo package --verbose
+        (cd target/package/cbindgen-$(cargo run -- --version | cut -d ' ' -f 2) && cargo test --verbose)
+
+    - name: Install nightly Rust
+      uses: dtolnay/rust-toolchain@nightly
+
+    - name: Test
+      env:
+        CBINDGEN_TEST_VERIFY: 1
+      run: |
+        cargo +nightly test --verbose
+
+    - name: Test minimal-versions
+      run: |
+        cargo +nightly update -Zminimal-versions
+        cargo +nightly test
diff --git a/cbindgen-0.24.5/.github/workflows/deploy.yml b/cbindgen-0.24.5/.github/workflows/deploy.yml
new file mode 100644
index 0000000..379e476
--- /dev/null
+++ b/cbindgen-0.24.5/.github/workflows/deploy.yml
@@ -0,0 +1,49 @@
+name: deploy
+
+on:
+  push:
+    tags:
+      - 'v*.*.*'
+
+jobs:
+
+  linux-binaries:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v3
+
+    - name: Install stable
+      uses: dtolnay/rust-toolchain@stable
+
+    - name: Build cbindgen
+      run: |
+        cargo build --release
+
+    - name: Strip cbindgen
+      run: |
+        strip target/release/cbindgen
+
+    - name: Handle release data and files
+      id: tagName
+      run: |
+        VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
+        echo "::set-output name=version::$VERSION"
+        # Steps to extract the last release notes from CHANGES:
+        #   1. Remove the first three lines
+        #   2. Stop at the next heading level
+        #   3. Remove the last line
+        #   4. Deindent the bullet points to avoid a markdown code block
+        tail -n +3 CHANGES | sed '/^##/q' |
+        sed '$ d' | awk '{$1=$1};1' > CHANGES.txt
+
+    - name: Create a release
+      uses: softprops/action-gh-release@v1
+      with:
+        name: v${{ steps.tagName.outputs.version }}
+        body_path: CHANGES.txt
+        files: |
+          target/release/cbindgen
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/cbindgen-0.24.5/.gitignore b/cbindgen-0.24.5/.gitignore
new file mode 100644
index 0000000..83fe80e
--- /dev/null
+++ b/cbindgen-0.24.5/.gitignore
@@ -0,0 +1,3 @@
+target
+.idea
+.vscode
diff --git a/cbindgen-0.24.5/CHANGES b/cbindgen-0.24.5/CHANGES
new file mode 100644
index 0000000..0751f59
--- /dev/null
+++ b/cbindgen-0.24.5/CHANGES
@@ -0,0 +1,315 @@
+## 0.24.5
+
+      * Don't enforce tempfile version.
+
+## 0.24.4
+
+      * Move expand infinite recursion fix (#799)
+      * Add with_cpp_compat to the builder (#796)
+      * Handle never type in return position consistently (#780)
+      * Fix warnings (#816, #819)
+      * Updated documentation (#788, #791, #792, #810, #823)
+
+## 0.24.3
+
+      * Make struct expressions correctly generated through typedefs (#768).
+
+## 0.24.2
+
+      * Make bitfield operators use explicit constructors.
+
+## 0.24.1
+
+      * Add support for unary negation (#765).
+      * Make more bitfield operators constexpr (#765).
+
+## 0.24.0
+
+      * Basic const generic support (#759, #760 #762).
+      * Suffixes on integer literals are now honored to avoid narrowing (#764).
+
+## 0.23.0
+
+      * Better support for constexpr. (#756)
+      * constexpr is now enabled by default in C++ mode. You can use const.allow_constexpr=false to revert to previous behavior. (#756)
+      * Minimum syn version no longer parses old rust code. (#754)
+
+## 0.22.0
+
+      * Support rename rule for union body members (#751).
+      * constant: Add support for associated constant expressions (#752).
+      * Fix regression in CamelCase rename rule (should be lowerCamelCase) (#750).
+      * enumeration: simplify standard types in variants (#749).
+      * Avoid generating and writing bindings when called recursively (#747).
+      * Cython: Omit per-variant tags in unions generated for Rust enums (#748).
+      * Update various dependencies.
+
+## 0.21.0
+
+      * Update MSRV to 1.54.0
+      * Update clap to 3.1.
+      * Update heck to 0.4.0
+      * unraw identifiers
+      * Honor documentation_length in Cython.
+      * Add documentation_style to with short and full options
+      * Map RawFd to Int
+      * Respect remove_underscores config when prefixing name to enum
+
+## 0.20.0
+
+     * Add Builder::with_using_namespaces. (#688)
+     * Ignore PhantomPinned. (#695)
+     * Simplify Pin<T> to T. (#697)
+     * Update --pretty=expanded to -Zunpretty=expanded. (#706)
+
+## 0.19.0
+
+     * Simplify types in generics (#663)
+     * Use --profile=check for macro expansion (#671)
+     * Use exported name to prefix enum variants (#672)
+     * Fix path attribute handling in inline submodules (#679)
+     * Fix a stack overflow with some recursive typedefs (#680)
+
+## 0.18.0
+
+     * Simplify types in nested types such as pointed-to types and function signatures (#661)
+
+## 0.17.0
+
+     * Add with_parse_extra_bindings to builder. (#645)
+     * Support NonZero and fix incorrect simplification of Option<ptr> into ptr. (#647)
+     * Deal with name conflicts correctly in declaration type resolution. (#651)
+     * Support pointers to ZSTs. (#656)
+
+## 0.16.0
+
+     * Remove artificial restriction on lifetime parameters on enums (#604)
+     * Add an option for converting usize/isize into size_t/ptrdiff_t. (#606)
+     * Allow controlling the cargo profile used for expansion. (#607)
+     * Support wider range of expressions in enum discriminants (#614)
+     * Support generation of Cython bindings (#590)
+     * Fixed some issues with style=tag and recursive structs (#615)
+     * Default C style to Both (as specified in docs) (#615)
+     * Fix resolution of path dependencies from certain modules. (#629)
+     * Support inlined definitions for tuple variants with a single field in C (#631)
+
+Thanks to all the awesome contributors that contributed to this release.
+
+## 0.15.0
+
+     * Allow customizing mangling of generic parameters in C (#575)
+     * Box<T> simplifies to T* in C (4ce324c)
+     * ManuallyDrop<T> and MaybeUninit<T> simplify to T in C, and are opaque in C++ (0076a17)
+     * C++ supports a derive-ostream annotation to derive serialization of structs, unions and enums (#582)
+     * Large character constants have been fixed on Windows (#586)
+     * Constants are now generated for typedefs, etc (#589)
+     * The `sort_by` configuration option has been made to work for constants (#587)
+     * Default sort order is source order now (sort_by = "None"), and can be changed by the above option (#587)
+
+## 0.14.6
+
+     * Fixed the builds with older versions of rustc.
+
+## 0.14.5
+
+     * Add support to specify line ending style (#568)
+     * Add cbindgen:ptrs-as-arrays annotation to allow making function
+       arguments C/C++ arrays.
+
+## 0.14.4
+
+     * Allow to override the mangling separator (#502)
+
+     * cbindgen now handles better having ZSTs in template parameters, and
+       default template parameters (#563).
+
+     * Support for annotating nonnull pointers (#558)
+
+     * Fixed bitflags that overflow a signed integer (#556)
+
+     * Support for wildcard argument names (#550)
+
+     * Support for the never return type, with configurable annotation (#549)
+
+     * Properly reject arrays as function arguments (#540)
+
+## 0.14.3
+
+     * Introduce cbindgen:ignore comment annotation, to allow ignoring items or modules. (#519)
+     * Support for casts in constant expressions. (#526)
+     * Make a non-fatal error a warning message. (#535)
+     * Add a --metadata option to the CLI, to allow passing pre-computed cargo metadata. (#538)
+
+## 0.14.2
+
+     * Fixed minimal dependency versions. (#507)
+     * Add an option to write pragma once. (#511)
+     * Fix submodule scanning for implicit Rust 2018 modules. (#512)
+     * Fix dependency parsing / scanning to handle target-specific versions. (#513)
+     * Use heck for case conversion. (#514)
+     * Add support for verbatim content after includes. (#416)
+     * Allow to add attributes to most generated functions. (#515)
+
+## 0.14.1
+
+     * Handle mangling pointers. (#508)
+     * Unconditionally generate a return statement in partialeq implementations. (#509)
+
+## 0.14.0
+
+     * Minor tweak at how [export.exclude] is handled to allow excluding
+       generic instantiations in C mode. (#501)
+     * Documented cpp_compat option. (#496)
+     * Fixed a panic when parsing associated constants for a built-in type. (#494)
+
+## 0.13.2
+
+     * Constants now have suitable documentation. (#471)
+     * Fixed some C warnings by emitting void when there are no arguments. (#470)
+     * Avoids reading cargo.toml when not needed, which can cause panics in workspace situations.
+     * Only write `default` cases if the switch is not exhaustive. (#475)
+     * Some warnings have been refined. (#477)
+     * Code generation for static arrays has been fixed. (#479)
+     * Opt-in support for constexpr in constants. (#481)
+     * Fix C code generation and some warnings when extremely large constants are used. (#490)
+     * Proper escaping of enum variants and fields. (#483)
+     * Added support for RefCell (as an opaque type) and Cell. (#489)
+
+## 0.13.1
+
+     * Support `#[cfg]` on individual enum variants. (#469)
+
+## 0.13.0
+
+     * Support 'swift_name' attributes on generated functions (#449)
+     * Add [export.pre_body] to config (#452)
+     * Handle new line in doc attribute (#454)
+     * Add support for `Self` in tagged enums, structs and unions (#455, #455, #456)
+     * Make sentinel variant respect regular config (#459)
+     * Fix layout of tagged enums with size under some configurations (#463)
+     * Add an option to allow configuring the order of function names in generated headers (#466)
+
+## 0.12.2
+
+     * Fixed version detection with lockfile v2. https://github.com/eqrion/cbindgen/pull/446
+     * Added support for export_name on functions. https://github.com/eqrion/cbindgen/pull/447
+
+## 0.12.1
+
+     * Added support for #[repr*64)] on enums. https://github.com/eqrion/cbindgen/pull/441
+     * Added support to generate plain enums instead of enum classes for C++. https://github.com/eqrion/cbindgen/pull/443
+     * Fixed dependency resolution with lockfile v2. https://github.com/eqrion/cbindgen/pull/438
+
+## 0.12.0
+
+     * Added support for #[repr(align)] and #[repr(packed)] on structs and unions. https://github.com/eqrion/cbindgen/pull/431
+     * Added support to generate copy-assignment operators for enums. https://github.com/eqrion/cbindgen/pull/434
+
+## 0.11.1
+
+     * More binary operators and expressions are supported. https://github.com/eqrion/cbindgen/pull/425
+     * More built-in bitflags operators. https://github.com/eqrion/cbindgen/pull/426
+
+## 0.11.0
+
+     * Made rust char map to uint32_t. https://github.com/eqrion/cbindgen/pull/424
+
+## 0.10.1
+
+     * Improved error message for missing config file. https://github.com/eqrion/cbindgen/pull/422
+     * Add missing header for char32_t. https://github.com/eqrion/cbindgen/pull/414
+
+## 0.10.0
+
+     * Initialize struct literal with list-initializer for C++11 standard. https://github.com/eqrion/cbindgen/pull/401
+     * Surround namespace with __cplusplus ifdef in cpp_compat mode. https://github.com/eqrion/cbindgen/pull/407
+     * Add support for --quiet flag. https://github.com/eqrion/cbindgen/pull/400
+     * Map char to char32_t. https://github.com/eqrion/cbindgen/pull/396
+     * Improve binding_crate_ref() error message. https://github.com/eqrion/cbindgen/pull/395
+     * avoid prematurely returning during expansion. https://github.com/eqrion/cbindgen/pull/389
+     * Add support for adding "using namespace" statements. https://github.com/eqrion/cbindgen/pull/387
+
+## 0.9.1
+
+     * Various improvements to comment output. https://github.com/eqrion/cbindgen/pull/370 / https://github.com/eqrion/cbindgen/pull/375.
+     * Fixed expand when ran from build.rs. https://github.com/eqrion/cbindgen/pull/371
+     * More debugging output for expansion. https://github.com/eqrion/cbindgen/pull/383
+     * New option to add a default private constructor in C++ tagged enums. https://github.com/eqrion/cbindgen/pull/377
+     * Syn and related dependencies updated to 1.0. https://github.com/eqrion/cbindgen/pull/379
+
+## 0.9.0
+
+     * Support to generate C headers with C++ compatibility. https://github.com/eqrion/cbindgen/pull/349
+     * Fix include guard generation when no_includes is set. https://github.com/eqrion/cbindgen/pull/352
+     * Fix crate parsing order so that types from the binding crate are preferred in presence of conflicting names. https://github.com/eqrion/cbindgen/pull/355
+     * Add extra_bindings option to generate bindings for dependencies. https://github.com/eqrion/cbindgen/pull/362
+     * Clap dependency is optional now so it's feasible to avoid building it if cbindgen is used as a library. https://github.com/eqrion/cbindgen/pull/363
+
+## 0.8.7
+
+     * Require C++11 to run the test-suite (#341, test-only)
+     * Improve mangling error message (#340)
+     * Add the ability to automatically derive copy-constructors for tagged enums (#339)
+     * Use placement new for constructing in tagged unions' helper methods (#333)
+
+## 0.8.6
+
+    * Fixed a panic when missing a lock file
+
+## 0.8.5
+
+    * Improved support for Rust 2018 modules
+    * Add possibility to autogenerate tagged union destructors
+
+## 0.8.4
+
+    * Support for package renaming in Cargo.toml
+    * Improved error messages for |cargo metadata| failures
+    * Replaced 'test.py' harness with |cargo test|
+    * Char constants will now be escaped properly
+    * Visibility of constants will now be respected
+    * Added a C99 doc comment style
+
+## 0.8.2
+
+     * Improvements to bitflags parsing
+
+## 0.8.1
+
+     * Support for manual parsing and expanding of bitflags macros
+     * Support for optional tagged enum casts with asserts
+
+## 0.8.0
+
+    * support for 'includes' without default includes
+    * removed dependency on ancient serde_derive!
+
+## 0.7.1
+
+    * Fix for crash when unwrapping unsupported type with associated constants
+
+## 0.7.0
+
+    * support for libc::ssize_t
+    * fixed some warnings on nightly
+    * fix for transparent associated constants
+    * switched more API's to use AsRef<Path>
+    * impl std::error::Error for cbindgen::Error
+    * now support putting user-defined content in item bodies
+
+## 0.6.8
+
+    * ptrdiff_t is now a recognized primitive type
+    * named function type arguments are now propagated
+    * fixes for struct literals in constants
+    * reserved C/C++ keywords are now escaped automatically
+    * negative enum discriminants are now supported
+    * fix for prefixing and formatting variant names
+    * fix for snake_case formatter
+    * syn update
+    * doxygen style comments are now output by default
+    * VaList is now a recognized primitive type
+    * fix for comment processing
+    * constant is propagated into array types
+    * references are now supported in IR, and used for some helper method generation
+    * assignment helper functions will generate array copies if necessary
diff --git a/cbindgen-0.24.5/Cargo.lock b/cbindgen-0.24.5/Cargo.lock
new file mode 100644
index 0000000..aa32928
--- /dev/null
+++ b/cbindgen-0.24.5/Cargo.lock
@@ -0,0 +1,401 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cbindgen"
+version = "0.24.5"
+dependencies = [
+ "clap",
+ "heck",
+ "indexmap",
+ "log",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "serial_test",
+ "syn 1.0.109",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serial_test"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0bccbcf40c8938196944a3da0e133e031a33f4d6b72db3bda3cc556e361905d"
+dependencies = [
+ "lazy_static",
+ "parking_lot",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/cbindgen-0.24.5/Cargo.toml b/cbindgen-0.24.5/Cargo.toml
new file mode 100644
index 0000000..6ff123a
--- /dev/null
+++ b/cbindgen-0.24.5/Cargo.toml
@@ -0,0 +1,95 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies.
+#
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
+
+[package]
+edition = "2018"
+name = "cbindgen"
+version = "0.24.5"
+authors = [
+    "Emilio Cobos Álvarez <emilio@crisal.io>",
+    "Jeff Muizelaar <jmuizelaar@mozilla.com>",
+    "Kartikaya Gupta <kats@mozilla.com>",
+    "Ryan Hunt <rhunt@eqrion.net>",
+]
+exclude = ["tests/profile.rs"]
+description = "A tool for generating C bindings to Rust code."
+readme = "README.md"
+keywords = [
+    "bindings",
+    "ffi",
+    "code-generation",
+]
+categories = [
+    "external-ffi-bindings",
+    "development-tools::ffi",
+]
+license = "MPL-2.0"
+repository = "https://github.com/eqrion/cbindgen"
+
+[lib]
+name = "cbindgen"
+path = "src/lib.rs"
+
+[[bin]]
+name = "cbindgen"
+path = "src/main.rs"
+doc = false
+required-features = ["clap"]
+
+[dependencies.clap]
+version = "3.1"
+optional = true
+
+[dependencies.heck]
+version = "0.4"
+
+[dependencies.indexmap]
+version = "1"
+
+[dependencies.log]
+version = "0.4"
+
+[dependencies.proc-macro2]
+version = "1"
+
+[dependencies.quote]
+version = "1"
+
+[dependencies.serde]
+version = "1.0.103"
+features = ["derive"]
+default-features = false
+
+[dependencies.serde_json]
+version = "1.0"
+
+[dependencies.syn]
+version = "1.0.88"
+features = [
+    "clone-impls",
+    "extra-traits",
+    "full",
+    "parsing",
+    "printing",
+]
+default-features = false
+
+[dependencies.tempfile]
+version = "3"
+
+[dependencies.toml]
+version = "0.5"
+
+[dev-dependencies.serial_test]
+version = "0.5.0"
+
+[features]
+default = ["clap"]
diff --git a/cbindgen-0.24.5/Cargo.toml.orig b/cbindgen-0.24.5/Cargo.toml.orig
new file mode 100644
index 0000000..e82d854
--- /dev/null
+++ b/cbindgen-0.24.5/Cargo.toml.orig
@@ -0,0 +1,51 @@
+[package]
+name = "cbindgen"
+version = "0.24.5"
+authors = [
+  "Emilio Cobos Álvarez <emilio@crisal.io>",
+  "Jeff Muizelaar <jmuizelaar@mozilla.com>",
+  "Kartikaya Gupta <kats@mozilla.com>",
+  "Ryan Hunt <rhunt@eqrion.net>"
+]
+license = "MPL-2.0"
+description = "A tool for generating C bindings to Rust code."
+keywords = ["bindings", "ffi", "code-generation"]
+categories = ["external-ffi-bindings", "development-tools::ffi"]
+repository = "https://github.com/eqrion/cbindgen"
+edition = "2018"
+exclude = [
+  "tests/profile.rs", # Test relies in a sub-crate, see https://github.com/rust-lang/cargo/issues/9017
+]
+
+[dependencies]
+clap = { version = "3.1", optional = true }
+indexmap = "1"
+log = "0.4"
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+serde_json = "1.0"
+tempfile = "3"
+toml = "0.5"
+proc-macro2 = "1"
+quote = "1"
+heck = "0.4"
+
+[dependencies.syn]
+version = "1.0.88"
+default-features = false
+features = ["clone-impls", "extra-traits", "full", "parsing", "printing"]
+
+[dev-dependencies]
+serial_test = "0.5.0"
+
+[features]
+default =  ["clap"]
+
+[[bin]]
+name = "cbindgen"
+path = "src/main.rs"
+doc = false
+required-features = ["clap"]
+
+[lib]
+name = "cbindgen"
+path = "src/lib.rs"
diff --git a/cbindgen-0.24.5/LICENSE b/cbindgen-0.24.5/LICENSE
new file mode 100644
index 0000000..a612ad9
--- /dev/null
+++ b/cbindgen-0.24.5/LICENSE
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/cbindgen-0.24.5/README.md b/cbindgen-0.24.5/README.md
new file mode 100644
index 0000000..a67ece6
--- /dev/null
+++ b/cbindgen-0.24.5/README.md
@@ -0,0 +1,97 @@
+# `cbindgen` &emsp; [![Build Status]][actions] [![Latest Version]][crates.io] [![Api Rustdoc]][rustdoc] [![Rust](https://img.shields.io/badge/rust-1.54%2B-blue.svg?maxAge=3600)](https://github.com/eqrion/cbindgen)
+
+[Build Status]: https://github.com/eqrion/cbindgen/workflows/cbindgen/badge.svg
+[actions]: https://github.com/eqrion/cbindgen/actions
+[Latest Version]: https://img.shields.io/crates/v/cbindgen.svg
+[crates.io]: https://crates.io/crates/cbindgen
+[Api Rustdoc]: https://img.shields.io/badge/api-rustdoc-blue.svg
+[rustdoc]: https://docs.rs/cbindgen
+
+[Read the full user docs here!](docs.md)
+
+cbindgen creates C/C++11 headers for Rust libraries which expose a public C API.
+
+While you could do this by hand, it's not a particularly good use of your time.
+It's also much more likely to be error-prone than machine-generated headers that
+are based on your actual Rust code. The cbindgen developers have also worked
+closely with the developers of Rust to ensure that the headers we generate
+reflect actual guarantees about Rust's type layout and ABI.
+
+C++ headers are nice because we can use operator overloads, constructors, enum
+classes, and templates to make the API more ergonomic and Rust-like. C headers
+are nice because you can be more confident that whoever you're interoperating
+with can handle them. With cbindgen *you don't need to choose*! You can just
+tell it to emit both from the same Rust library.
+
+There are two ways to use cbindgen: as a standalone program, or as a library
+(presumably in your build.rs). There isn't really much practical difference,
+because cbindgen is a simple rust library with no interesting dependencies.
+
+Using it as a program means people building your software will need it
+installed. Using it in your library means people may have to build cbindgen more
+frequently (e.g. every time they update their rust compiler).
+
+It's worth noting that the development of cbindgen has been largely adhoc, as
+features have been added to support the usecases of the maintainers. This means
+cbindgen may randomly fail to support some particular situation simply because
+no one has put in the effort to handle it yet. [Please file an issue if you run
+into such a situation](https://github.com/eqrion/cbindgen/issues/new). Although
+since we all have other jobs, you might need to do the implementation work too
+:)
+
+# Quick Start
+
+To install cbindgen, you just need to run
+
+```text
+cargo install --force cbindgen
+```
+
+(--force just makes it update to the latest cbindgen if it's already installed)
+
+Or with Homebrew, run
+
+```text
+brew install cbindgen
+```
+
+To use cbindgen you need two things:
+
+* A configuration (cbindgen.toml, which can be empty to start)
+* A Rust crate with a public C API
+
+Then all you need to do is run it:
+
+```text
+cbindgen --config cbindgen.toml --crate my_rust_library --output my_header.h
+```
+
+This produces a header file for C++.  For C, add the `--lang c` switch.
+
+See `cbindgen --help` for more options.
+
+[Read the full user docs here!](docs.md)
+
+[Get a template cbindgen.toml here.](template.toml)
+
+# Examples
+
+We don't currently have a nice tailored example application, but [the
+tests](tests/rust/) contain plenty of interesting examples of our features.
+
+You may also find it interesting to browse the projects that are using cbindgen
+in production:
+
+* [milksnake](https://github.com/getsentry/milksnake)
+* [webrender](https://searchfox.org/mozilla-central/source/gfx/webrender_bindings) ([generated header](https://searchfox.org/mozilla-central/source/__GENERATED__/gfx/webrender_bindings/webrender_ffi_generated.h))
+* [stylo](https://searchfox.org/mozilla-central/source/layout/style) ([generated header](https://searchfox.org/mozilla-central/source/__GENERATED__/layout/style/ServoStyleConsts.h))
+* [maturin](https://github.com/PyO3/maturin)
+
+If you're using `cbindgen` and would like to be added to this list, please open
+a pull request!
+
+# Releases
+
+cbindgen doesn't have a fixed release calendar, please file an issue requesting
+a release if there's something fixed in trunk that you need released. Ping
+`@emilio` for increased effect.
diff --git a/cbindgen-0.24.5/build.rs b/cbindgen-0.24.5/build.rs
new file mode 100644
index 0000000..5644b02
--- /dev/null
+++ b/cbindgen-0.24.5/build.rs
@@ -0,0 +1,70 @@
+fn generate_tests() {
+    use std::env;
+    use std::ffi::OsStr;
+    use std::fs::{self, File};
+    use std::io::Write;
+    use std::path::{Path, PathBuf};
+
+    let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
+    let mut dst = File::create(Path::new(&out_dir).join("tests.rs")).unwrap();
+
+    let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
+    let tests_dir = manifest_dir.join("tests").join("rust");
+    let tests = fs::read_dir(&tests_dir).unwrap();
+
+    let entries = tests.map(|t| t.expect("Couldn't read test file"));
+
+    println!("cargo:rerun-if-changed={}", tests_dir.display());
+
+    // Try to make a decent guess at where our binary will end up in.
+    //
+    // TODO(emilio): Ideally running tests will just use the library-version of
+    // cbindgen instead of the built binary.
+    let cbindgen_path = out_dir
+        .parent()
+        .unwrap()
+        .parent()
+        .unwrap()
+        .parent()
+        .unwrap()
+        .join("cbindgen");
+
+    for entry in entries {
+        let path_segment = if entry.file_type().unwrap().is_file() {
+            match entry.path().extension().and_then(OsStr::to_str) {
+                Some("rs") => {}
+                _ => continue,
+            };
+
+            entry
+                .path()
+                .file_stem()
+                .unwrap()
+                .to_str()
+                .unwrap()
+                .to_owned()
+        } else {
+            entry.file_name().to_str().unwrap().to_owned()
+        };
+
+        let identifier = path_segment
+            .replace(|c| !char::is_alphanumeric(c), "_")
+            .replace("__", "_");
+
+        writeln!(
+            dst,
+            "test_file!({:?}, test_{}, {:?}, {:?});",
+            cbindgen_path,
+            identifier,
+            path_segment,
+            entry.path(),
+        )
+        .unwrap();
+    }
+
+    dst.flush().unwrap();
+}
+
+fn main() {
+    generate_tests();
+}
diff --git a/cbindgen-0.24.5/contributing.md b/cbindgen-0.24.5/contributing.md
new file mode 100644
index 0000000..5625d50
--- /dev/null
+++ b/cbindgen-0.24.5/contributing.md
@@ -0,0 +1,24 @@
+# Contributing
+
+Thanks for wanting to contribute!
+
+If you want help or mentorship, please file a GitHub issue and I'll be sure to provide guidance to the best of my ability.
+
+Otherwise be sure to check out `internals.md` for an overview on the internals.
+
+## Filing a pull request
+
+Check out [Servo's GitHub workflow](https://github.com/servo/servo/wiki/Github-workflow) for an overview on creating a pull request.
+
+Don't worry about requesting code review, as there is nothing formally setup for this repository. I try and review each pull request as soon as I can.
+
+There is continuous integration setup for `cbindgen` using [GitHub Actions](https://github.com/eqrion/cbindgen/actions). It automatically runs `cargo test` which runs `cbindgen` against a series of Rust files from `tests/rust/` and checks that the output compiles using `gcc` or `g++`.
+
+In addition to a C/C++ compiler `cargo test` requires Python and Cython
+(`python -m pip install Cython`) for checking Cython bindings generated from tests (`.pyx` files).
+
+Please run `cargo test` before filing a pull request to be sure that all tests pass. This will also update the test expectations.
+
+Rustfmt is also enforced by GitHub Actions. To format your code install `rustfmt-preview` using `rustup component add rustfmt-preview` and then `cargo fmt`. GitHub Actions runs with Rust nightly, so use `rustup run nightly -- cargo fmt` to guarantee consistent results.
+
+Writing new tests with your pull requests is also appreciated.
diff --git a/cbindgen-0.24.5/docs.md b/cbindgen-0.24.5/docs.md
new file mode 100644
index 0000000..d420f2d
--- /dev/null
+++ b/cbindgen-0.24.5/docs.md
@@ -0,0 +1,1027 @@
+# cbindgen User Guide
+
+cbindgen creates C/C++11 headers for Rust libraries which expose a public C API.
+
+While you could do this by hand, it's not a particularly good use of your time. It's also much more likely to be error-prone than machine-generated headers that are based on your actual Rust code. The cbindgen developers have also worked closely with the developers of Rust to ensure that the headers we generate reflect actual guarantees about Rust's type layout and ABI.
+
+C++ headers are nice because we can use operator overloads, constructors, enum classes, and templates to make the API more ergonomic and Rust-like. C headers are nice because you can be more confident that whoever you're interoperating with can handle them. With cbindgen *you don't need to choose*! You can just tell it to emit both from the same Rust library.
+
+There are two ways to use cbindgen: as a standalone program, or as a library (presumably in your build.rs).
+There isn't really much practical difference, because cbindgen is a simple rust library with no interesting dependencies. Using it as a program means people building your software will need it installed. Using it in your library means people may have to build cbindgen more frequently (e.g. every time they update their rust compiler).
+
+It's worth noting that the development of cbindgen has been largely adhoc, as features have been added to support the usecases of the maintainers. This means cbindgen may randomly fail to support some particular situation simply because no one has put in the effort to handle it yet. [Please file an issue if you run into such a situation][file-it]. Although since we all have other jobs, you might need to do the implementation work too :)
+
+
+
+
+
+# Quick Start
+
+To install cbindgen, you just need to run
+
+```text
+cargo install --force cbindgen
+```
+
+(--force just makes it update to the latest cbindgen if it's already installed)
+
+To use cbindgen you need two things:
+
+* A configuration (cbindgen.toml, which can be empty to start)
+* A Rust crate with a public C API
+
+Then all you need to do is run it:
+
+```text
+cbindgen --config cbindgen.toml --crate my_rust_library --output my_header.h
+```
+
+This produces a header file for C++.  For C, add the `--lang c` switch. \
+`cbindgen` also supports generation of [Cython](https://cython.org) bindings,
+use `--lang cython` for that.
+
+See `cbindgen --help` for more options.
+
+[Get a template cbindgen.toml here.](template.toml)
+
+
+
+## build.rs
+
+If you don't want to use cbindgen as an application, here's an example build.rs script:
+
+```rust
+extern crate cbindgen;
+
+use std::env;
+
+fn main() {
+    let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
+
+    cbindgen::Builder::new()
+      .with_crate(crate_dir)
+      .generate()
+      .expect("Unable to generate bindings")
+      .write_to_file("bindings.h");
+}
+```
+
+You can add configuration options using the [`Builder`](https://docs.rs/cbindgen/*/cbindgen/struct.Builder.html#methods) interface.
+
+Be sure to add the following section to your Cargo.toml:
+
+```
+[build-dependencies]
+cbindgen = "0.24.0"
+```
+
+If you'd like to use a `build.rs` script with a `cbindgen.toml`, consider using [`cbindgen::generate()`](https://docs.rs/cbindgen/*/cbindgen/fn.generate.html) instead.
+
+
+
+
+
+# Writing Your C API
+
+cbindgen has a simple but effective strategy. It walks through your crate looking for:
+
+* `#[no_mangle] pub extern fn` ("functions")
+* `#[no_mangle] pub static` ("globals")
+* `pub const` ("constants")
+
+and generates a header declaring those items. But to declare those items, it needs to also be able to describe the layout and ABI of the types that appear in their signatures. So it will also spider through your crate (and optionally its dependencies) to try to find the definitions of every type used in your public API.
+
+> 🚨 NOTE: A major limitation of cbindgen is that it does not understand Rust's module system or namespacing. This means that if cbindgen sees that it needs the definition for `MyType` and there exists two things in your project with the type name `MyType`, it won't know what to do. Currently, cbindgen's behaviour is unspecified if this happens. However this may be ok if they have [different cfgs][section-cfgs].
+
+If a type is determined to have a guaranteed layout, a full definition will be emitted in the header. If the type doesn't have a guaranteed layout, only a forward declaration will be emitted. This may be fine if the type is intended to be passed around opaquely and by reference.
+
+
+
+
+# Examples
+
+🚧 🏗
+
+It would be really nice to have some curated and clean examples, but we don't have those yet.
+
+[The README has some useful links though](README.md#examples).
+
+
+
+# Supported Types
+
+Most things in Rust don't have a guaranteed layout by default. In most cases this is nice because it enables layout to be optimized in the majority of cases where type layout isn't that interesting. However this is problematic for our purposes. Thankfully Rust lets us opt into guaranteed layouts with the `repr` attribute.
+
+You can learn about all of the different repr attributes [by reading Rust's reference][reference], but here's a quick summary:
+
+* `#[repr(C)]`: give this struct/union/enum the same layout and ABI C would
+* `#[repr(u8, u16, ... etc)]`: give this enum the same layout and ABI as the given integer type
+* `#[repr(transparent)]`: give this single-field struct the same ABI as its field (useful for newtyping integers but keeping the integer ABI)
+
+cbindgen supports the `#[repr(align(N))]` and `#[repr(packed)]` attributes, but currently does not support `#[repr(packed(N))]`.
+
+cbindgen also supports using `repr(C)`/`repr(u8)` on non-C-like enums (enums with fields). This gives a C-compatible tagged union layout, as [defined by this RFC 2195][really-tagged-unions]. `repr(C)` will give a simpler layout that is perhaps more intuitive, while `repr(u8)` will produce a more compact layout.
+
+If you ensure everything has a guaranteed repr, then cbindgen will generate definitions for:
+
+* struct (named-style or tuple-style)
+* enum (fieldless or with fields)
+* union
+* type
+* `[T; n]` (arrays always have a guaranteed C-compatible layout)
+* `&T`, `&mut T`, `*const T`, `*mut T`, `Option<&T>`, `Option<&mut T>` (all have the same pointer ABI)
+* `fn()` (as an actual function pointer)
+* `bitflags! { ... }` (if macro_expansion.bitflags is enabled)
+
+structs, enums, unions, and type aliases may be generic, although certain generic substitutions may fail to resolve under certain configurations. In C mode generics are resolved through monomorphization and mangling, while in C++ mode generics are resolved with templates. cbindgen cannot support generic functions, as they do not actually have a single defined symbol.
+
+cbindgen sadly cannot ever support anonymous tuples `(A, B, ...)`, as there is no way to guarantee their layout. You must use a tuple struct.
+
+cbindgen also cannot support wide pointers like `&dyn Trait` or `&[T]`, as their layout and ABI is not guaranteed. In the case of slices you can at least decompose them into a pointer and length, and reconstruct them with `slice::from_raw_parts`.
+
+If cbindgen determines that a type is zero-sized, it will erase all references to that type (so fields of that type simply won't be emitted). This won't work if that type appears as a function argument because C, C++, and Rust all have different definitions of what it means for a type to be empty.
+
+Don't use the `[u64; 0]` trick to over-align a struct, we don't support this.
+
+cbindgen contains the following hardcoded mappings (again completely ignoring namespacing, literally just looking at the name of the type):
+
+
+
+
+## std types
+
+* bool => bool
+* char => uint32_t
+* u8 => uint8_t
+* u16 => uint16_t
+* u32 => uint32_t
+* u64 => uint64_t
+* usize => uintptr_t
+* i8 => int8_t
+* i16 => int16_t
+* i32 => int32_t
+* i64 => int64_t
+* isize => intptr_t
+* f32 => float
+* f64 => double
+* VaList => va_list
+* RawFd => int
+* PhantomData => *evaporates*, can only appear as the field of a type
+* PhantomPinned => *evaporates*, can only appear as the field of a type  
+* () => *evaporates*, can only appear as the field of a type
+* MaybeUninit<T>, ManuallyDrop<T>, and Pin<T> => T
+
+
+
+
+## libc types
+
+* c_void => void
+* c_char => char
+* c_schar => signed char
+* c_uchar => unsigned char
+* c_float => float
+* c_double => double
+* c_short => short
+* c_int => int
+* c_long => long
+* c_longlong => long long
+* c_ushort => unsigned short
+* c_uint => unsigned int
+* c_ulong => unsigned long
+* c_ulonglong => unsigned long long
+
+
+
+## stdint types
+
+* uint8_t => uint8_t
+* uint16_t => uint16_t
+* uint32_t => uint32_t
+* uint64_t => uint64_t
+* uintptr_t => uintptr_t
+* size_t => size_t
+* int8_t => int8_t
+* int16_t => int16_t
+* int32_t => int32_t
+* int64_t => int64_t
+* intptr_t => intptr_t
+* ssize_t => ssize_t
+* ptrdiff_t => ptrdiff_t
+
+
+
+
+
+
+# Configuring Your Header
+
+cbindgen supports several different options for configuring the output of your header, including target language, styling, mangling, prefixing, includes, and defines.
+
+
+
+
+
+## Defines and Cfgs
+
+As cbindgen spiders through your crate, it will make note of all the cfgs it found on the path to every item. If it finds multiple declarations that share a single name but have different cfgs, it will then try to emit every version it found wrapped in defines that correspond to those cfgs. In this way platform-specific APIs or representations can be properly supported.
+
+However cbindgen has no way of knowing how you want to map those cfgs to defines. You will need to use the `[defines]` section in your cbindgen.toml to specify all the different mappings. It natively understands concepts like any() and all(), so you only need to tell it how you want to translate base concepts like `target_os = "freebsd"` or `feature = "serde"`.
+
+Note that because cbindgen just parses the source of your crate, you mostly don't need to worry about what crate features or what platform you're targetting. Every possible configuration should be visible to the parser. Our primitive mappings should also be completely platform agnostic (i32 is int32_t regardless of your target).
+
+While modules within a crate form a tree with uniquely defined paths to each item, and therefore uniquely defined cfgs for those items, dependencies do not. If you depend on a crate in multiple ways, and those ways produce different cfgs, one of them will be arbitrarily chosen for any types found in that crate.
+
+
+
+
+## Annotations
+
+While output configuration is primarily done through the cbindgen.toml, in some cases you need to manually override your global settings. In those cases you can add inline annotations to your types, which are doc comments that start with `cbindgen:`. Here's an example of using annotations to rename a struct's fields and opt into overloading `operator==`:
+
+```rust
+/// cbindgen:field-names=[x, y]
+/// cbindgen:derive-eq
+#[repr(C)]
+pub struct Point(pub f32, pub f32);
+```
+
+An annotation may be a bool, string (no quotes), or list of strings. If just the annotation's name is provided, `=true` is assumed. The annotation parser is currently fairly naive and lacks any capacity for escaping, so don't try to make any strings with `=`, `,`, `[` or `]`.
+
+Most annotations are just local overrides for identical settings in the cbindgen.toml, but a few are unique because they don't make sense in a global context. The set of supported annotation are as follows:
+
+### Ignore annotation
+
+cbindgen will automatically ignore any `#[test]` or `#[cfg(test)]` item it
+finds. You can manually ignore other stuff with the `ignore` annotation
+attribute:
+
+```rust
+pub mod my_interesting_mod;
+
+/// cbindgen:ignore
+pub mod my_uninteresting_mod; // This won't be scanned by cbindgen.
+```
+
+### Struct Annotations
+
+* field-names=\[field1, field2, ...\] -- sets the names of all the fields in the output struct. These names will be output verbatim, and are not eligible for renaming.
+
+The rest are just local overrides for the same options found in the cbindgen.toml:
+
+* rename-all=RenameRule
+* derive-constructor
+* derive-eq
+* derive-neq
+* derive-lt
+* derive-lte
+* derive-gt
+* derive-gte
+* {eq,neq,lt,lte,gt,gte}-attributes: Takes a single identifier which will be
+  emitted before the signature of the auto-generated `operator==` / `operator!=`
+  / etc(if any). The idea is for this to be used to annotate the operator with
+  attributes, for example:
+
+```rust
+/// cbindgen:eq-attributes=MY_ATTRIBUTES
+#[repr(C)]
+pub struct Foo { .. }
+```
+
+Will generate something like:
+
+```
+  MY_ATTRIBUTES bool operator==(const Foo& other) const {
+    ...
+  }
+```
+
+Combined with something like:
+
+```
+#define MY_ATTRIBUTES [[nodiscard]]
+```
+
+for example.
+
+### Enum Annotations
+
+* enum-trailing-values=\[variant1, variant2, ...\] -- add the following fieldless enum variants to the end of the enum's definition. These variant names *will* have the enum's renaming rules applied.
+
+WARNING: if any of these values are ever passed into Rust, behaviour will be Undefined. Rust does not know about them, and will assume they cannot happen.
+
+The rest are just local overrides for the same options found in the cbindgen.toml:
+
+* rename-all=RenameRule
+* add-sentinel
+* derive-helper-methods
+* derive-const-casts
+* derive-mut-casts
+* derive-tagged-enum-destructor
+* derive-tagged-enum-copy-constructor
+* enum-class
+* prefix-with-name
+* private-default-tagged-enum-constructor
+* {destructor,copy-constructor,copy-assignment}-attributes: See the description
+  of the struct attributes, these do the same for the respective generated code.
+
+### Enum variant annotations
+
+These apply to both tagged and untagged enum _variants_.
+
+* variant-{constructor,const-cast,mut-cast,is}-attributes: See the description
+  of the struct attributes. These do the same for the respective functions.
+
+TODO: We should allow to override the `derive-{const,mut}-casts`, helper methods
+et al. with per-variant annotations, probably.
+
+### Union Annotations
+
+* field-names=\[field1, field2, ...\] -- sets the names of all the fields in the output union. These names will be output verbatim, and are not eligible for renaming.
+
+The rest are just local overrides for the same options found in the cbindgen.toml:
+
+* rename-all=RenameRule
+
+
+
+### Function Annotations
+
+All function attributes are just local overrides for the same options found in the cbindgen.toml:
+
+* rename-all=RenameRule
+* prefix
+* postfix
+* ptrs-as-arrays=\[[ptr\_name1; array\_length1], [ptr\_name2; array\_length2], ...\] -- represents the pointer arguments of a function as arrays. Below how the mappings are performed:
+
+```
+arg: *const T --> const T arg[array_length]
+arg: *mut T ---> T arg[array_length]
+```
+
+If `array_length` is not specified:
+
+```
+arg: *const T --> const T arg[]
+arg: *mut T --> T arg[]
+```
+
+## Generating Swift Bindings
+
+In addition to parsing function names in C/C++ header files, the Swift compiler can make use of the `swift_name` attribute on functions to generate more idiomatic names for imported functions and methods.
+
+This attribute is commonly used in Objective-C/C/C++ via the `NS_SWIFT_NAME` and `CF_SWIFT_NAME` macros.
+
+Given configuration in the cbindgen.toml, `cbindgen` can generate these attributes for you by guessing an appropriate method signature based on the existing function name (and type, if it is a method in an `impl` block).
+
+This is controlled by the `swift_name_macro` option in the cbindgen.toml.
+
+## cbindgen.toml
+
+Most configuration happens through your cbindgen.toml file. Every value has a default (that is usually reasonable), so you can start with an empty cbindgen.toml and tweak it until you like the output you're getting.
+
+Note that many options defined here only apply for one of C or C++. Usually it's an option specifying whether we should try to make use of a feature in C++'s type system or generate a helper method.
+
+```toml
+# The language to output bindings in
+#
+# possible values: "C", "C++", "Cython"
+#
+# default: "C++"
+language = "C"
+
+
+
+
+# Options for wrapping the contents of the header:
+
+# An optional string of text to output at the beginning of the generated file
+# default: doesn't emit anything
+header = "/* Text to put at the beginning of the generated file. Probably a license. */"
+
+# An optional string of text to output at the end of the generated file
+# default: doesn't emit anything
+trailer = "/* Text to put at the end of the generated file */"
+
+# An optional name to use as an include guard
+# default: doesn't emit an include guard
+include_guard = "mozilla_wr_bindings_h"
+
+# Whether to add a `#pragma once` guard
+# default: doesn't emit a `#pragma once`
+pragma_once = true
+
+# An optional string of text to output between major sections of the generated
+# file as a warning against manual editing
+#
+# default: doesn't emit anything
+autogen_warning = "/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */"
+
+# Whether to include a comment with the version of cbindgen used to generate the file
+# default: false
+include_version = true
+
+# An optional namespace to output around the generated bindings
+# default: doesn't emit a namespace
+namespace = "ffi"
+
+# An optional list of namespaces to output around the generated bindings
+# default: []
+namespaces = ["mozilla", "wr"]
+
+# An optional list of namespaces to declare as using with "using namespace"
+# default: []
+using_namespaces = ["mozilla", "wr"]
+
+# A list of sys headers to #include (with angle brackets)
+# default: []
+sys_includes = ["stdio", "string"]
+
+# A list of headers to #include (with quotes)
+# default: []
+includes = ["my_great_lib.h"]
+
+# Whether cbindgen's default C/C++ standard imports should be suppressed. These
+# imports are included by default because our generated headers tend to require
+# them (e.g. for uint32_t). Currently, the generated imports are:
+#
+# * for C: <stdarg.h>, <stdbool.h>, <stdint.h>, <stdlib.h>, <uchar.h>
+#
+# * for C++: <cstdarg>, <cstdint>, <cstdlib>, <new>, <cassert> (depending on config)
+#
+# default: false
+no_includes = false
+
+# Whether to make a C header C++ compatible.
+# These will wrap generated functions into a `extern "C"` block, e.g.
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif // __cplusplus
+#
+# // Generated functions.
+#
+# #ifdef __cplusplus
+# } // extern "C"
+# #endif // __cplusplus
+#
+# If the language is not C this option won't have any effect.
+#
+# default: false
+cpp_compat = false
+
+# A list of lines to add verbatim after the includes block
+after_includes = "#define VERSION 1"
+
+
+
+# Code Style Options
+
+# The style to use for curly braces
+#
+# possible values: "SameLine", "NextLine"
+#
+# default: "SameLine"
+braces = "SameLine"
+
+# The desired length of a line to use when formatting lines
+# default: 100
+line_length = 80
+
+# The amount of spaces to indent by
+# default: 2
+tab_width = 3
+
+# Include doc comments from Rust as documentation
+documentation = true
+
+# How the generated documentation should be commented.
+#
+# possible values:
+# * "c": /* like this */
+# * "c99": // like this
+# * "c++": /// like this
+# * "doxy": like C, but with leading *'s on each line
+# * "auto": "c++" if that's the language, "doxy" otherwise
+#
+# default: "auto"
+documentation_style = "doxy"
+
+# How much of the documentation for each item is output.
+#
+# possible values:
+# * "short": Only the first line.
+# * "full": The full documentation.
+#
+# default: "full"
+documentation_length = "short"
+
+
+
+
+# Codegen Options
+
+# When generating a C header, the kind of declaration style to use for structs
+# or enums.
+#
+# possible values:
+# * "type": typedef struct { ... } MyType;
+# * "tag": struct MyType { ... };
+# * "both": typedef struct MyType { ... } MyType;
+#
+# default: "both"
+style = "both"
+
+# If this option is true `usize` and `isize` will be converted into `size_t` and `ptrdiff_t`
+# instead of `uintptr_t` and `intptr_t` respectively.
+usize_is_size_t = true
+
+# A list of substitutions for converting cfg's to ifdefs. cfgs which aren't
+# defined here will just be discarded.
+#
+# e.g.
+# `#[cfg(target = "freebsd")] ...`
+# becomes
+# `#if defined(DEFINE_FREEBSD) ... #endif`
+[defines]
+"target_os = freebsd" = "DEFINE_FREEBSD"
+"feature = serde" = "DEFINE_SERDE"
+
+
+
+
+
+[export]
+# A list of additional items to always include in the generated bindings if they're
+# found but otherwise don't appear to be used by the public API.
+#
+# default: []
+include = ["MyOrphanStruct", "MyGreatTypeRename"]
+
+# A list of items to not include in the generated bindings
+# default: []
+exclude = ["Bad"]
+
+# A prefix to add before the name of every item
+# default: no prefix is added
+prefix = "CAPI_"
+
+# Types of items that we'll generate. If empty, then all types of item are emitted.
+#
+# possible items: (TODO: explain these in detail)
+# * "constants":
+# * "globals":
+# * "enums":
+# * "structs":
+# * "unions":
+# * "typedefs":
+# * "opaque":
+# * "functions":
+#
+# default: []
+item_types = ["enums", "structs", "opaque", "functions"]
+
+# Whether applying rules in export.rename prevents export.prefix from applying.
+#
+# e.g. given this toml:
+#
+# [export]
+# prefix = "capi_"
+# [export.rename]
+# "MyType" = "my_cool_type"
+#
+# You get the following results:
+#
+# renaming_overrides_prefixing = true:
+# "MyType" => "my_cool_type"
+#
+# renaming_overrides_prefixing = false:
+# "MyType => capi_my_cool_type"
+#
+# default: false
+renaming_overrides_prefixing = true
+
+# Table of name conversions to apply to item names (lhs becomes rhs)
+[export.rename]
+"MyType" = "my_cool_type"
+"my_function" = "BetterFunctionName"
+
+# Table of things to prepend to the body of any struct, union, or enum that has the
+# given name. This can be used to add things like methods which don't change ABI,
+# mark fields private, etc
+[export.pre_body]
+"MyType" = """
+  MyType() = delete;
+private:
+"""
+
+# Table of things to append to the body of any struct, union, or enum that has the
+# given name. This can be used to add things like methods which don't change ABI.
+[export.body]
+"MyType" = """
+  void cppMethod() const;
+"""
+
+# Configuration for name mangling
+[export.mangle]
+# Whether the types should be renamed during mangling, for example
+# c_char -> CChar, etc.
+rename_types = "PascalCase"
+# Whether the underscores from the mangled name should be omitted.
+remove_underscores = false
+
+[layout]
+# A string that should come before the name of any type which has been marked
+# as `#[repr(packed)]`. For instance, "__attribute__((packed))" would be a
+# reasonable value if targeting gcc/clang. A more portable solution would
+# involve emitting the name of a macro which you define in a platform-specific
+# way. e.g. "PACKED"
+#
+# default: `#[repr(packed)]` types will be treated as opaque, since it would
+# be unsafe for C callers to use a incorrectly laid-out union.
+packed = "PACKED"
+
+# A string that should come before the name of any type which has been marked
+# as `#[repr(align(n))]`. This string must be a function-like macro which takes
+# a single argument (the requested alignment, `n`). For instance, a macro
+# `#define`d as `ALIGNED(n)` in `header` which translates to
+# `__attribute__((aligned(n)))` would be a reasonable value if targeting
+# gcc/clang.
+#
+# default: `#[repr(align(n))]` types will be treated as opaque, since it
+# could be unsafe for C callers to use a incorrectly-aligned union.
+aligned_n = "ALIGNED"
+
+
+[fn]
+# An optional prefix to put before every function declaration
+# default: no prefix added
+prefix = "WR_START_FUNC"
+
+# An optional postfix to put after any function declaration
+# default: no postix added
+postfix = "WR_END_FUNC"
+
+# How to format function arguments
+#
+# possible values:
+# * "horizontal": place all arguments on the same line
+# * "vertical": place each argument on its own line
+# * "auto": only use vertical if horizontal would exceed line_length
+#
+# default: "auto"
+args = "horizontal"
+
+# An optional string that should prefix function declarations which have been
+# marked as `#[must_use]`. For instance, "__attribute__((warn_unused_result))"
+# would be a reasonable value if targeting gcc/clang. A more portable solution
+# would involve emitting the name of a macro which you define in a
+# platform-specific way. e.g. "MUST_USE_FUNC"
+# default: nothing is emitted for must_use functions
+must_use = "MUST_USE_FUNC"
+
+# An optional string that will be used in the attribute position for functions
+# that don't return (that return `!` in Rust).
+#
+# For instance, `__attribute__((noreturn))` would be a reasonable value if
+# targeting gcc/clang.
+no_return = "NO_RETURN"
+
+# An optional string that, if present, will be used to generate Swift function
+# and method signatures for generated functions, for example "CF_SWIFT_NAME".
+# If no such macro is available in your toolchain, you can define one using the
+# `header` option in cbindgen.toml
+# default: no swift_name function attributes are generated
+swift_name_macro = "CF_SWIFT_NAME"
+
+# A rule to use to rename function argument names. The renaming assumes the input
+# is the Rust standard snake_case, however it accepts all the different rename_args
+# inputs. This means many options here are no-ops or redundant.
+#
+# possible values (that actually do something):
+# * "CamelCase": my_arg => myArg
+# * "PascalCase": my_arg => MyArg
+# * "GeckoCase": my_arg => aMyArg
+# * "ScreamingSnakeCase": my_arg => MY_ARG
+# * "None": apply no renaming
+#
+# technically possible values (that shouldn't have a purpose here):
+# * "SnakeCase": apply no renaming
+# * "LowerCase": apply no renaming (actually applies to_lowercase, is this bug?)
+# * "UpperCase": same as ScreamingSnakeCase in this context
+# * "QualifiedScreamingSnakeCase" => same as ScreamingSnakeCase in this context
+#
+# default: "None"
+rename_args = "PascalCase"
+
+# This rule specifies the order in which functions will be sorted.
+#
+# "Name": sort by the name of the function
+# "None": keep order in which the functions have been parsed
+#
+# default: "None"
+sort_by = "Name"
+
+[struct]
+# A rule to use to rename struct field names. The renaming assumes the input is
+# the Rust standard snake_case, however it acccepts all the different rename_args
+# inputs. This means many options here are no-ops or redundant.
+#
+# possible values (that actually do something):
+# * "CamelCase": my_arg => myArg
+# * "PascalCase": my_arg => MyArg
+# * "GeckoCase": my_arg => mMyArg
+# * "ScreamingSnakeCase": my_arg => MY_ARG
+# * "None": apply no renaming
+#
+# technically possible values (that shouldn't have a purpose here):
+# * "SnakeCase": apply no renaming
+# * "LowerCase": apply no renaming (actually applies to_lowercase, is this bug?)
+# * "UpperCase": same as ScreamingSnakeCase in this context
+# * "QualifiedScreamingSnakeCase" => same as ScreamingSnakeCase in this context
+#
+# default: "None"
+rename_fields = "PascalCase"
+
+# An optional string that should come before the name of any struct which has been
+# marked as `#[must_use]`. For instance, "__attribute__((warn_unused))"
+# would be a reasonable value if targeting gcc/clang. A more portable solution
+# would involve emitting the name of a macro which you define in a
+# platform-specific way. e.g. "MUST_USE_STRUCT"
+#
+# default: nothing is emitted for must_use structs
+must_use = "MUST_USE_STRUCT"
+
+# Whether a Rust type with associated consts should emit those consts inside the
+# type's body. Otherwise they will be emitted trailing and with the type's name
+# prefixed. This does nothing if the target is C, or if
+# [const]allow_static_const = false
+#
+# default: false
+# associated_constants_in_body: false
+
+# Whether to derive a simple constructor that takes a value for every field.
+# default: false
+derive_constructor = true
+
+# Whether to derive an operator== for all structs
+# default: false
+derive_eq = false
+
+# Whether to derive an operator!= for all structs
+# default: false
+derive_neq = false
+
+# Whether to derive an operator< for all structs
+# default: false
+derive_lt = false
+
+# Whether to derive an operator<= for all structs
+# default: false
+derive_lte = false
+
+# Whether to derive an operator> for all structs
+# default: false
+derive_gt = false
+
+# Whether to derive an operator>= for all structs
+# default: false
+derive_gte = false
+
+
+
+
+
+[enum]
+# A rule to use to rename enum variants, and the names of any fields those
+# variants have. This should probably be split up into two separate options, but
+# for now, they're the same! See the documentation for `[struct]rename_fields`
+# for how this applies to fields. Renaming of the variant assumes that the input
+# is the Rust standard PascalCase. In the case of QualifiedScreamingSnakeCase,
+# it also assumed that the enum's name is PascalCase.
+#
+# possible values (that actually do something):
+# * "CamelCase": MyVariant => myVariant
+# * "SnakeCase": MyVariant => my_variant
+# * "ScreamingSnakeCase": MyVariant => MY_VARIANT
+# * "QualifiedScreamingSnakeCase": MyVariant => ENUM_NAME_MY_VARIANT
+# * "LowerCase": MyVariant => myvariant
+# * "UpperCase": MyVariant => MYVARIANT
+# * "None": apply no renaming
+#
+# technically possible values (that shouldn't have a purpose for the variants):
+# * "PascalCase": apply no renaming
+# * "GeckoCase": apply no renaming
+#
+# default: "None"
+rename_variants = "None"
+
+# Whether an extra "sentinel" enum variant should be added to all generated enums.
+# Firefox uses this for their IPC serialization library.
+#
+# WARNING: if the sentinel is ever passed into Rust, behaviour will be Undefined.
+# Rust does not know about this value, and will assume it cannot happen.
+#
+# default: false
+add_sentinel = false
+
+# Whether enum variant names should be prefixed with the name of the enum.
+# default: false
+prefix_with_name = false
+
+# Whether to emit enums using "enum class" when targeting C++.
+# default: true
+enum_class = true
+
+# Whether to generate static `::MyVariant(..)` constructors and `bool IsMyVariant()`
+# methods for enums with fields.
+#
+# default: false
+derive_helper_methods = false
+
+# Whether to generate `const MyVariant& AsMyVariant() const` methods for enums with fields.
+# default: false
+derive_const_casts = false
+
+# Whether to generate `MyVariant& AsMyVariant()` methods for enums with fields
+# default: false
+derive_mut_casts = false
+
+# The name of the macro/function to use for asserting `IsMyVariant()` in the body of
+# derived `AsMyVariant()` cast methods.
+#
+# default: "assert" (but also causes `<cassert>` to be included by default)
+cast_assert_name = "MOZ_RELEASE_ASSERT"
+
+# An optional string that should come before the name of any enum which has been
+# marked as `#[must_use]`. For instance, "__attribute__((warn_unused))"
+# would be a reasonable value if targeting gcc/clang. A more portable solution
+# would involve emitting the name of a macro which you define in a
+# platform-specific way. e.g. "MUST_USE_ENUM"
+#
+# Note that this refers to the *output* type. That means this will not apply to an enum
+# with fields, as it will be emitted as a struct. `[struct]must_use` will apply there.
+#
+# default: nothing is emitted for must_use enums
+must_use = "MUST_USE_ENUM"
+
+# Whether enums with fields should generate destructors. This exists so that generic
+# enums can be properly instantiated with payloads that are C++ types with
+# destructors. This isn't necessary for structs because C++ has rules to
+# automatically derive the correct constructors and destructors for those types.
+#
+# Care should be taken with this option, as Rust and C++ cannot
+# properly interoperate with eachother's notions of destructors. Also, this may
+# change the ABI for the type. Either your destructor-full enums must live
+# exclusively within C++, or they must only be passed by-reference between
+# C++ and Rust.
+#
+# default: false
+derive_tagged_enum_destructor = false
+
+# Whether enums with fields should generate copy-constructor. See the discussion on
+# derive_tagged_enum_destructor for why this is both useful and very dangerous.
+#
+# default: false
+derive_tagged_enum_copy_constructor = false
+# Whether enums with fields should generate copy-assignment operators.
+#
+# This depends on also deriving copy-constructors, and it is highly encouraged
+# for this to be set to true.
+#
+# default: false
+derive_tagged_enum_copy_assignment = false
+
+# Whether enums with fields should generate an empty, private destructor.
+# This allows the auto-generated constructor functions to compile, if there are
+# non-trivially constructible members. This falls in the same family of
+# dangerousness as `derive_tagged_enum_copy_constructor` and co.
+#
+# default: false
+private_default_tagged_enum_constructor = false
+
+
+
+
+
+[const]
+# Whether a generated constant can be a static const in C++ mode. I have no
+# idea why you would turn this off.
+#
+# default: true
+allow_static_const = true
+
+# Whether a generated constant can be constexpr in C++ mode.
+#
+# default: true
+allow_constexpr = false
+
+# This rule specifies the order in which constants will be sorted.
+#
+# "Name": sort by the name of the constant
+# "None": keep order in which the constants have been parsed
+#
+# default: "None"
+sort_by = "Name"
+
+
+
+
+[macro_expansion]
+# Whether bindings should be generated for instances of the bitflags! macro.
+# default: false
+bitflags = true
+
+
+
+
+
+
+# Options for how your Rust library should be parsed
+
+[parse]
+# Whether to parse dependent crates and include their types in the output
+# default: false
+parse_deps = true
+
+# A white list of crate names that are allowed to be parsed. If this is defined,
+# only crates found in this list will ever be parsed.
+#
+# default: there is no whitelist (NOTE: this is the opposite of [])
+include = ["webrender", "webrender_traits"]
+
+# A black list of crate names that are not allowed to be parsed.
+# default: []
+exclude = ["libc"]
+
+# Whether to use a new temporary target directory when running `rustc -Zunpretty=expanded`.
+# This may be required for some build processes.
+#
+# default: false
+clean = false
+
+# Which crates other than the top-level binding crate we should generate
+# bindings for.
+#
+# default: []
+extra_bindings = ["my_awesome_dep"]
+
+[parse.expand]
+# A list of crate names that should be run through `cargo expand` before
+# parsing to expand any macros. Note that if a crate is named here, it
+# will always be parsed, even if the blacklist/whitelist says it shouldn't be.
+#
+# default: []
+crates = ["euclid"]
+
+# If enabled,  use the `--all-features` option when expanding. Ignored when
+# `features` is set. For backwards-compatibility, this is forced on if
+# `expand = ["euclid"]` shorthand is used.
+#
+# default: false
+all_features = false
+
+# When `all_features` is disabled and this is also disabled, use the
+# `--no-default-features` option when expanding.
+#
+# default: true
+default_features = true
+
+# A list of feature names that should be used when running `cargo expand`. This
+# combines with `default_features` like in your `Cargo.toml`. Note that the features
+# listed here are features for the current crate being built, *not* the crates
+# being expanded. The crate's `Cargo.toml` must take care of enabling the
+# appropriate features in its dependencies
+#
+# default: []
+features = ["cbindgen"]
+
+[ptr]
+# An optional string to decorate all pointers that are
+# required to be non null. Nullability is inferred from the Rust type: `&T`,
+# `&mut T` and `NonNull<T>` all require a valid pointer value.
+non_null_attribute = "_Nonnull"
+
+# Options specific to Cython bindings.
+
+[cython]
+
+# Header specified in the top level `cdef extern from header:` declaration.
+#
+# default: *
+header = '"my_header.h"'
+
+# `from module cimport name1, name2` declarations added in the same place
+# where you'd get includes in C.
+[cython.cimports]
+module = ["name1", "name2"]
+```
+
+
+
+
+
+[reference]: https://doc.rust-lang.org/nightly/reference/type-layout.html#representations
+[really-tagged-unions]: https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md
+[section-cfgs]: #defines-and-cfgs
+[file-it]: https://github.com/eqrion/cbindgen/issues/new
diff --git a/cbindgen-0.24.5/internals.md b/cbindgen-0.24.5/internals.md
new file mode 100644
index 0000000..4ebf0ab
--- /dev/null
+++ b/cbindgen-0.24.5/internals.md
@@ -0,0 +1,30 @@
+## Overview
+
+`cbindgen` works in four phases:
+
+1. *Parsing* - Crate information is gathered from `cargo`, and `rust` source files are read using `syn`
+1. *Loading* - `syn` AST nodes are converted into an IR of `Item`s that loosely correspond to the C types that will be output
+1. *Transformation* - Several passes are run that transform the IR. Some examples:
+   - Generic `type` aliases are used to specialize the type they refer to
+   - Annotations are transferred from `type` aliases to the item they refer to
+   - `Option<&T>` is converted to `*const T`
+   - `Option<&mut T>` is converted to `*mut T`
+   - Generic paths in struct fields, union variants, and static globals are collected and used to generate monomorphs of the structs or unions they refer to
+   - The items are sorted by dependencies and type and unused items are filtered out
+1. *Writing* - The IR is pretty printed to a file or `stdout`
+
+## Process Flow
+
+The main interface for `cbindgen` is `bindgen::Builder` which accepts configuration options and either a crate directory to parse or a list of source files.
+
+If a list of source files is given, then `bindgen::Builder` will parse them using `parser::parse_src` which will use `syn` to parse a specific file. No `extern crate` items will be followed for dependencies, but `mod` items will be attempted to be followed.
+
+If a crate directory is given, then `bindgen::Builder` will use `cargo::Cargo` to load a dependency graph from `Cargo.toml`, `Cargo.lock`, and `cargo metadata`. Then `parser::parse_lib` will parse each crate, following `extern crate` items when `ParseConfig::parse_deps` is enabled and the crate is not in the whitelist or blacklist of crates. In addition `bindgen::Parser` may use `cargo expand` on a crate to expand macro definitions.
+
+Once the `syn` nodes are collected by either method, they are given to `bindgen::Parse` which will perform *Loading* by creating a `ir::Item` for each `syn` node as appropriate.
+
+`bindgen::Builder` will then convert the resulting `bindgen::Parse`'s into a `bindgen::Library` which is the driver of all of the *Transformation* passes.
+
+// TODO - Talk more about passes
+
+Then finally the `bindgen::Library` will create a `bindgen::Bindings` which contains the `ir::Item`'s that are ready to be written. The `bindgen::Bindings` can then be written to `stdout` or a specific file.
diff --git a/cbindgen-0.24.5/src/bindgen/bindings.rs b/cbindgen-0.24.5/src/bindgen/bindings.rs
new file mode 100644
index 0000000..a03b282
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/bindings.rs
@@ -0,0 +1,493 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::borrow::Cow;
+use std::cell::RefCell;
+use std::collections::HashMap;
+use std::fs;
+use std::fs::File;
+use std::io::{Read, Write};
+use std::path;
+use std::rc::Rc;
+
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::ir::{
+    Constant, Function, ItemContainer, ItemMap, Path as BindgenPath, Static, Struct, Typedef,
+};
+use crate::bindgen::writer::{Source, SourceWriter};
+
+/// A bindings header that can be written.
+pub struct Bindings {
+    pub config: Config,
+    /// The map from path to struct, used to lookup whether a given type is a
+    /// transparent struct. This is needed to generate code for constants.
+    struct_map: ItemMap<Struct>,
+    typedef_map: ItemMap<Typedef>,
+    struct_fileds_memo: RefCell<HashMap<BindgenPath, Rc<Vec<String>>>>,
+    globals: Vec<Static>,
+    constants: Vec<Constant>,
+    items: Vec<ItemContainer>,
+    functions: Vec<Function>,
+    /// Bindings are generated by a recursive call to cbindgen
+    /// and shouldn't do anything when written anywhere.
+    noop: bool,
+}
+
+#[derive(PartialEq, Eq)]
+enum NamespaceOperation {
+    Open,
+    Close,
+}
+
+impl Bindings {
+    #[allow(clippy::too_many_arguments)]
+    pub(crate) fn new(
+        config: Config,
+        struct_map: ItemMap<Struct>,
+        typedef_map: ItemMap<Typedef>,
+        constants: Vec<Constant>,
+        globals: Vec<Static>,
+        items: Vec<ItemContainer>,
+        functions: Vec<Function>,
+        noop: bool,
+    ) -> Bindings {
+        Bindings {
+            config,
+            struct_map,
+            typedef_map,
+            struct_fileds_memo: Default::default(),
+            globals,
+            constants,
+            items,
+            functions,
+            noop,
+        }
+    }
+
+    // FIXME(emilio): What to do when the configuration doesn't match?
+    pub fn struct_is_transparent(&self, path: &BindgenPath) -> bool {
+        let mut any = false;
+        self.struct_map.for_items(path, |s| any |= s.is_transparent);
+        any
+    }
+
+    /// Peels through typedefs to allow resolving structs.
+    fn resolved_struct_path<'a>(&self, path: &'a BindgenPath) -> Cow<'a, BindgenPath> {
+        use crate::bindgen::ir::Type;
+
+        let mut resolved_path = Cow::Borrowed(path);
+        loop {
+            let mut found = None;
+            self.typedef_map.for_items(&resolved_path, |item| {
+                if let Type::Path(ref p) = item.aliased {
+                    found = Some(p.path().clone());
+                }
+            });
+            resolved_path = match found {
+                Some(p) => Cow::Owned(p),
+                None => break,
+            }
+        }
+        resolved_path
+    }
+
+    pub fn struct_exists(&self, path: &BindgenPath) -> bool {
+        let mut any = false;
+        self.struct_map
+            .for_items(&self.resolved_struct_path(path), |_| any = true);
+        any
+    }
+
+    pub fn struct_field_names(&self, path: &BindgenPath) -> Rc<Vec<String>> {
+        let mut memos = self.struct_fileds_memo.borrow_mut();
+        if let Some(memo) = memos.get(path) {
+            return memo.clone();
+        }
+
+        let resolved_path = self.resolved_struct_path(path);
+
+        let mut fields = Vec::<String>::new();
+        self.struct_map.for_items(&resolved_path, |st| {
+            let mut pos: usize = 0;
+            for field in &st.fields {
+                if let Some(found_pos) = fields.iter().position(|v| *v == field.name) {
+                    pos = found_pos + 1;
+                } else {
+                    fields.insert(pos, field.name.clone());
+                    pos += 1;
+                }
+            }
+        });
+
+        let fields = Rc::new(fields);
+        memos.insert(path.clone(), fields.clone());
+        if let Cow::Owned(p) = resolved_path {
+            memos.insert(p, fields.clone());
+        }
+        fields
+    }
+
+    pub fn write_to_file<P: AsRef<path::Path>>(&self, path: P) -> bool {
+        if self.noop {
+            return false;
+        }
+
+        // Don't compare files if we've never written this file before
+        if !path.as_ref().is_file() {
+            if let Some(parent) = path::Path::new(path.as_ref()).parent() {
+                fs::create_dir_all(parent).unwrap();
+            }
+            self.write(File::create(path).unwrap());
+            return true;
+        }
+
+        let mut new_file_contents = Vec::new();
+        self.write(&mut new_file_contents);
+
+        let mut old_file_contents = Vec::new();
+        {
+            let mut old_file = File::open(&path).unwrap();
+            old_file.read_to_end(&mut old_file_contents).unwrap();
+        }
+
+        if old_file_contents != new_file_contents {
+            let mut new_file = File::create(&path).unwrap();
+            new_file.write_all(&new_file_contents).unwrap();
+            true
+        } else {
+            false
+        }
+    }
+
+    pub fn write_headers<F: Write>(&self, out: &mut SourceWriter<F>) {
+        if self.noop {
+            return;
+        }
+
+        if let Some(ref f) = self.config.header {
+            out.new_line_if_not_start();
+            write!(out, "{}", f);
+            out.new_line();
+        }
+        if let Some(f) = self.config.include_guard() {
+            out.new_line_if_not_start();
+            write!(out, "#ifndef {}", f);
+            out.new_line();
+            write!(out, "#define {}", f);
+            out.new_line();
+        }
+        if self.config.pragma_once && self.config.language != Language::Cython {
+            out.new_line_if_not_start();
+            write!(out, "#pragma once");
+            out.new_line();
+        }
+        if self.config.include_version {
+            out.new_line_if_not_start();
+            write!(
+                out,
+                "/* Generated with cbindgen:{} */",
+                crate::bindgen::config::VERSION
+            );
+            out.new_line();
+        }
+        if let Some(ref f) = self.config.autogen_warning {
+            out.new_line_if_not_start();
+            write!(out, "{}", f);
+            out.new_line();
+        }
+
+        if self.config.no_includes
+            && self.config.sys_includes().is_empty()
+            && self.config.includes().is_empty()
+            && (self.config.cython.cimports.is_empty() || self.config.language != Language::Cython)
+            && self.config.after_includes.is_none()
+        {
+            return;
+        }
+
+        out.new_line_if_not_start();
+
+        if !self.config.no_includes {
+            match self.config.language {
+                Language::C => {
+                    out.write("#include <stdarg.h>");
+                    out.new_line();
+                    out.write("#include <stdbool.h>");
+                    out.new_line();
+                    if self.config.usize_is_size_t {
+                        out.write("#include <stddef.h>");
+                        out.new_line();
+                    }
+                    out.write("#include <stdint.h>");
+                    out.new_line();
+                    out.write("#include <stdlib.h>");
+                    out.new_line();
+                }
+                Language::Cxx => {
+                    out.write("#include <cstdarg>");
+                    out.new_line();
+                    if self.config.usize_is_size_t {
+                        out.write("#include <cstddef>");
+                        out.new_line();
+                    }
+                    out.write("#include <cstdint>");
+                    out.new_line();
+                    out.write("#include <cstdlib>");
+                    out.new_line();
+                    out.write("#include <ostream>");
+                    out.new_line();
+                    out.write("#include <new>");
+                    out.new_line();
+                    if self.config.enumeration.cast_assert_name.is_none()
+                        && (self.config.enumeration.derive_mut_casts
+                            || self.config.enumeration.derive_const_casts)
+                    {
+                        out.write("#include <cassert>");
+                        out.new_line();
+                    }
+                }
+                Language::Cython => {
+                    out.write(
+                        "from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t",
+                    );
+                    out.new_line();
+                    out.write(
+                        "from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t",
+                    );
+                    out.new_line();
+                    out.write("cdef extern from *");
+                    out.open_brace();
+                    out.write("ctypedef bint bool");
+                    out.new_line();
+                    out.write("ctypedef struct va_list");
+                    out.new_line();
+                    out.close_brace(false);
+                }
+            }
+        }
+
+        for include in self.config.sys_includes() {
+            write!(out, "#include <{}>", include);
+            out.new_line();
+        }
+
+        for include in self.config.includes() {
+            write!(out, "#include \"{}\"", include);
+            out.new_line();
+        }
+
+        if self.config.language == Language::Cython {
+            for (module, names) in &self.config.cython.cimports {
+                write!(out, "from {} cimport {}", module, names.join(", "));
+                out.new_line();
+            }
+        }
+
+        if let Some(ref line) = self.config.after_includes {
+            write!(out, "{}", line);
+            out.new_line();
+        }
+    }
+
+    pub fn write<F: Write>(&self, file: F) {
+        if self.noop {
+            return;
+        }
+
+        let mut out = SourceWriter::new(file, self);
+
+        self.write_headers(&mut out);
+
+        self.open_namespaces(&mut out);
+
+        for constant in &self.constants {
+            if constant.uses_only_primitive_types() {
+                out.new_line_if_not_start();
+                constant.write(&self.config, &mut out, None);
+                out.new_line();
+            }
+        }
+
+        for item in &self.items {
+            if item
+                .deref()
+                .annotations()
+                .bool("no-export")
+                .unwrap_or(false)
+            {
+                continue;
+            }
+
+            out.new_line_if_not_start();
+            match *item {
+                ItemContainer::Constant(..) => unreachable!(),
+                ItemContainer::Static(..) => unreachable!(),
+                ItemContainer::Enum(ref x) => x.write(&self.config, &mut out),
+                ItemContainer::Struct(ref x) => x.write(&self.config, &mut out),
+                ItemContainer::Union(ref x) => x.write(&self.config, &mut out),
+                ItemContainer::OpaqueItem(ref x) => x.write(&self.config, &mut out),
+                ItemContainer::Typedef(ref x) => x.write(&self.config, &mut out),
+            }
+            out.new_line();
+        }
+
+        for constant in &self.constants {
+            if !constant.uses_only_primitive_types() {
+                out.new_line_if_not_start();
+                constant.write(&self.config, &mut out, None);
+                out.new_line();
+            }
+        }
+
+        if !self.functions.is_empty() || !self.globals.is_empty() {
+            if self.config.cpp_compatible_c() {
+                out.new_line_if_not_start();
+                out.write("#ifdef __cplusplus");
+            }
+
+            if self.config.language == Language::Cxx {
+                if let Some(ref using_namespaces) = self.config.using_namespaces {
+                    for namespace in using_namespaces {
+                        out.new_line();
+                        write!(out, "using namespace {};", namespace);
+                    }
+                    out.new_line();
+                }
+            }
+
+            if self.config.language == Language::Cxx || self.config.cpp_compatible_c() {
+                out.new_line();
+                out.write("extern \"C\" {");
+                out.new_line();
+            }
+
+            if self.config.cpp_compatible_c() {
+                out.write("#endif // __cplusplus");
+                out.new_line();
+            }
+
+            for global in &self.globals {
+                out.new_line_if_not_start();
+                global.write(&self.config, &mut out);
+                out.new_line();
+            }
+
+            for function in &self.functions {
+                out.new_line_if_not_start();
+                function.write(&self.config, &mut out);
+                out.new_line();
+            }
+
+            if self.config.cpp_compatible_c() {
+                out.new_line();
+                out.write("#ifdef __cplusplus");
+            }
+
+            if self.config.language == Language::Cxx || self.config.cpp_compatible_c() {
+                out.new_line();
+                out.write("} // extern \"C\"");
+                out.new_line();
+            }
+
+            if self.config.cpp_compatible_c() {
+                out.write("#endif // __cplusplus");
+                out.new_line();
+            }
+        }
+
+        if self.config.language == Language::Cython
+            && self.globals.is_empty()
+            && self.constants.is_empty()
+            && self.items.is_empty()
+            && self.functions.is_empty()
+        {
+            out.write("pass");
+        }
+
+        self.close_namespaces(&mut out);
+
+        if let Some(f) = self.config.include_guard() {
+            out.new_line_if_not_start();
+            if self.config.language == Language::C {
+                write!(out, "#endif /* {} */", f);
+            } else {
+                write!(out, "#endif // {}", f);
+            }
+            out.new_line();
+        }
+        if let Some(ref f) = self.config.trailer {
+            out.new_line_if_not_start();
+            write!(out, "{}", f);
+            if !f.ends_with('\n') {
+                out.new_line();
+            }
+        }
+    }
+
+    fn all_namespaces(&self) -> Vec<&str> {
+        if self.config.language != Language::Cxx && !self.config.cpp_compatible_c() {
+            return vec![];
+        }
+        let mut ret = vec![];
+        if let Some(ref namespace) = self.config.namespace {
+            ret.push(&**namespace);
+        }
+        if let Some(ref namespaces) = self.config.namespaces {
+            for namespace in namespaces {
+                ret.push(&**namespace);
+            }
+        }
+        ret
+    }
+
+    fn open_close_namespaces<F: Write>(&self, op: NamespaceOperation, out: &mut SourceWriter<F>) {
+        if self.config.language == Language::Cython {
+            if op == NamespaceOperation::Open {
+                out.new_line();
+                let header = self.config.cython.header.as_deref().unwrap_or("*");
+                write!(out, "cdef extern from {}", header);
+                out.open_brace();
+            } else {
+                out.close_brace(false);
+            }
+            return;
+        }
+
+        let mut namespaces = self.all_namespaces();
+        if namespaces.is_empty() {
+            return;
+        }
+
+        if op == NamespaceOperation::Close {
+            namespaces.reverse();
+        }
+
+        if self.config.cpp_compatible_c() {
+            out.new_line_if_not_start();
+            out.write("#ifdef __cplusplus");
+        }
+
+        for namespace in namespaces {
+            out.new_line();
+            match op {
+                NamespaceOperation::Open => write!(out, "namespace {} {{", namespace),
+                NamespaceOperation::Close => write!(out, "}} // namespace {}", namespace),
+            }
+        }
+
+        out.new_line();
+        if self.config.cpp_compatible_c() {
+            out.write("#endif // __cplusplus");
+            out.new_line();
+        }
+    }
+
+    pub(crate) fn open_namespaces<F: Write>(&self, out: &mut SourceWriter<F>) {
+        self.open_close_namespaces(NamespaceOperation::Open, out);
+    }
+
+    pub(crate) fn close_namespaces<F: Write>(&self, out: &mut SourceWriter<F>) {
+        self.open_close_namespaces(NamespaceOperation::Close, out);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/bitflags.rs b/cbindgen-0.24.5/src/bindgen/bitflags.rs
new file mode 100644
index 0000000..2841294
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/bitflags.rs
@@ -0,0 +1,143 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use proc_macro2::TokenStream;
+use syn::parse::{Parse, ParseStream, Parser, Result as ParseResult};
+
+// $(#[$outer:meta])*
+// ($($vis:tt)*) $BitFlags:ident: $T:ty {
+//     $(
+//         $(#[$inner:ident $($args:tt)*])*
+//         const $Flag:ident = $value:expr;
+//     )+
+// }
+#[derive(Debug)]
+pub struct Bitflags {
+    attrs: Vec<syn::Attribute>,
+    vis: syn::Visibility,
+    #[allow(dead_code)]
+    struct_token: Token![struct],
+    name: syn::Ident,
+    #[allow(dead_code)]
+    colon_token: Token![:],
+    repr: syn::Type,
+    flags: Flags,
+}
+
+impl Bitflags {
+    pub fn expand(&self) -> (syn::ItemStruct, syn::ItemImpl) {
+        let Bitflags {
+            ref attrs,
+            ref vis,
+            ref name,
+            ref repr,
+            ref flags,
+            ..
+        } = *self;
+
+        let struct_ = parse_quote! {
+            /// cbindgen:internal-derive-bitflags=true
+            #(#attrs)*
+            #vis struct #name {
+                bits: #repr,
+            }
+        };
+
+        let consts = flags.expand(name, repr);
+        let impl_ = parse_quote! {
+            impl #name {
+                #consts
+            }
+        };
+
+        (struct_, impl_)
+    }
+}
+
+impl Parse for Bitflags {
+    fn parse(input: ParseStream) -> ParseResult<Self> {
+        Ok(Self {
+            attrs: input.call(syn::Attribute::parse_outer)?,
+            vis: input.parse()?,
+            struct_token: input.parse()?,
+            name: input.parse()?,
+            colon_token: input.parse()?,
+            repr: input.parse()?,
+            flags: input.parse()?,
+        })
+    }
+}
+
+// $(#[$inner:ident $($args:tt)*])*
+// const $Flag:ident = $value:expr;
+#[derive(Debug)]
+struct Flag {
+    attrs: Vec<syn::Attribute>,
+    #[allow(dead_code)]
+    const_token: Token![const],
+    name: syn::Ident,
+    #[allow(dead_code)]
+    equals_token: Token![=],
+    value: syn::Expr,
+    #[allow(dead_code)]
+    semicolon_token: Token![;],
+}
+
+impl Flag {
+    fn expand(&self, struct_name: &syn::Ident, repr: &syn::Type) -> TokenStream {
+        let Flag {
+            ref attrs,
+            ref name,
+            ref value,
+            ..
+        } = *self;
+        quote! {
+            #(#attrs)*
+            pub const #name : #struct_name = #struct_name { bits: (#value) as #repr };
+        }
+    }
+}
+
+impl Parse for Flag {
+    fn parse(input: ParseStream) -> ParseResult<Self> {
+        Ok(Self {
+            attrs: input.call(syn::Attribute::parse_outer)?,
+            const_token: input.parse()?,
+            name: input.parse()?,
+            equals_token: input.parse()?,
+            value: input.parse()?,
+            semicolon_token: input.parse()?,
+        })
+    }
+}
+
+#[derive(Debug)]
+struct Flags(Vec<Flag>);
+
+impl Parse for Flags {
+    fn parse(input: ParseStream) -> ParseResult<Self> {
+        let content;
+        let _ = braced!(content in input);
+        let mut flags = vec![];
+        while !content.is_empty() {
+            flags.push(content.parse()?);
+        }
+        Ok(Flags(flags))
+    }
+}
+
+impl Flags {
+    fn expand(&self, struct_name: &syn::Ident, repr: &syn::Type) -> TokenStream {
+        let mut ts = quote! {};
+        for flag in &self.0 {
+            ts.extend(flag.expand(struct_name, repr));
+        }
+        ts
+    }
+}
+
+pub fn parse(tokens: TokenStream) -> ParseResult<Bitflags> {
+    let parser = Bitflags::parse;
+    parser.parse2(tokens)
+}
diff --git a/cbindgen-0.24.5/src/bindgen/builder.rs b/cbindgen-0.24.5/src/bindgen/builder.rs
new file mode 100644
index 0000000..17d4ad1
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/builder.rs
@@ -0,0 +1,420 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::path;
+
+use crate::bindgen::bindings::Bindings;
+use crate::bindgen::cargo::Cargo;
+use crate::bindgen::config::{Braces, Config, Language, Profile, Style};
+use crate::bindgen::error::Error;
+use crate::bindgen::library::Library;
+use crate::bindgen::parser::{self, Parse};
+
+/// A builder for generating a bindings header.
+#[derive(Debug, Clone)]
+pub struct Builder {
+    config: Config,
+    srcs: Vec<path::PathBuf>,
+    lib: Option<(path::PathBuf, Option<String>)>,
+    lib_cargo: Option<Cargo>,
+    std_types: bool,
+    lockfile: Option<path::PathBuf>,
+}
+
+impl Builder {
+    #[allow(clippy::new_without_default)]
+    pub fn new() -> Builder {
+        Builder {
+            config: Config::default(),
+            srcs: Vec::new(),
+            lib: None,
+            lib_cargo: None,
+            std_types: true,
+            lockfile: None,
+        }
+    }
+
+    #[allow(unused)]
+    pub fn with_header<S: AsRef<str>>(mut self, header: S) -> Builder {
+        self.config.header = Some(String::from(header.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_no_includes(mut self) -> Builder {
+        self.config.no_includes = true;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_include<S: AsRef<str>>(mut self, include: S) -> Builder {
+        self.config.includes.push(String::from(include.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_sys_include<S: AsRef<str>>(mut self, include: S) -> Builder {
+        self.config
+            .sys_includes
+            .push(String::from(include.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_after_include<S: AsRef<str>>(mut self, line: S) -> Builder {
+        self.config.after_includes = Some(String::from(line.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_trailer<S: AsRef<str>>(mut self, trailer: S) -> Builder {
+        self.config.trailer = Some(String::from(trailer.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_include_guard<S: AsRef<str>>(mut self, include_guard: S) -> Builder {
+        self.config.include_guard = Some(String::from(include_guard.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_pragma_once(mut self, pragma_once: bool) -> Builder {
+        self.config.pragma_once = pragma_once;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_autogen_warning<S: AsRef<str>>(mut self, autogen_warning: S) -> Builder {
+        self.config.autogen_warning = Some(String::from(autogen_warning.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_include_version(mut self, include_version: bool) -> Builder {
+        self.config.include_version = include_version;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_namespace<S: AsRef<str>>(mut self, namespace: S) -> Builder {
+        self.config.namespace = Some(String::from(namespace.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_namespaces<S: AsRef<str>>(mut self, namespaces: &[S]) -> Builder {
+        self.config.namespaces = Some(
+            namespaces
+                .iter()
+                .map(|x| String::from(x.as_ref()))
+                .collect(),
+        );
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_using_namespaces<S: AsRef<str>>(mut self, namespaces: &[S]) -> Builder {
+        self.config.using_namespaces = Some(
+            namespaces
+                .iter()
+                .map(|x| String::from(x.as_ref()))
+                .collect(),
+        );
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_braces(mut self, braces: Braces) -> Builder {
+        self.config.braces = braces;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_line_length(mut self, line_length: usize) -> Builder {
+        self.config.line_length = line_length;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_tab_width(mut self, tab_width: usize) -> Builder {
+        self.config.tab_width = tab_width;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_language(mut self, language: Language) -> Builder {
+        self.config.language = language;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_cpp_compat(mut self, cpp_compat: bool) -> Builder {
+        self.config.cpp_compat = cpp_compat;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_style(mut self, style: Style) -> Builder {
+        self.config.style = style;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn include_item<S: AsRef<str>>(mut self, item_name: S) -> Builder {
+        self.config
+            .export
+            .include
+            .push(String::from(item_name.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn exclude_item<S: AsRef<str>>(mut self, item_name: S) -> Builder {
+        self.config
+            .export
+            .exclude
+            .push(String::from(item_name.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn rename_item<S: AsRef<str>>(mut self, from: S, to: S) -> Builder {
+        self.config
+            .export
+            .rename
+            .insert(String::from(from.as_ref()), String::from(to.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_item_prefix<S: AsRef<str>>(mut self, prefix: S) -> Builder {
+        self.config.export.prefix = Some(String::from(prefix.as_ref()));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_deps(mut self, parse_deps: bool) -> Builder {
+        self.config.parse.parse_deps = parse_deps;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_include<S: AsRef<str>>(mut self, include: &[S]) -> Builder {
+        self.config.parse.include =
+            Some(include.iter().map(|x| String::from(x.as_ref())).collect());
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_exclude<S: AsRef<str>>(mut self, exclude: &[S]) -> Builder {
+        self.config.parse.exclude = exclude.iter().map(|x| String::from(x.as_ref())).collect();
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_expand<S: AsRef<str>>(mut self, expand: &[S]) -> Builder {
+        self.config.parse.expand.crates = expand.iter().map(|x| String::from(x.as_ref())).collect();
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_expand_all_features(mut self, expand_all_features: bool) -> Builder {
+        self.config.parse.expand.all_features = expand_all_features;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_expand_default_features(mut self, expand_default_features: bool) -> Builder {
+        self.config.parse.expand.default_features = expand_default_features;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_expand_features<S: AsRef<str>>(mut self, expand_features: &[S]) -> Builder {
+        self.config.parse.expand.features = Some(
+            expand_features
+                .iter()
+                .map(|x| String::from(x.as_ref()))
+                .collect(),
+        );
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_expand_profile(mut self, profile: Profile) -> Builder {
+        self.config.parse.expand.profile = profile;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_parse_extra_bindings<S: AsRef<str>>(mut self, extra_bindings: &[S]) -> Builder {
+        self.config.parse.extra_bindings = extra_bindings
+            .iter()
+            .map(|x| String::from(x.as_ref()))
+            .collect();
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_only_target_dependencies(mut self, only_target_dependencies: bool) -> Builder {
+        self.config.only_target_dependencies = only_target_dependencies;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_documentation(mut self, documentation: bool) -> Builder {
+        self.config.documentation = documentation;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_target_os_define(mut self, platform: &str, preprocessor_define: &str) -> Builder {
+        self.config.defines.insert(
+            format!("target_os = {}", platform),
+            preprocessor_define.to_owned(),
+        );
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_define(mut self, key: &str, value: &str, preprocessor_define: &str) -> Builder {
+        self.config.defines.insert(
+            format!("{} = {}", key, value),
+            preprocessor_define.to_owned(),
+        );
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_config(mut self, config: Config) -> Builder {
+        self.config = config;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_std_types(mut self, std_types: bool) -> Builder {
+        self.std_types = std_types;
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_src<P: AsRef<path::Path>>(mut self, src: P) -> Builder {
+        self.srcs.push(src.as_ref().to_owned());
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_crate<P: AsRef<path::Path>>(mut self, lib_dir: P) -> Builder {
+        debug_assert!(self.lib.is_none());
+        debug_assert!(self.lib_cargo.is_none());
+        self.lib = Some((path::PathBuf::from(lib_dir.as_ref()), None));
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_crate_and_name<P: AsRef<path::Path>, S: AsRef<str>>(
+        mut self,
+        lib_dir: P,
+        binding_lib_name: S,
+    ) -> Builder {
+        debug_assert!(self.lib.is_none());
+        debug_assert!(self.lib_cargo.is_none());
+        self.lib = Some((
+            path::PathBuf::from(lib_dir.as_ref()),
+            Some(String::from(binding_lib_name.as_ref())),
+        ));
+        self
+    }
+
+    #[allow(unused)]
+    pub(crate) fn with_cargo(mut self, lib: Cargo) -> Builder {
+        debug_assert!(self.lib.is_none());
+        debug_assert!(self.lib_cargo.is_none());
+        self.lib_cargo = Some(lib);
+        self
+    }
+
+    #[allow(unused)]
+    pub fn with_lockfile<P: AsRef<path::Path>>(mut self, lockfile: P) -> Builder {
+        debug_assert!(self.lockfile.is_none());
+        debug_assert!(self.lib_cargo.is_none());
+        self.lockfile = Some(path::PathBuf::from(lockfile.as_ref()));
+        self
+    }
+
+    pub fn generate(self) -> Result<Bindings, Error> {
+        // If macro expansion is enabled, then cbindgen will attempt to build the crate
+        // and will run its build script which may run cbindgen again. That second run may start
+        // infinite recursion, or overwrite previously written files with bindings.
+        // So if we are called recursively, we are skipping the whole generation
+        // and produce "noop" bindings that won't be able to overwrite anything.
+        if std::env::var("_CBINDGEN_IS_RUNNING").is_ok() {
+            return Ok(Bindings::new(
+                self.config,
+                Default::default(),
+                Default::default(),
+                Default::default(),
+                Default::default(),
+                Default::default(),
+                Default::default(),
+                true,
+            ));
+        }
+
+        let mut result = Parse::new();
+
+        if self.std_types {
+            result.add_std_types();
+        }
+
+        for x in &self.srcs {
+            result.extend_with(&parser::parse_src(x, &self.config)?);
+        }
+
+        if let Some((lib_dir, binding_lib_name)) = self.lib.clone() {
+            let lockfile = self.lockfile.as_ref().and_then(|p| p.to_str());
+
+            let cargo = Cargo::load(
+                &lib_dir,
+                lockfile,
+                binding_lib_name.as_deref(),
+                self.config.parse.parse_deps,
+                self.config.parse.clean,
+                self.config.only_target_dependencies,
+                /* existing_metadata = */ None,
+            )?;
+
+            result.extend_with(&parser::parse_lib(cargo, &self.config)?);
+        } else if let Some(cargo) = self.lib_cargo.clone() {
+            result.extend_with(&parser::parse_lib(cargo, &self.config)?);
+        }
+
+        Library::new(
+            self.config,
+            result.constants,
+            result.globals,
+            result.enums,
+            result.structs,
+            result.unions,
+            result.opaque_items,
+            result.typedefs,
+            result.functions,
+        )
+        .generate()
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn with_style() {
+        assert_eq!(
+            Style::Tag,
+            Builder::new().with_style(Style::Tag).config.style
+        );
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/cargo/cargo.rs b/cbindgen-0.24.5/src/bindgen/cargo/cargo.rs
new file mode 100644
index 0000000..69cf938
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cargo/cargo.rs
@@ -0,0 +1,252 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::path::{Path, PathBuf};
+
+use crate::bindgen::cargo::cargo_expand;
+use crate::bindgen::cargo::cargo_lock::{self, Lock};
+pub(crate) use crate::bindgen::cargo::cargo_metadata::PackageRef;
+use crate::bindgen::cargo::cargo_metadata::{self, Metadata};
+use crate::bindgen::cargo::cargo_toml;
+use crate::bindgen::config::Profile;
+use crate::bindgen::error::Error;
+use crate::bindgen::ir::Cfg;
+
+/// Parse a dependency string used in Cargo.lock
+fn parse_dep_string(dep_string: &str) -> (&str, Option<&str>) {
+    let split: Vec<&str> = dep_string.split_whitespace().collect();
+
+    (split[0], split.get(1).cloned())
+}
+
+/// A collection of metadata for a library from cargo.
+#[derive(Clone, Debug)]
+pub(crate) struct Cargo {
+    manifest_path: PathBuf,
+    binding_crate_name: String,
+    lock: Option<Lock>,
+    metadata: Metadata,
+    clean: bool,
+}
+
+impl Cargo {
+    /// Gather metadata from cargo for a specific library and binding crate
+    /// name. If dependency finding isn't needed then Cargo.lock files don't
+    /// need to be parsed.
+    pub(crate) fn load(
+        crate_dir: &Path,
+        lock_file: Option<&str>,
+        binding_crate_name: Option<&str>,
+        use_cargo_lock: bool,
+        clean: bool,
+        only_target_dependencies: bool,
+        existing_metadata_file: Option<&Path>,
+    ) -> Result<Cargo, Error> {
+        let toml_path = crate_dir.join("Cargo.toml");
+        let metadata =
+            cargo_metadata::metadata(&toml_path, existing_metadata_file, only_target_dependencies)
+                .map_err(|x| Error::CargoMetadata(toml_path.to_str().unwrap().to_owned(), x))?;
+        let lock_path = lock_file
+            .map(PathBuf::from)
+            .unwrap_or_else(|| Path::new(&metadata.workspace_root).join("Cargo.lock"));
+
+        let lock = if use_cargo_lock {
+            match cargo_lock::lock(&lock_path) {
+                Ok(lock) => Some(lock),
+                Err(x) => {
+                    warn!("Couldn't load lock file {:?}: {:?}", lock_path, x);
+                    None
+                }
+            }
+        } else {
+            None
+        };
+
+        // Use the specified binding crate name or infer it from the manifest
+        let binding_crate_name = match binding_crate_name {
+            Some(s) => s.to_owned(),
+            None => {
+                let manifest = cargo_toml::manifest(&toml_path)
+                    .map_err(|x| Error::CargoToml(toml_path.to_str().unwrap().to_owned(), x))?;
+                manifest.package.name
+            }
+        };
+
+        Ok(Cargo {
+            manifest_path: toml_path,
+            binding_crate_name,
+            lock,
+            metadata,
+            clean,
+        })
+    }
+
+    pub(crate) fn binding_crate_name(&self) -> &str {
+        &self.binding_crate_name
+    }
+
+    pub(crate) fn binding_crate_ref(&self) -> PackageRef {
+        match self.find_pkg_ref(&self.binding_crate_name) {
+            Some(pkg_ref) => pkg_ref,
+            None => panic!(
+                "Unable to find {} for {:?}",
+                self.binding_crate_name, self.manifest_path
+            ),
+        }
+    }
+
+    pub(crate) fn dependencies(&self, package: &PackageRef) -> Vec<(PackageRef, Option<Cfg>)> {
+        let lock = match self.lock {
+            Some(ref lock) => lock,
+            None => return vec![],
+        };
+
+        let mut dependencies = None;
+
+        // Find the dependencies listing in the lockfile
+        if let Some(ref root) = lock.root {
+            // If the version is not on the lockfile then it shouldn't be
+            // ambiguous.
+            if root.name == package.name
+                && package
+                    .version
+                    .as_ref()
+                    .map_or(true, |v| *v == root.version)
+            {
+                dependencies = root.dependencies.as_ref();
+            }
+        }
+        if dependencies.is_none() {
+            if let Some(ref lock_packages) = lock.package {
+                for lock_package in lock_packages {
+                    if lock_package.name == package.name
+                        && package
+                            .version
+                            .as_ref()
+                            .map_or(true, |v| *v == lock_package.version)
+                    {
+                        dependencies = lock_package.dependencies.as_ref();
+                        break;
+                    }
+                }
+            }
+        }
+        if dependencies.is_none() {
+            return vec![];
+        }
+
+        dependencies
+            .unwrap()
+            .iter()
+            .map(|dep| {
+                let (dep_name, dep_version) = parse_dep_string(dep);
+
+                // If a version was not specified find the only package with the name of the dependency
+                let dep_version = dep_version.or_else(|| {
+                    let mut versions = self.metadata.packages.iter().filter_map(|package| {
+                        if package.name_and_version.name != dep_name {
+                            return None;
+                        }
+                        package.name_and_version.version.as_deref()
+                    });
+
+                    // If the iterator contains more items, meaning multiple versions of the same
+                    // package are present, warn! amd abort.
+                    let version = versions.next();
+                    if versions.next().is_none() {
+                        version
+                    } else {
+                        warn!("when looking for a version for package {}, multiple versions where found", dep_name);
+                        None
+                    }
+                });
+
+                // Try to find the cfgs in the Cargo.toml
+                let cfg = self
+                    .metadata
+                    .packages
+                    .get(package)
+                    .and_then(|meta_package| meta_package.dependencies.get(dep_name))
+                    .and_then(Cfg::load_metadata);
+
+                let package_ref = PackageRef {
+                    name: dep_name.to_owned(),
+                    version: dep_version.map(|v| v.to_owned()),
+                };
+
+                (package_ref, cfg)
+            })
+            .collect()
+    }
+
+    /// Finds the package reference in `cargo metadata` that has `package_name`
+    /// ignoring the version.
+    fn find_pkg_ref(&self, package_name: &str) -> Option<PackageRef> {
+        for package in &self.metadata.packages {
+            if package.name_and_version.name == package_name {
+                return Some(package.name_and_version.clone());
+            }
+        }
+        None
+    }
+
+    /// Finds the directory for a specified package reference.
+    #[allow(unused)]
+    pub(crate) fn find_crate_dir(&self, package: &PackageRef) -> Option<PathBuf> {
+        self.metadata
+            .packages
+            .get(package)
+            .and_then(|meta_package| {
+                Path::new(&meta_package.manifest_path)
+                    .parent()
+                    .map(|x| x.to_owned())
+            })
+    }
+
+    /// Finds `src/lib.rs` for a specified package reference.
+    pub(crate) fn find_crate_src(&self, package: &PackageRef) -> Option<PathBuf> {
+        let kind_lib = String::from("lib");
+        let kind_staticlib = String::from("staticlib");
+        let kind_rlib = String::from("rlib");
+        let kind_cdylib = String::from("cdylib");
+        let kind_dylib = String::from("dylib");
+
+        self.metadata
+            .packages
+            .get(package)
+            .and_then(|meta_package| {
+                for target in &meta_package.targets {
+                    if target.kind.contains(&kind_lib)
+                        || target.kind.contains(&kind_staticlib)
+                        || target.kind.contains(&kind_rlib)
+                        || target.kind.contains(&kind_cdylib)
+                        || target.kind.contains(&kind_dylib)
+                    {
+                        return Some(PathBuf::from(&target.src_path));
+                    }
+                }
+                None
+            })
+    }
+
+    pub(crate) fn expand_crate(
+        &self,
+        package: &PackageRef,
+        expand_all_features: bool,
+        expand_default_features: bool,
+        expand_features: &Option<Vec<String>>,
+        profile: Profile,
+    ) -> Result<String, cargo_expand::Error> {
+        cargo_expand::expand(
+            &self.manifest_path,
+            &package.name,
+            package.version.as_deref(),
+            self.clean,
+            expand_all_features,
+            expand_default_features,
+            expand_features,
+            profile,
+        )
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/cargo/cargo_expand.rs b/cbindgen-0.24.5/src/bindgen/cargo/cargo_expand.rs
new file mode 100644
index 0000000..565a0d1
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cargo/cargo_expand.rs
@@ -0,0 +1,145 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use crate::bindgen::config::Profile;
+use std::env;
+use std::error;
+use std::fmt;
+use std::io;
+use std::path::{Path, PathBuf};
+use std::process::Command;
+use std::str::{from_utf8, Utf8Error};
+
+extern crate tempfile;
+use self::tempfile::Builder;
+
+#[derive(Debug)]
+/// Possible errors that can occur during `rustc -Zunpretty=expanded`.
+pub enum Error {
+    /// Error during creation of temporary directory
+    Io(io::Error),
+    /// Output of `cargo metadata` was not valid utf8
+    Utf8(Utf8Error),
+    /// Error during execution of `cargo rustc -Zunpretty=expanded`
+    Compile(String),
+}
+
+impl From<io::Error> for Error {
+    fn from(err: io::Error) -> Self {
+        Error::Io(err)
+    }
+}
+impl From<Utf8Error> for Error {
+    fn from(err: Utf8Error) -> Self {
+        Error::Utf8(err)
+    }
+}
+
+impl fmt::Display for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self {
+            Error::Io(ref err) => err.fmt(f),
+            Error::Utf8(ref err) => err.fmt(f),
+            Error::Compile(ref err) => write!(f, "{}", err),
+        }
+    }
+}
+
+impl error::Error for Error {
+    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+        match self {
+            Error::Io(ref err) => Some(err),
+            Error::Utf8(ref err) => Some(err),
+            Error::Compile(..) => None,
+        }
+    }
+}
+
+/// Use rustc to expand and pretty print the crate into a single file,
+/// removing any macros in the process.
+#[allow(clippy::too_many_arguments)]
+pub fn expand(
+    manifest_path: &Path,
+    crate_name: &str,
+    version: Option<&str>,
+    use_tempdir: bool,
+    expand_all_features: bool,
+    expand_default_features: bool,
+    expand_features: &Option<Vec<String>>,
+    profile: Profile,
+) -> Result<String, Error> {
+    let cargo = env::var("CARGO").unwrap_or_else(|_| String::from("cargo"));
+    let mut cmd = Command::new(cargo);
+
+    let mut _temp_dir = None; // drop guard
+    if use_tempdir {
+        _temp_dir = Some(Builder::new().prefix("cbindgen-expand").tempdir()?);
+        cmd.env("CARGO_TARGET_DIR", _temp_dir.unwrap().path());
+    } else if let Ok(ref path) = env::var("CARGO_EXPAND_TARGET_DIR") {
+        cmd.env("CARGO_TARGET_DIR", path);
+    } else if let Ok(ref path) = env::var("OUT_DIR") {
+        // When cbindgen was started programatically from a build.rs file, Cargo is running and
+        // locking the default target directory. In this case we need to use another directory,
+        // else we would end up in a deadlock. If Cargo is running `OUT_DIR` will be set, so we
+        // can use a directory relative to that.
+        cmd.env("CARGO_TARGET_DIR", PathBuf::from(path).join("expanded"));
+    }
+
+    // Set this variable so that we don't call it recursively if we expand a crate that is using
+    // cbindgen
+    cmd.env("_CBINDGEN_IS_RUNNING", "1");
+
+    cmd.arg("rustc");
+    cmd.arg("--lib");
+    // When build with the release profile we can't choose the `check` profile.
+    if profile != Profile::Release {
+        cmd.arg("--profile=check");
+    }
+    cmd.arg("--manifest-path");
+    cmd.arg(manifest_path);
+    if let Some(features) = expand_features {
+        cmd.arg("--features");
+        let mut features_str = String::new();
+        for (index, feature) in features.iter().enumerate() {
+            if index != 0 {
+                features_str.push(' ');
+            }
+            features_str.push_str(feature);
+        }
+        cmd.arg(features_str);
+    }
+    if expand_all_features {
+        cmd.arg("--all-features");
+    }
+    if !expand_default_features {
+        cmd.arg("--no-default-features");
+    }
+    match profile {
+        Profile::Debug => {}
+        Profile::Release => {
+            cmd.arg("--release");
+        }
+    }
+    cmd.arg("-p");
+    let mut package = crate_name.to_owned();
+    if let Some(version) = version {
+        package.push(':');
+        package.push_str(version);
+    }
+    cmd.arg(&package);
+    cmd.arg("--verbose");
+    cmd.arg("--");
+    cmd.arg("-Zunpretty=expanded");
+    info!("Command: {:?}", cmd);
+    let output = cmd.output()?;
+
+    let src = from_utf8(&output.stdout)?.to_owned();
+    let error = from_utf8(&output.stderr)?.to_owned();
+
+    if src.is_empty() {
+        Err(Error::Compile(error))
+    } else {
+        Ok(src)
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/cargo/cargo_lock.rs b/cbindgen-0.24.5/src/bindgen/cargo/cargo_lock.rs
new file mode 100644
index 0000000..9302082
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cargo/cargo_lock.rs
@@ -0,0 +1,51 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::fs::File;
+use std::io;
+use std::io::Read;
+use std::path::Path;
+
+#[derive(Debug)]
+/// Possible errors that can occur during Cargo.toml parsing.
+pub enum Error {
+    /// Error during reading of Cargo.toml
+    Io(io::Error),
+    /// Deserialization error
+    Toml(toml::de::Error),
+}
+
+impl From<io::Error> for Error {
+    fn from(err: io::Error) -> Self {
+        Error::Io(err)
+    }
+}
+impl From<toml::de::Error> for Error {
+    fn from(err: toml::de::Error) -> Self {
+        Error::Toml(err)
+    }
+}
+
+#[derive(Clone, Deserialize, Debug)]
+pub struct Lock {
+    pub root: Option<Package>,
+    pub package: Option<Vec<Package>>,
+}
+
+#[derive(Clone, Deserialize, Debug)]
+pub struct Package {
+    pub name: String,
+    pub version: String,
+    /// A list of dependencies formatted like "NAME VERSION-OPT REGISTRY-OPT"
+    pub dependencies: Option<Vec<String>>,
+}
+
+/// Parse the Cargo.toml for a given path
+pub fn lock(manifest_path: &Path) -> Result<Lock, Error> {
+    let mut s = String::new();
+    let mut f = File::open(manifest_path)?;
+    f.read_to_string(&mut s)?;
+
+    toml::from_str::<Lock>(&s).map_err(|x| x.into())
+}
diff --git a/cbindgen-0.24.5/src/bindgen/cargo/cargo_metadata.rs b/cbindgen-0.24.5/src/bindgen/cargo/cargo_metadata.rs
new file mode 100644
index 0000000..01ab80f
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cargo/cargo_metadata.rs
@@ -0,0 +1,253 @@
+#![deny(missing_docs)]
+#![allow(dead_code)]
+//! Structured access to the output of `cargo metadata`
+//! Usually used from within a `cargo-*` executable
+
+// Forked from `https://github.com/oli-obk/cargo_metadata`
+// Modifications:
+//   1. Remove `resolve` from Metadata because it was causing parse failures
+//   2. Fix the `manifest-path` argument
+//   3. Add `--all-features` argument
+//   4. Remove the `--no-deps` argument
+
+use std::borrow::{Borrow, Cow};
+use std::collections::{HashMap, HashSet};
+use std::env;
+use std::error;
+use std::fmt;
+use std::hash::{Hash, Hasher};
+use std::io;
+use std::path::Path;
+use std::process::{Command, Output};
+use std::str::Utf8Error;
+
+#[derive(Clone, Deserialize, Debug)]
+/// Starting point for metadata returned by `cargo metadata`
+pub struct Metadata {
+    /// A list of all crates referenced by this crate (and the crate itself)
+    pub packages: HashSet<Package>,
+    version: usize,
+    /// path to the workspace containing the `Cargo.lock`
+    pub workspace_root: String,
+}
+
+/// A reference to a package including it's name and the specific version.
+#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
+pub struct PackageRef {
+    pub name: String,
+    pub version: Option<String>,
+}
+
+#[derive(Clone, Deserialize, Debug)]
+/// A crate
+pub struct Package {
+    #[serde(flatten)]
+    pub name_and_version: PackageRef,
+    id: String,
+    source: Option<String>,
+    /// List of dependencies of this particular package
+    pub dependencies: HashSet<Dependency>,
+    /// Targets provided by the crate (lib, bin, example, test, ...)
+    pub targets: Vec<Target>,
+    features: HashMap<String, Vec<String>>,
+    /// path containing the `Cargo.toml`
+    pub manifest_path: String,
+}
+
+#[derive(Clone, Deserialize, Debug)]
+/// A dependency of the main crate
+pub struct Dependency {
+    /// Name as given in the `Cargo.toml`
+    pub name: String,
+    source: Option<String>,
+    /// Whether this is required or optional
+    pub req: String,
+    kind: Option<String>,
+    optional: bool,
+    uses_default_features: bool,
+    features: Vec<String>,
+    pub target: Option<String>,
+}
+
+#[derive(Clone, Deserialize, Debug)]
+/// A single target (lib, bin, example, ...) provided by a crate
+pub struct Target {
+    /// Name as given in the `Cargo.toml` or generated from the file name
+    pub name: String,
+    /// Kind of target ("bin", "example", "test", "bench", "lib")
+    pub kind: Vec<String>,
+    /// Almost the same as `kind`, except when an example is a library instad of an executable.
+    /// In that case `crate_types` contains things like `rlib` and `dylib` while `kind` is `example`
+    #[serde(default)]
+    pub crate_types: Vec<String>,
+    /// Path to the main source file of the target
+    pub src_path: String,
+}
+
+#[derive(Debug)]
+/// Possible errors that can occur during metadata parsing.
+pub enum Error {
+    /// Error during execution of `cargo metadata`
+    Io(io::Error),
+    /// Metadata extraction failure
+    Metadata(Output),
+    /// Output of `cargo metadata` was not valid utf8
+    Utf8(Utf8Error),
+    /// Deserialization error (structure of json did not match expected structure)
+    Json(serde_json::Error),
+}
+
+impl From<io::Error> for Error {
+    fn from(err: io::Error) -> Self {
+        Error::Io(err)
+    }
+}
+impl From<Utf8Error> for Error {
+    fn from(err: Utf8Error) -> Self {
+        Error::Utf8(err)
+    }
+}
+impl From<serde_json::Error> for Error {
+    fn from(err: serde_json::Error) -> Self {
+        Error::Json(err)
+    }
+}
+
+impl fmt::Display for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self {
+            Error::Io(ref err) => err.fmt(f),
+            Error::Metadata(_) => write!(f, "Metadata error"),
+            Error::Utf8(ref err) => err.fmt(f),
+            Error::Json(ref err) => err.fmt(f),
+        }
+    }
+}
+
+impl error::Error for Error {
+    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+        match self {
+            Error::Io(ref err) => Some(err),
+            Error::Metadata(_) => None,
+            Error::Utf8(ref err) => Some(err),
+            Error::Json(ref err) => Some(err),
+        }
+    }
+}
+
+// Implementations that let us lookup Packages and Dependencies by name (string)
+
+impl Borrow<PackageRef> for Package {
+    fn borrow(&self) -> &PackageRef {
+        &self.name_and_version
+    }
+}
+
+impl Hash for Package {
+    fn hash<H: Hasher>(&self, state: &mut H) {
+        self.name_and_version.hash(state);
+    }
+}
+
+impl PartialEq for Package {
+    fn eq(&self, other: &Self) -> bool {
+        self.name_and_version == other.name_and_version
+    }
+}
+
+impl Eq for Package {}
+
+impl Borrow<str> for Dependency {
+    fn borrow(&self) -> &str {
+        &self.name
+    }
+}
+
+impl Hash for Dependency {
+    fn hash<H: Hasher>(&self, state: &mut H) {
+        self.name.hash(state);
+    }
+}
+
+impl PartialEq for Dependency {
+    fn eq(&self, other: &Self) -> bool {
+        self.name == other.name
+    }
+}
+
+impl Eq for Dependency {}
+
+fn discover_target(manifest_path: &Path) -> Option<String> {
+    if let Ok(target) = std::env::var("TARGET") {
+        return Some(target);
+    }
+
+    // We must be running as a standalone script, not under cargo.
+    // Let's use the host platform instead.
+    // We figure out the host platform through rustc and use that.
+    // We unfortunatelly cannot go through cargo, since cargo rustc _also_ builds.
+    // If `rustc` fails to run, we just fall back to not passing --filter-platforms.
+    //
+    // NOTE: We set the current directory in case of rustup shenanigans.
+    let rustc = env::var("RUSTC").unwrap_or_else(|_| String::from("rustc"));
+    debug!("Discovering host platform by {:?}", rustc);
+
+    let rustc_output = Command::new(rustc)
+        .current_dir(manifest_path.parent().unwrap())
+        .arg("-vV")
+        .output();
+    let rustc_output = match rustc_output {
+        Ok(ref out) => String::from_utf8_lossy(&out.stdout),
+        Err(..) => return None,
+    };
+
+    let field = "host: ";
+    rustc_output
+        .lines()
+        .find_map(|l| l.strip_prefix(field).map(|stripped| stripped.to_string()))
+}
+
+/// The main entry point to obtaining metadata
+pub fn metadata(
+    manifest_path: &Path,
+    existing_metadata_file: Option<&Path>,
+    only_target: bool,
+) -> Result<Metadata, Error> {
+    let output;
+    let metadata = match existing_metadata_file {
+        Some(path) => Cow::Owned(std::fs::read_to_string(path)?),
+        None => {
+            let target = if only_target {
+                let target = discover_target(manifest_path);
+                if target.is_none() {
+                    warn!(
+                        "Failed to discover host platform for cargo metadata; \
+                        will fetch dependencies for all platforms."
+                    );
+                }
+                target
+            } else {
+                None
+            };
+
+            let cargo = env::var("CARGO").unwrap_or_else(|_| String::from("cargo"));
+            let mut cmd = Command::new(cargo);
+            cmd.arg("metadata");
+            cmd.arg("--all-features");
+            cmd.arg("--format-version").arg("1");
+            if let Some(target) = target {
+                cmd.arg("--filter-platform").arg(target);
+            }
+            cmd.arg("--manifest-path");
+            cmd.arg(manifest_path);
+            output = cmd.output()?;
+            if !output.status.success() {
+                return Err(Error::Metadata(output));
+            }
+            Cow::Borrowed(std::str::from_utf8(&output.stdout)?)
+        }
+    };
+
+    let meta: Metadata = serde_json::from_str(&metadata)?;
+    Ok(meta)
+}
diff --git a/cbindgen-0.24.5/src/bindgen/cargo/cargo_toml.rs b/cbindgen-0.24.5/src/bindgen/cargo/cargo_toml.rs
new file mode 100644
index 0000000..998176e
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cargo/cargo_toml.rs
@@ -0,0 +1,67 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::error;
+use std::fmt;
+use std::fs::File;
+use std::io;
+use std::io::Read;
+use std::path::Path;
+
+#[derive(Debug)]
+/// Possible errors that can occur during Cargo.toml parsing.
+pub enum Error {
+    /// Error during reading of Cargo.toml
+    Io(io::Error),
+    /// Deserialization error
+    Toml(toml::de::Error),
+}
+
+impl From<io::Error> for Error {
+    fn from(err: io::Error) -> Self {
+        Error::Io(err)
+    }
+}
+impl From<toml::de::Error> for Error {
+    fn from(err: toml::de::Error) -> Self {
+        Error::Toml(err)
+    }
+}
+
+impl fmt::Display for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self {
+            Error::Io(ref err) => err.fmt(f),
+            Error::Toml(ref err) => err.fmt(f),
+        }
+    }
+}
+
+impl error::Error for Error {
+    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+        match self {
+            Error::Io(ref err) => Some(err),
+            Error::Toml(ref err) => Some(err),
+        }
+    }
+}
+
+#[derive(Clone, Deserialize, Debug)]
+pub struct Manifest {
+    pub package: Package,
+}
+
+#[derive(Clone, Deserialize, Debug)]
+pub struct Package {
+    pub name: String,
+}
+
+/// Parse the Cargo.toml for a given path
+pub fn manifest(manifest_path: &Path) -> Result<Manifest, Error> {
+    let mut s = String::new();
+    let mut f = File::open(manifest_path)?;
+    f.read_to_string(&mut s)?;
+
+    toml::from_str::<Manifest>(&s).map_err(|x| x.into())
+}
diff --git a/cbindgen-0.24.5/src/bindgen/cargo/mod.rs b/cbindgen-0.24.5/src/bindgen/cargo/mod.rs
new file mode 100644
index 0000000..19fef54
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cargo/mod.rs
@@ -0,0 +1,12 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#[allow(clippy::module_inception)]
+mod cargo;
+pub(crate) mod cargo_expand;
+pub(crate) mod cargo_lock;
+pub(crate) mod cargo_metadata;
+pub(crate) mod cargo_toml;
+
+pub(crate) use self::cargo::*;
diff --git a/cbindgen-0.24.5/src/bindgen/cdecl.rs b/cbindgen-0.24.5/src/bindgen/cdecl.rs
new file mode 100644
index 0000000..d331d65
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/cdecl.rs
@@ -0,0 +1,369 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use crate::bindgen::config::Layout;
+use crate::bindgen::declarationtyperesolver::DeclarationType;
+use crate::bindgen::ir::{ConstExpr, Function, GenericArgument, Type};
+use crate::bindgen::writer::{ListType, SourceWriter};
+use crate::bindgen::{Config, Language};
+
+// This code is for translating Rust types into C declarations.
+// See Section 6.7, Declarations, in the C standard for background.
+// http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
+
+enum CDeclarator {
+    Ptr {
+        is_const: bool,
+        is_nullable: bool,
+        is_ref: bool,
+    },
+    Array(String),
+    Func {
+        args: Vec<(Option<String>, CDecl)>,
+        layout: Layout,
+        never_return: bool,
+    },
+}
+
+impl CDeclarator {
+    fn is_ptr(&self) -> bool {
+        matches!(self, CDeclarator::Ptr { .. } | CDeclarator::Func { .. })
+    }
+}
+
+struct CDecl {
+    type_qualifers: String,
+    type_name: String,
+    type_generic_args: Vec<GenericArgument>,
+    declarators: Vec<CDeclarator>,
+    type_ctype: Option<DeclarationType>,
+}
+
+impl CDecl {
+    fn new() -> CDecl {
+        CDecl {
+            type_qualifers: String::new(),
+            type_name: String::new(),
+            type_generic_args: Vec::new(),
+            declarators: Vec::new(),
+            type_ctype: None,
+        }
+    }
+
+    fn from_type(t: &Type, config: &Config) -> CDecl {
+        let mut cdecl = CDecl::new();
+        cdecl.build_type(t, false, config);
+        cdecl
+    }
+
+    fn from_func_arg(t: &Type, array_length: Option<&str>, config: &Config) -> CDecl {
+        let mut cdecl = CDecl::new();
+        let length = match array_length {
+            Some(l) => l,
+            None => return CDecl::from_type(t, config),
+        };
+        let (ty, is_const) = match t {
+            Type::Ptr { ty, is_const, .. } => (ty, is_const),
+            _ => unreachable!(
+                "Should never have an array length for a non pointer type {:?}",
+                t
+            ),
+        };
+        let ptr_as_array = Type::Array(ty.clone(), ConstExpr::Value(length.to_string()));
+        cdecl.build_type(&ptr_as_array, *is_const, config);
+        cdecl
+    }
+
+    fn from_func(f: &Function, layout: Layout, config: &Config) -> CDecl {
+        let mut cdecl = CDecl::new();
+        cdecl.build_func(f, layout, config);
+        cdecl
+    }
+
+    fn build_func(&mut self, f: &Function, layout: Layout, config: &Config) {
+        let args = f
+            .args
+            .iter()
+            .map(|arg| {
+                (
+                    arg.name.clone(),
+                    CDecl::from_func_arg(&arg.ty, arg.array_length.as_deref(), config),
+                )
+            })
+            .collect();
+        self.declarators.push(CDeclarator::Func {
+            args,
+            layout,
+            never_return: f.never_return,
+        });
+        self.build_type(&f.ret, false, config);
+    }
+
+    fn build_type(&mut self, t: &Type, is_const: bool, config: &Config) {
+        match t {
+            Type::Path(ref generic) => {
+                if is_const {
+                    assert!(
+                        self.type_qualifers.is_empty(),
+                        "error generating cdecl for {:?}",
+                        t
+                    );
+                    self.type_qualifers = "const".to_owned();
+                }
+
+                assert!(
+                    self.type_name.is_empty(),
+                    "error generating cdecl for {:?}",
+                    t
+                );
+                self.type_name = generic.export_name().to_owned();
+                assert!(
+                    self.type_generic_args.is_empty(),
+                    "error generating cdecl for {:?}",
+                    t
+                );
+                self.type_generic_args = generic.generics().to_owned();
+                self.type_ctype = generic.ctype().cloned();
+            }
+            Type::Primitive(ref p) => {
+                if is_const {
+                    assert!(
+                        self.type_qualifers.is_empty(),
+                        "error generating cdecl for {:?}",
+                        t
+                    );
+                    self.type_qualifers = "const".to_owned();
+                }
+
+                assert!(
+                    self.type_name.is_empty(),
+                    "error generating cdecl for {:?}",
+                    t
+                );
+                self.type_name = p.to_repr_c(config).to_string();
+            }
+            Type::Ptr {
+                ref ty,
+                is_nullable,
+                is_const: ptr_is_const,
+                is_ref,
+            } => {
+                self.declarators.push(CDeclarator::Ptr {
+                    is_const,
+                    is_nullable: *is_nullable,
+                    is_ref: *is_ref,
+                });
+                self.build_type(ty, *ptr_is_const, config);
+            }
+            Type::Array(ref t, ref constant) => {
+                let len = constant.as_str().to_owned();
+                self.declarators.push(CDeclarator::Array(len));
+                self.build_type(t, is_const, config);
+            }
+            Type::FuncPtr {
+                ref ret,
+                ref args,
+                is_nullable: _,
+                never_return,
+            } => {
+                let args = args
+                    .iter()
+                    .map(|(ref name, ref ty)| (name.clone(), CDecl::from_type(ty, config)))
+                    .collect();
+                self.declarators.push(CDeclarator::Ptr {
+                    is_const: false,
+                    is_nullable: true,
+                    is_ref: false,
+                });
+                self.declarators.push(CDeclarator::Func {
+                    args,
+                    layout: config.function.args.clone(),
+                    never_return: *never_return,
+                });
+                self.build_type(ret, false, config);
+            }
+        }
+    }
+
+    fn write<F: Write>(&self, out: &mut SourceWriter<F>, ident: Option<&str>, config: &Config) {
+        // Write the type-specifier and type-qualifier first
+        if !self.type_qualifers.is_empty() {
+            write!(out, "{} ", self.type_qualifers);
+        }
+
+        if config.language != Language::Cython {
+            if let Some(ref ctype) = self.type_ctype {
+                write!(out, "{} ", ctype.to_str());
+            }
+        }
+
+        write!(out, "{}", self.type_name);
+
+        if !self.type_generic_args.is_empty() {
+            out.write("<");
+            out.write_horizontal_source_list(&self.type_generic_args, ListType::Join(", "));
+            out.write(">");
+        }
+
+        // When we have an identifier, put a space between the type and the declarators
+        if ident.is_some() {
+            out.write(" ");
+        }
+
+        // Write the left part of declarators before the identifier
+        let mut iter_rev = self.declarators.iter().rev().peekable();
+
+        #[allow(clippy::while_let_on_iterator)]
+        while let Some(declarator) = iter_rev.next() {
+            let next_is_pointer = iter_rev.peek().map_or(false, |x| x.is_ptr());
+
+            match *declarator {
+                CDeclarator::Ptr {
+                    is_const,
+                    is_nullable,
+                    is_ref,
+                } => {
+                    out.write(if is_ref { "&" } else { "*" });
+                    if is_const {
+                        out.write("const ");
+                    }
+                    if !is_nullable && !is_ref && config.language != Language::Cython {
+                        if let Some(attr) = &config.pointer.non_null_attribute {
+                            write!(out, "{} ", attr);
+                        }
+                    }
+                }
+                CDeclarator::Array(..) => {
+                    if next_is_pointer {
+                        out.write("(");
+                    }
+                }
+                CDeclarator::Func { .. } => {
+                    if next_is_pointer {
+                        out.write("(");
+                    }
+                }
+            }
+        }
+
+        // Write the identifier
+        if let Some(ident) = ident {
+            write!(out, "{}", ident);
+        }
+
+        // Write the right part of declarators after the identifier
+        let mut iter = self.declarators.iter();
+        let mut last_was_pointer = false;
+
+        #[allow(clippy::while_let_on_iterator)]
+        while let Some(declarator) = iter.next() {
+            match *declarator {
+                CDeclarator::Ptr { .. } => {
+                    last_was_pointer = true;
+                }
+                CDeclarator::Array(ref constant) => {
+                    if last_was_pointer {
+                        out.write(")");
+                    }
+                    write!(out, "[{}]", constant);
+
+                    last_was_pointer = false;
+                }
+                CDeclarator::Func {
+                    ref args,
+                    ref layout,
+                    never_return,
+                } => {
+                    if last_was_pointer {
+                        out.write(")");
+                    }
+
+                    out.write("(");
+                    if args.is_empty() && config.language == Language::C {
+                        out.write("void");
+                    }
+
+                    fn write_vertical<F: Write>(
+                        out: &mut SourceWriter<F>,
+                        config: &Config,
+                        args: &[(Option<String>, CDecl)],
+                    ) {
+                        let align_length = out.line_length_for_align();
+                        out.push_set_spaces(align_length);
+                        for (i, (arg_ident, arg_ty)) in args.iter().enumerate() {
+                            if i != 0 {
+                                out.write(",");
+                                out.new_line();
+                            }
+
+                            // Convert &Option<String> to Option<&str>
+                            let arg_ident = arg_ident.as_ref().map(|x| x.as_ref());
+
+                            arg_ty.write(out, arg_ident, config);
+                        }
+                        out.pop_tab();
+                    }
+
+                    fn write_horizontal<F: Write>(
+                        out: &mut SourceWriter<F>,
+                        config: &Config,
+                        args: &[(Option<String>, CDecl)],
+                    ) {
+                        for (i, (arg_ident, arg_ty)) in args.iter().enumerate() {
+                            if i != 0 {
+                                out.write(", ");
+                            }
+
+                            // Convert &Option<String> to Option<&str>
+                            let arg_ident = arg_ident.as_ref().map(|x| x.as_ref());
+
+                            arg_ty.write(out, arg_ident, config);
+                        }
+                    }
+
+                    match layout {
+                        Layout::Vertical => write_vertical(out, config, args),
+                        Layout::Horizontal => write_horizontal(out, config, args),
+                        Layout::Auto => {
+                            if !out.try_write(
+                                |out| write_horizontal(out, config, args),
+                                config.line_length,
+                            ) {
+                                write_vertical(out, config, args)
+                            }
+                        }
+                    }
+                    out.write(")");
+
+                    if never_return && config.language != Language::Cython {
+                        if let Some(ref no_return_attr) = config.function.no_return {
+                            out.write_fmt(format_args!(" {}", no_return_attr));
+                        }
+                    }
+
+                    last_was_pointer = true;
+                }
+            }
+        }
+    }
+}
+
+pub fn write_func<F: Write>(
+    out: &mut SourceWriter<F>,
+    f: &Function,
+    layout: Layout,
+    config: &Config,
+) {
+    CDecl::from_func(f, layout, config).write(out, Some(f.path().name()), config);
+}
+
+pub fn write_field<F: Write>(out: &mut SourceWriter<F>, t: &Type, ident: &str, config: &Config) {
+    CDecl::from_type(t, config).write(out, Some(ident), config);
+}
+
+pub fn write_type<F: Write>(out: &mut SourceWriter<F>, t: &Type, config: &Config) {
+    CDecl::from_type(t, config).write(out, None, config);
+}
diff --git a/cbindgen-0.24.5/src/bindgen/config.rs b/cbindgen-0.24.5/src/bindgen/config.rs
new file mode 100644
index 0000000..fbf35cb
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/config.rs
@@ -0,0 +1,1104 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::{BTreeMap, HashMap};
+use std::default::Default;
+use std::str::FromStr;
+use std::{fmt, fs, path::Path as StdPath};
+
+use serde::de::value::{MapAccessDeserializer, SeqAccessDeserializer};
+use serde::de::{Deserialize, Deserializer, MapAccess, SeqAccess, Visitor};
+
+use crate::bindgen::ir::annotation::AnnotationSet;
+use crate::bindgen::ir::path::Path;
+use crate::bindgen::ir::repr::ReprAlign;
+pub use crate::bindgen::rename::RenameRule;
+
+pub const VERSION: &str = env!("CARGO_PKG_VERSION");
+
+/// A language type to generate bindings for.
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum Language {
+    Cxx,
+    C,
+    Cython,
+}
+
+impl FromStr for Language {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Language, Self::Err> {
+        match s {
+            "cxx" => Ok(Language::Cxx),
+            "Cxx" => Ok(Language::Cxx),
+            "CXX" => Ok(Language::Cxx),
+            "cpp" => Ok(Language::Cxx),
+            "Cpp" => Ok(Language::Cxx),
+            "CPP" => Ok(Language::Cxx),
+            "c++" => Ok(Language::Cxx),
+            "C++" => Ok(Language::Cxx),
+            "c" => Ok(Language::C),
+            "C" => Ok(Language::C),
+            "cython" => Ok(Language::Cython),
+            "Cython" => Ok(Language::Cython),
+            _ => Err(format!("Unrecognized Language: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(Language);
+
+impl Language {
+    pub(crate) fn typedef(self) -> &'static str {
+        match self {
+            Language::Cxx | Language::C => "typedef",
+            Language::Cython => "ctypedef",
+        }
+    }
+}
+
+/// Controls what type of line endings are used in the generated code.
+#[derive(Debug, Clone, Copy)]
+#[allow(clippy::upper_case_acronyms)]
+pub enum LineEndingStyle {
+    /// Use Unix-style linefeed characters
+    LF,
+    /// Use classic Mac-style carriage-return characters
+    CR,
+    /// Use Windows-style carriage-return and linefeed characters
+    CRLF,
+    /// Use the native mode for the platform: CRLF on Windows, LF everywhere else.
+    Native,
+}
+
+impl Default for LineEndingStyle {
+    fn default() -> Self {
+        LineEndingStyle::LF
+    }
+}
+
+impl LineEndingStyle {
+    pub fn as_str(&self) -> &'static str {
+        match self {
+            Self::LF => "\n",
+            Self::CR => "\r",
+            Self::CRLF => "\r\n",
+            Self::Native => {
+                #[cfg(target_os = "windows")]
+                {
+                    Self::CRLF.as_str()
+                }
+                #[cfg(not(target_os = "windows"))]
+                {
+                    Self::LF.as_str()
+                }
+            }
+        }
+    }
+}
+
+impl FromStr for LineEndingStyle {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        match s.to_lowercase().as_ref() {
+            "native" => Ok(Self::Native),
+            "lf" => Ok(Self::LF),
+            "crlf" => Ok(Self::CRLF),
+            "cr" => Ok(Self::CR),
+            _ => Err(format!("Unrecognized line ending style: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(LineEndingStyle);
+
+/// A style of braces to use for generating code.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum Braces {
+    SameLine,
+    NextLine,
+}
+
+impl FromStr for Braces {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Braces, Self::Err> {
+        match s {
+            "SameLine" => Ok(Braces::SameLine),
+            "same_line" => Ok(Braces::SameLine),
+            "NextLine" => Ok(Braces::NextLine),
+            "next_line" => Ok(Braces::NextLine),
+            _ => Err(format!("Unrecognized Braces: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(Braces);
+
+/// A type of layout to use when generating long lines of code.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum Layout {
+    Horizontal,
+    Vertical,
+    Auto,
+}
+
+impl FromStr for Layout {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Layout, Self::Err> {
+        match s {
+            "Horizontal" => Ok(Layout::Horizontal),
+            "horizontal" => Ok(Layout::Horizontal),
+            "Vertical" => Ok(Layout::Vertical),
+            "vertical" => Ok(Layout::Vertical),
+            "Auto" => Ok(Layout::Auto),
+            "auto" => Ok(Layout::Auto),
+            _ => Err(format!("Unrecognized Layout: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(Layout);
+
+/// How the comments containing documentation should be styled.
+#[derive(Debug, Clone, PartialEq, Eq, Copy)]
+pub enum DocumentationStyle {
+    C,
+    C99,
+    Doxy,
+    Cxx,
+    Auto,
+}
+
+impl FromStr for DocumentationStyle {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<DocumentationStyle, Self::Err> {
+        match s.to_lowercase().as_ref() {
+            "c" => Ok(DocumentationStyle::C),
+            "c99" => Ok(DocumentationStyle::C99),
+            "cxx" => Ok(DocumentationStyle::Cxx),
+            "c++" => Ok(DocumentationStyle::Cxx),
+            "doxy" => Ok(DocumentationStyle::Doxy),
+            "auto" => Ok(DocumentationStyle::Auto),
+            _ => Err(format!("Unrecognized documentation style: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(DocumentationStyle);
+
+/// How much of the documentation to include in the header file.
+#[derive(Debug, Clone, Copy)]
+pub enum DocumentationLength {
+    Short,
+    Full,
+}
+
+impl FromStr for DocumentationLength {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<DocumentationLength, Self::Err> {
+        match s.to_lowercase().as_ref() {
+            "short" => Ok(DocumentationLength::Short),
+            "full" => Ok(DocumentationLength::Full),
+            _ => Err(format!("Unrecognized documentation style: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(DocumentationLength);
+
+/// A style of Style to use when generating structs and enums.
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum Style {
+    Both,
+    Tag,
+    Type,
+}
+
+impl Style {
+    pub fn generate_tag(self) -> bool {
+        match self {
+            Style::Both | Style::Tag => true,
+            Style::Type => false,
+        }
+    }
+
+    pub fn generate_typedef(self) -> bool {
+        match self {
+            Style::Both | Style::Type => true,
+            Style::Tag => false,
+        }
+    }
+
+    // https://cython.readthedocs.io/en/latest/src/userguide/external_C_code.html#styles-of-struct-union-and-enum-declaration
+    pub fn cython_def(self) -> &'static str {
+        if self.generate_tag() {
+            "cdef "
+        } else {
+            "ctypedef "
+        }
+    }
+}
+
+impl Default for Style {
+    fn default() -> Self {
+        Style::Both
+    }
+}
+
+impl FromStr for Style {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Style, Self::Err> {
+        match s {
+            "Both" => Ok(Style::Both),
+            "both" => Ok(Style::Both),
+            "Tag" => Ok(Style::Tag),
+            "tag" => Ok(Style::Tag),
+            "Type" => Ok(Style::Type),
+            "type" => Ok(Style::Type),
+            _ => Err(format!("Unrecognized Style: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(Style);
+
+/// Different item types that we can generate and filter.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum ItemType {
+    Constants,
+    Globals,
+    Enums,
+    Structs,
+    Unions,
+    Typedefs,
+    OpaqueItems,
+    Functions,
+}
+
+impl FromStr for ItemType {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        use self::ItemType::*;
+        Ok(match &*s.to_lowercase() {
+            "constants" => Constants,
+            "globals" => Globals,
+            "enums" => Enums,
+            "structs" => Structs,
+            "unions" => Unions,
+            "typedefs" => Typedefs,
+            "opaque" => OpaqueItems,
+            "functions" => Functions,
+            _ => return Err(format!("Unrecognized Style: '{}'.", s)),
+        })
+    }
+}
+
+deserialize_enum_str!(ItemType);
+
+/// Type which specifies the sort order of functions
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum SortKey {
+    Name,
+    None,
+}
+
+impl FromStr for SortKey {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        use self::SortKey::*;
+        Ok(match &*s.to_lowercase() {
+            "name" => Name,
+            "none" => None,
+            _ => return Err(format!("Unrecognized sort option: '{}'.", s)),
+        })
+    }
+}
+
+deserialize_enum_str!(SortKey);
+
+/// Settings to apply when exporting items.
+#[derive(Debug, Clone, Deserialize, Default)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct ExportConfig {
+    /// A list of additional items not used by exported functions to include in
+    /// the generated bindings
+    pub include: Vec<String>,
+    /// A list of items to not include in the generated bindings
+    pub exclude: Vec<String>,
+    /// Table of name conversions to apply to item names
+    pub rename: HashMap<String, String>,
+    /// Table of raw strings to prepend to the body of items.
+    pub pre_body: HashMap<String, String>,
+    /// Table of raw strings to append to the body of items.
+    pub body: HashMap<String, String>,
+    /// A prefix to add before the name of every item
+    pub prefix: Option<String>,
+    /// Types of items to generate.
+    pub item_types: Vec<ItemType>,
+    /// Whether renaming overrides or extends prefixing.
+    pub renaming_overrides_prefixing: bool,
+    /// Mangling configuration.
+    pub mangle: MangleConfig,
+}
+
+/// Mangling-specific configuration.
+#[derive(Debug, Clone, Deserialize, Default)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct MangleConfig {
+    /// The rename rule to apply to the type names mangled.
+    pub rename_types: RenameRule,
+    /// Remove the underscores used for name mangling.
+    pub remove_underscores: bool,
+}
+
+impl ExportConfig {
+    pub(crate) fn should_generate(&self, item_type: ItemType) -> bool {
+        self.item_types.is_empty() || self.item_types.contains(&item_type)
+    }
+
+    pub(crate) fn pre_body(&self, path: &Path) -> Option<&str> {
+        self.pre_body.get(path.name()).map(|s| s.trim_matches('\n'))
+    }
+
+    pub(crate) fn post_body(&self, path: &Path) -> Option<&str> {
+        self.body.get(path.name()).map(|s| s.trim_matches('\n'))
+    }
+
+    pub(crate) fn rename(&self, item_name: &mut String) {
+        if let Some(name) = self.rename.get(item_name) {
+            *item_name = name.clone();
+            if self.renaming_overrides_prefixing {
+                return;
+            }
+        }
+        if let Some(ref prefix) = self.prefix {
+            item_name.insert_str(0, prefix);
+        }
+    }
+}
+
+/// Settings to apply to generated types with layout modifiers.
+#[derive(Debug, Default, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct LayoutConfig {
+    /// The way to annotate C types as #[repr(packed)].
+    pub packed: Option<String>,
+    /// The way to annotate C types as #[repr(align(...))]. This is assumed to be a functional
+    /// macro which takes a single argument (the alignment).
+    pub aligned_n: Option<String>,
+}
+
+impl LayoutConfig {
+    pub(crate) fn ensure_safe_to_represent(&self, align: &ReprAlign) -> Result<(), String> {
+        match (align, &self.packed, &self.aligned_n) {
+            (ReprAlign::Packed, None, _) => Err("Cannot safely represent #[repr(packed)] type without configured 'packed' annotation.".to_string()),
+            (ReprAlign::Align(_), _, None) => Err("Cannot safely represent #[repr(aligned(...))] type without configured 'aligned_n' annotation.".to_string()),
+            _ => Ok(()),
+        }
+    }
+}
+
+/// Settings to apply to generated functions.
+#[derive(Debug, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct FunctionConfig {
+    /// Optional text to output before each function declaration
+    pub prefix: Option<String>,
+    /// Optional text to output after each function declaration
+    pub postfix: Option<String>,
+    /// The way to annotation this function as #[must_use]
+    pub must_use: Option<String>,
+    /// The style to layout the args
+    pub args: Layout,
+    /// The rename rule to apply to function args
+    pub rename_args: RenameRule,
+    /// An optional macro to use when generating Swift function name attributes
+    pub swift_name_macro: Option<String>,
+    /// Sort key for functions
+    pub sort_by: Option<SortKey>,
+    /// Optional text to output after functions which return `!`.
+    pub no_return: Option<String>,
+}
+
+impl Default for FunctionConfig {
+    fn default() -> FunctionConfig {
+        FunctionConfig {
+            prefix: None,
+            postfix: None,
+            must_use: None,
+            args: Layout::Auto,
+            rename_args: RenameRule::None,
+            swift_name_macro: None,
+            sort_by: None,
+            no_return: None,
+        }
+    }
+}
+
+impl FunctionConfig {
+    pub(crate) fn prefix(&self, annotations: &AnnotationSet) -> Option<String> {
+        if let Some(x) = annotations.atom("prefix") {
+            return x;
+        }
+        self.prefix.clone()
+    }
+
+    pub(crate) fn postfix(&self, annotations: &AnnotationSet) -> Option<String> {
+        if let Some(x) = annotations.atom("postfix") {
+            return x;
+        }
+        self.postfix.clone()
+    }
+}
+
+/// Settings to apply to generated structs.
+#[derive(Debug, Default, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct StructConfig {
+    /// The rename rule to apply to the name of struct fields
+    pub rename_fields: RenameRule,
+    /// Whether to generate a constructor for the struct (which takes
+    /// arguments to initialize all the members)
+    pub derive_constructor: bool,
+    /// Whether to generate a piecewise equality operator
+    pub derive_eq: bool,
+    /// Whether to generate a piecewise inequality operator
+    pub derive_neq: bool,
+    /// Whether to generate a less than operator on structs with one field
+    pub derive_lt: bool,
+    /// Whether to generate a less than or equal to operator on structs with one field
+    pub derive_lte: bool,
+    /// Whether to generate a greater than operator on structs with one field
+    pub derive_gt: bool,
+    /// Whether to generate a greater than or equal to operator on structs with one field
+    pub derive_gte: bool,
+    /// Whether to generate a ostream serializer for the struct
+    pub derive_ostream: bool,
+    /// Whether associated constants should be in the body. Only applicable to
+    /// non-transparent structs, and in C++-only.
+    pub associated_constants_in_body: bool,
+    /// The way to annotate this struct as #[must_use].
+    pub must_use: Option<String>,
+}
+
+impl StructConfig {
+    pub(crate) fn derive_constructor(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-constructor") {
+            return x;
+        }
+        self.derive_constructor
+    }
+    pub(crate) fn derive_eq(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-eq") {
+            return x;
+        }
+        self.derive_eq
+    }
+    pub(crate) fn derive_neq(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-neq") {
+            return x;
+        }
+        self.derive_neq
+    }
+    pub(crate) fn derive_lt(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-lt") {
+            return x;
+        }
+        self.derive_lt
+    }
+    pub(crate) fn derive_lte(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-lte") {
+            return x;
+        }
+        self.derive_lte
+    }
+    pub(crate) fn derive_gt(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-gt") {
+            return x;
+        }
+        self.derive_gt
+    }
+    pub(crate) fn derive_gte(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-gte") {
+            return x;
+        }
+        self.derive_gte
+    }
+    pub(crate) fn derive_ostream(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-ostream") {
+            return x;
+        }
+        self.derive_ostream
+    }
+}
+
+/// Settings to apply to generated enums.
+#[derive(Debug, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct EnumConfig {
+    /// The rename rule to apply to the name of enum variants
+    pub rename_variants: RenameRule,
+    /// The rename rule to apply to the names of the union fields in C/C++
+    /// generated from the Rust enum. Applied before rename_variants
+    /// rename rule. Defaults to SnakeCase.
+    pub rename_variant_name_fields: RenameRule,
+    /// Whether to add a `Sentinel` value at the end of every enum
+    /// This is useful in Gecko for IPC serialization
+    pub add_sentinel: bool,
+    /// Whether the enum variants should be prefixed with the enum name
+    pub prefix_with_name: bool,
+    /// Whether to generate static `::X(..)` constructors and `IsX()`
+    /// methods for tagged enums.
+    pub derive_helper_methods: bool,
+    /// Whether to generate `AsX() const` methods for tagged enums.
+    pub derive_const_casts: bool,
+    /// Whether to generate `AsX()` methods for tagged enums.
+    pub derive_mut_casts: bool,
+    /// The name of the macro to use for `derive_{const,mut}casts`. If custom, you're
+    /// responsible to provide the necessary header, otherwise `assert` will be
+    /// used, and `<cassert>` will be included.
+    pub cast_assert_name: Option<String>,
+    /// The way to annotation this enum as #[must_use].
+    pub must_use: Option<String>,
+    /// Whether to generate destructors of tagged enums.
+    pub derive_tagged_enum_destructor: bool,
+    /// Whether to generate copy-constructors of tagged enums.
+    pub derive_tagged_enum_copy_constructor: bool,
+    /// Whether to generate copy-assignment operators of tagged enums.
+    ///
+    /// This is only generated if a copy constructor for the same tagged enum is
+    /// generated as well.
+    pub derive_tagged_enum_copy_assignment: bool,
+    /// Whether to generate a ostream serializer for the struct
+    pub derive_ostream: bool,
+    /// Declare the enum as an enum class.
+    /// Only relevant when targeting C++.
+    pub enum_class: bool,
+    /// Whether to generate empty, private default-constructors for tagged
+    /// enums.
+    pub private_default_tagged_enum_constructor: bool,
+}
+
+impl Default for EnumConfig {
+    fn default() -> EnumConfig {
+        EnumConfig {
+            rename_variants: RenameRule::None,
+            rename_variant_name_fields: RenameRule::SnakeCase,
+            add_sentinel: false,
+            prefix_with_name: false,
+            derive_helper_methods: false,
+            derive_const_casts: false,
+            derive_mut_casts: false,
+            cast_assert_name: None,
+            must_use: None,
+            derive_tagged_enum_destructor: false,
+            derive_tagged_enum_copy_constructor: false,
+            derive_tagged_enum_copy_assignment: false,
+            derive_ostream: false,
+            enum_class: true,
+            private_default_tagged_enum_constructor: false,
+        }
+    }
+}
+
+impl EnumConfig {
+    pub(crate) fn add_sentinel(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("add-sentinel") {
+            return x;
+        }
+        self.add_sentinel
+    }
+    pub(crate) fn derive_helper_methods(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-helper-methods") {
+            return x;
+        }
+        self.derive_helper_methods
+    }
+    pub(crate) fn derive_const_casts(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-const-casts") {
+            return x;
+        }
+        self.derive_const_casts
+    }
+    pub(crate) fn derive_mut_casts(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-mut-casts") {
+            return x;
+        }
+        self.derive_mut_casts
+    }
+    pub(crate) fn derive_tagged_enum_destructor(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-tagged-enum-destructor") {
+            return x;
+        }
+        self.derive_tagged_enum_destructor
+    }
+    pub(crate) fn derive_tagged_enum_copy_constructor(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-tagged-enum-copy-constructor") {
+            return x;
+        }
+        self.derive_tagged_enum_copy_constructor
+    }
+    pub(crate) fn derive_tagged_enum_copy_assignment(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-tagged-enum-copy-assignment") {
+            return x;
+        }
+        self.derive_tagged_enum_copy_assignment
+    }
+    pub(crate) fn derive_ostream(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("derive-ostream") {
+            return x;
+        }
+        self.derive_ostream
+    }
+    pub(crate) fn enum_class(&self, annotations: &AnnotationSet) -> bool {
+        if let Some(x) = annotations.bool("enum-class") {
+            return x;
+        }
+        self.enum_class
+    }
+    pub(crate) fn private_default_tagged_enum_constructor(
+        &self,
+        annotations: &AnnotationSet,
+    ) -> bool {
+        if let Some(x) = annotations.bool("private-default-tagged-enum-constructor") {
+            return x;
+        }
+        self.private_default_tagged_enum_constructor
+    }
+}
+
+/// Settings to apply to generated constants.
+#[derive(Debug, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct ConstantConfig {
+    /// Whether a generated constant can be a static const in C++ mode.
+    pub allow_static_const: bool,
+    /// Whether a generated constant should be constexpr in C++ mode.
+    pub allow_constexpr: bool,
+    /// Sort key for constants
+    pub sort_by: Option<SortKey>,
+}
+
+impl Default for ConstantConfig {
+    fn default() -> ConstantConfig {
+        ConstantConfig {
+            allow_static_const: true,
+            allow_constexpr: true,
+            sort_by: None,
+        }
+    }
+}
+
+/// Settings for custom macro expansion.
+#[derive(Debug, Clone, Deserialize, Default)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct MacroExpansionConfig {
+    /// Whether the `bitflags` macro should be expanded.
+    pub bitflags: bool,
+}
+
+/// Controls which Cargo profile is used for macro expansion.
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum Profile {
+    Debug,
+    Release,
+}
+
+impl FromStr for Profile {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Profile, Self::Err> {
+        match s {
+            "debug" | "Debug" => Ok(Profile::Debug),
+            "release" | "Release" => Ok(Profile::Release),
+            _ => Err(format!("Unrecognized Profile: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(Profile);
+
+/// Settings to apply when running `rustc -Zunpretty=expanded`
+#[derive(Debug, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct ParseExpandConfig {
+    /// The names of crates to parse with `rustc -Zunpretty=expanded`
+    pub crates: Vec<String>,
+    /// Whether to enable all the features when expanding.
+    pub all_features: bool,
+    /// Whether to use the default feature set when expanding.
+    pub default_features: bool,
+    /// List of features to use when expanding. Combines with `default_features` like in
+    /// `Cargo.toml`.
+    pub features: Option<Vec<String>>,
+    /// Controls whether or not to pass `--release` when expanding.
+    pub profile: Profile,
+}
+
+impl Default for ParseExpandConfig {
+    fn default() -> ParseExpandConfig {
+        ParseExpandConfig {
+            crates: Vec::new(),
+            all_features: false,
+            default_features: true,
+            features: None,
+            profile: Profile::Debug,
+        }
+    }
+}
+
+// Backwards-compatibility deserializer for ParseExpandConfig. This allows accepting both the
+// simple `expand = ["crate"]` and the more complex `expand = {"crates": ["crate"],
+// "default_features": false}` format for the `expand` key.
+//
+// Note that one (major) difference between the two forms is that, for backwards-compatibility
+// reasons, the `expand = ["crate"]` form will enable the `--all-features` flag by default while
+// the `expand = {"crates": ["crate"]}` form will use the default feature set by default.
+fn retrocomp_parse_expand_config_deserialize<'de, D: Deserializer<'de>>(
+    deserializer: D,
+) -> Result<ParseExpandConfig, D::Error> {
+    struct ParseExpandVisitor;
+
+    impl<'de> Visitor<'de> for ParseExpandVisitor {
+        type Value = ParseExpandConfig;
+
+        fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+            formatter.write_str("a map or sequence of string")
+        }
+
+        fn visit_seq<A: SeqAccess<'de>>(self, seq: A) -> Result<Self::Value, A::Error> {
+            let crates =
+                <Vec<String> as Deserialize>::deserialize(SeqAccessDeserializer::new(seq))?;
+            Ok(ParseExpandConfig {
+                crates,
+                all_features: true,
+                default_features: true,
+                features: None,
+                profile: Profile::Debug,
+            })
+        }
+
+        fn visit_map<A: MapAccess<'de>>(self, map: A) -> Result<Self::Value, A::Error> {
+            <ParseExpandConfig as Deserialize>::deserialize(MapAccessDeserializer::new(map))
+        }
+    }
+
+    deserializer.deserialize_any(ParseExpandVisitor)
+}
+
+/// Settings to apply when parsing.
+#[derive(Debug, Default, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct ParseConfig {
+    /// Whether to parse dependencies when generating bindings. When this is true,
+    /// each dependent crate is found using a combination of `cargo metadata` and
+    /// `Cargo.lock`. To further control this behavior, crates can be whitelisted or
+    /// blacklisted using `include` and `exclude` respectively. Additionally in cases
+    /// where crates have types to expose in bindings hidden in macros, a crate can
+    /// be marked in `expand` and `cargo expand` will be used to expand the macros
+    /// before parsing. A crate marked in `expand` doesn't need to be added to any
+    /// whitelist.
+    pub parse_deps: bool,
+    /// An optional whitelist of names of crates to parse
+    pub include: Option<Vec<String>>,
+    /// The names of crates to not parse
+    pub exclude: Vec<String>,
+    /// The configuration options for `rustc -Zunpretty=expanded`
+    #[serde(deserialize_with = "retrocomp_parse_expand_config_deserialize")]
+    pub expand: ParseExpandConfig,
+    /// Whether to use a new temporary target directory when running `rustc -Zunpretty=expanded`.
+    /// This may be required for some build processes.
+    pub clean: bool,
+    /// List of crate names which generate consts, statics, and fns. By default
+    /// no dependent crates generate them.
+    pub extra_bindings: Vec<String>,
+}
+
+impl ParseConfig {
+    pub(crate) fn should_generate_top_level_item(
+        &self,
+        crate_name: &str,
+        binding_crate_name: &str,
+    ) -> bool {
+        if crate_name == binding_crate_name {
+            // Always generate items for the binding crate.
+            return true;
+        }
+
+        self.extra_bindings.iter().any(|dep| dep == crate_name)
+    }
+}
+
+/// Settings to apply to pointers
+#[derive(Debug, Clone, Default, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct PtrConfig {
+    /// Optional attribute to apply to pointers that are required to not be null
+    pub non_null_attribute: Option<String>,
+}
+
+/// Settings specific to Cython bindings.
+#[derive(Debug, Clone, Default, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct CythonConfig {
+    /// Header specified in the top level `cdef extern from header:` declaration.
+    pub header: Option<String>,
+    /// `from module cimport name1, name2, ...` declarations added in the same place
+    /// where you'd get includes in C.
+    pub cimports: BTreeMap<String, Vec<String>>,
+}
+
+/// A collection of settings to customize the generated bindings.
+#[derive(Debug, Clone, Deserialize)]
+#[serde(rename_all = "snake_case")]
+#[serde(deny_unknown_fields)]
+#[serde(default)]
+pub struct Config {
+    /// Optional text to output at the beginning of the file
+    pub header: Option<String>,
+    /// A list of additional includes to put at the beginning of the generated header
+    pub includes: Vec<String>,
+    /// A list of additional system includes to put at the beginning of the generated header
+    pub sys_includes: Vec<String>,
+    /// Optional verbatim code added after the include blocks
+    pub after_includes: Option<String>,
+    /// Optional text to output at the end of the file
+    pub trailer: Option<String>,
+    /// Optional name to use for an include guard
+    pub include_guard: Option<String>,
+    /// Add a `#pragma once` guard
+    pub pragma_once: bool,
+    /// Generates no includes at all. Overrides all other include options
+    ///
+    /// This option is useful when using cbindgen with tools such as python's cffi which
+    /// doesn't understand include directives
+    pub no_includes: bool,
+    /// Optional text to output at major sections to deter manual editing
+    pub autogen_warning: Option<String>,
+    /// Include a comment with the version of cbindgen used to generate the file
+    pub include_version: bool,
+    /// An optional name for the root namespace. Only applicable when language="C++"
+    pub namespace: Option<String>,
+    /// An optional list of namespaces. Only applicable when language="C++"
+    pub namespaces: Option<Vec<String>>,
+    /// An optional list of namespaces to declare as using. Only applicable when language="C++"
+    pub using_namespaces: Option<Vec<String>>,
+    /// The style to use for braces
+    pub braces: Braces,
+    /// The preferred length of a line, used for auto breaking function arguments
+    pub line_length: usize,
+    /// The amount of spaces in a tab
+    pub tab_width: usize,
+    /// The type of line endings to generate
+    pub line_endings: LineEndingStyle,
+    /// The language to output bindings for
+    pub language: Language,
+    /// Include preprocessor defines in C bindings to ensure C++ compatibility
+    pub cpp_compat: bool,
+    /// The style to declare structs, enums and unions in for C
+    pub style: Style,
+    /// Default sort key for functions and constants.
+    pub sort_by: SortKey,
+    /// If this option is true `usize` and `isize` will be converted into `size_t` and `ptrdiff_t`
+    /// instead of `uintptr_t` and `intptr_t` respectively.
+    pub usize_is_size_t: bool,
+    /// The configuration options for parsing
+    pub parse: ParseConfig,
+    /// The configuration options for exporting
+    pub export: ExportConfig,
+    /// The configuration options for macros.
+    pub macro_expansion: MacroExpansionConfig,
+    /// The configuration options for type layouts.
+    pub layout: LayoutConfig,
+    /// The configuration options for functions
+    #[serde(rename = "fn")]
+    pub function: FunctionConfig,
+    /// The configuration options for structs
+    #[serde(rename = "struct")]
+    pub structure: StructConfig,
+    /// The configuration options for enums
+    #[serde(rename = "enum")]
+    pub enumeration: EnumConfig,
+    /// The configuration options for constants
+    #[serde(rename = "const")]
+    pub constant: ConstantConfig,
+    /// Preprocessor defines to use when generating #ifdef's for #[cfg]
+    pub defines: HashMap<String, String>,
+    /// Include doc comments from Rust as documentation
+    pub documentation: bool,
+    /// How documentation comments should be styled.
+    pub documentation_style: DocumentationStyle,
+    /// How much of the documentation should be output for each item.
+    pub documentation_length: DocumentationLength,
+    /// Configuration options for pointers
+    #[serde(rename = "ptr")]
+    pub pointer: PtrConfig,
+    /// Only download sources for dependencies needed for the target platform.
+    ///
+    /// By default, cbindgen will fetch sources for dependencies used on any platform so that if a
+    /// type is defined in terms of a type from a dependency on another target (probably behind a
+    /// `#[cfg]`), cbindgen will be able to generate the appropriate binding as it can see the
+    /// nested type's definition. However, this makes calling cbindgen slower, as it may have to
+    /// download a number of additional dependencies.
+    ///
+    /// As an example, consider this Cargo.toml:
+    ///
+    /// ```toml
+    /// [target.'cfg(windows)'.dependencies]
+    /// windows = "0.7"
+    /// ```
+    ///
+    /// with this declaration in one of the `.rs` files that cbindgen is asked to generate bindings
+    /// for:
+    ///
+    /// ```rust,ignore
+    /// #[cfg(windows)]
+    /// pub struct Error(windows::ErrorCode);
+    /// ```
+    ///
+    /// With the default value (`false`), cbindgen will download the `windows` dependency even when
+    /// not compiling for Windows, and will thus be able to generate the binding for `Error`
+    /// (behind a `#define`).
+    ///
+    /// If this value is instead to `true`, cbindgen will _not_ download the `windows` dependency
+    /// if it's not compiling for Windows, but will also fail to generate a Windows binding for
+    /// `Error` as it does not know the definition for `ErrorCode`.
+    ///
+    /// The target can be chosen via the `TARGET` environment variable (if used
+    /// via the CLI, when ran from a build script cargo sets this variable
+    /// appropriately).
+    pub only_target_dependencies: bool,
+    /// Configuration options specific to Cython.
+    pub cython: CythonConfig,
+}
+
+impl Default for Config {
+    fn default() -> Config {
+        Config {
+            header: None,
+            includes: Vec::new(),
+            sys_includes: Vec::new(),
+            after_includes: None,
+            trailer: None,
+            include_guard: None,
+            pragma_once: false,
+            autogen_warning: None,
+            include_version: false,
+            no_includes: false,
+            namespace: None,
+            namespaces: None,
+            using_namespaces: None,
+            braces: Braces::SameLine,
+            line_length: 100,
+            tab_width: 2,
+            line_endings: LineEndingStyle::default(),
+            language: Language::Cxx,
+            cpp_compat: false,
+            style: Style::default(),
+            usize_is_size_t: false,
+            sort_by: SortKey::None,
+            macro_expansion: Default::default(),
+            parse: ParseConfig::default(),
+            export: ExportConfig::default(),
+            layout: LayoutConfig::default(),
+            function: FunctionConfig::default(),
+            structure: StructConfig::default(),
+            enumeration: EnumConfig::default(),
+            constant: ConstantConfig::default(),
+            defines: HashMap::new(),
+            documentation: true,
+            documentation_style: DocumentationStyle::Auto,
+            documentation_length: DocumentationLength::Full,
+            pointer: PtrConfig::default(),
+            only_target_dependencies: false,
+            cython: CythonConfig::default(),
+        }
+    }
+}
+
+impl Config {
+    pub(crate) fn cpp_compatible_c(&self) -> bool {
+        self.language == Language::C && self.cpp_compat
+    }
+
+    pub(crate) fn include_guard(&self) -> Option<&str> {
+        if self.language == Language::Cython {
+            None
+        } else {
+            self.include_guard.as_deref()
+        }
+    }
+
+    pub(crate) fn includes(&self) -> &[String] {
+        if self.language == Language::Cython {
+            &[]
+        } else {
+            &self.includes
+        }
+    }
+
+    pub(crate) fn sys_includes(&self) -> &[String] {
+        if self.language == Language::Cython {
+            &[]
+        } else {
+            &self.sys_includes
+        }
+    }
+
+    pub fn from_file<P: AsRef<StdPath>>(file_name: P) -> Result<Config, String> {
+        let config_text = fs::read_to_string(file_name.as_ref()).map_err(|_| {
+            format!(
+                "Couldn't open config file: {}.",
+                file_name.as_ref().display()
+            )
+        })?;
+
+        match toml::from_str::<Config>(&config_text) {
+            Ok(x) => Ok(x),
+            Err(e) => Err(format!("Couldn't parse config file: {}.", e)),
+        }
+    }
+
+    pub fn from_root_or_default<P: AsRef<StdPath>>(root: P) -> Config {
+        let c = root.as_ref().join("cbindgen.toml");
+
+        if c.exists() {
+            Config::from_file(c).unwrap()
+        } else {
+            Config::default()
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/declarationtyperesolver.rs b/cbindgen-0.24.5/src/bindgen/declarationtyperesolver.rs
new file mode 100644
index 0000000..e72761e
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/declarationtyperesolver.rs
@@ -0,0 +1,57 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use crate::bindgen::ir::Path;
+use std::collections::hash_map::Entry;
+use std::collections::HashMap;
+
+impl DeclarationType {
+    pub fn to_str(self) -> &'static str {
+        match self {
+            DeclarationType::Struct => "struct",
+            DeclarationType::Enum => "enum",
+            DeclarationType::Union => "union",
+        }
+    }
+}
+
+#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
+pub enum DeclarationType {
+    Struct,
+    Enum,
+    Union,
+}
+
+#[derive(Default)]
+pub struct DeclarationTypeResolver {
+    types: HashMap<Path, Option<DeclarationType>>,
+}
+
+impl DeclarationTypeResolver {
+    fn insert(&mut self, path: &Path, ty: Option<DeclarationType>) {
+        if let Entry::Vacant(vacant_entry) = self.types.entry(path.clone()) {
+            vacant_entry.insert(ty);
+        }
+    }
+
+    pub fn add_enum(&mut self, path: &Path) {
+        self.insert(path, Some(DeclarationType::Enum));
+    }
+
+    pub fn add_struct(&mut self, path: &Path) {
+        self.insert(path, Some(DeclarationType::Struct));
+    }
+
+    pub fn add_union(&mut self, path: &Path) {
+        self.insert(path, Some(DeclarationType::Union));
+    }
+
+    pub fn add_none(&mut self, path: &Path) {
+        self.insert(path, None);
+    }
+
+    pub fn type_for(&self, path: &Path) -> Option<DeclarationType> {
+        *self.types.get(path)?
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/dependencies.rs b/cbindgen-0.24.5/src/bindgen/dependencies.rs
new file mode 100644
index 0000000..6a98738
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/dependencies.rs
@@ -0,0 +1,46 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::cmp::Ordering;
+use std::collections::HashSet;
+
+use crate::bindgen::ir::{ItemContainer, Path};
+
+/// A dependency list is used for gathering what order to output the types.
+#[derive(Default)]
+pub struct Dependencies {
+    pub order: Vec<ItemContainer>,
+    pub items: HashSet<Path>,
+}
+
+impl Dependencies {
+    pub fn new() -> Dependencies {
+        Dependencies {
+            order: Vec::new(),
+            items: HashSet::new(),
+        }
+    }
+
+    pub fn sort(&mut self) {
+        // Sort untagged enums and opaque structs into their own layers because they don't
+        // depend on each other or anything else.
+        let ordering = |a: &ItemContainer, b: &ItemContainer| match (a, b) {
+            (ItemContainer::Enum(x), ItemContainer::Enum(y))
+                if x.tag.is_none() && y.tag.is_none() =>
+            {
+                x.path.cmp(&y.path)
+            }
+            (ItemContainer::Enum(x), _) if x.tag.is_none() => Ordering::Less,
+            (_, ItemContainer::Enum(x)) if x.tag.is_none() => Ordering::Greater,
+
+            (ItemContainer::OpaqueItem(x), ItemContainer::OpaqueItem(y)) => x.path.cmp(&y.path),
+            (&ItemContainer::OpaqueItem(_), _) => Ordering::Less,
+            (_, &ItemContainer::OpaqueItem(_)) => Ordering::Greater,
+
+            _ => Ordering::Equal,
+        };
+
+        self.order.sort_by(ordering);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/error.rs b/cbindgen-0.24.5/src/bindgen/error.rs
new file mode 100644
index 0000000..e4002f6
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/error.rs
@@ -0,0 +1,88 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::error;
+use std::fmt;
+
+pub use crate::bindgen::cargo::cargo_expand::Error as CargoExpandError;
+pub use crate::bindgen::cargo::cargo_metadata::Error as CargoMetadataError;
+pub use crate::bindgen::cargo::cargo_toml::Error as CargoTomlError;
+pub use syn::parse::Error as ParseError;
+
+#[derive(Debug)]
+#[allow(clippy::enum_variant_names)]
+pub enum Error {
+    CargoMetadata(String, CargoMetadataError),
+    CargoToml(String, CargoTomlError),
+    CargoExpand(String, CargoExpandError),
+    ParseSyntaxError {
+        crate_name: String,
+        src_path: String,
+        error: ParseError,
+    },
+    ParseCannotOpenFile {
+        crate_name: String,
+        src_path: String,
+    },
+}
+
+impl fmt::Display for Error {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match *self {
+            Error::CargoMetadata(ref path, ref error) => write!(
+                f,
+                "Couldn't execute `cargo metadata` with manifest {:?}: {:?}",
+                path, error
+            ),
+            Error::CargoToml(ref path, ref error) => {
+                write!(f, "Couldn't load manifest file {:?}: {:?}", path, error)
+            }
+            Error::CargoExpand(ref crate_name, ref error) => write!(
+                f,
+                "Parsing crate `{}`: couldn't run `cargo rustc -Zunpretty=expanded`: {:?}",
+                crate_name, error
+            ),
+            Error::ParseSyntaxError {
+                ref crate_name,
+                ref src_path,
+                ref error,
+            } => {
+                write!(
+                    f,
+                    "Parsing crate `{}`:`{}`:\n{:?}",
+                    crate_name, src_path, error
+                )?;
+
+                if !src_path.is_empty() {
+                    write!(
+                        f,
+                        "\nTry running `rustc -Z parse-only {}` to see a nicer error message",
+                        src_path,
+                    )?
+                }
+                Ok(())
+            }
+            Error::ParseCannotOpenFile {
+                ref crate_name,
+                ref src_path,
+            } => write!(
+                f,
+                "Parsing crate `{}`: cannot open file `{}`.",
+                crate_name, src_path
+            ),
+        }
+    }
+}
+
+impl error::Error for Error {
+    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+        match self {
+            Error::CargoMetadata(_, ref error) => Some(error),
+            Error::CargoToml(_, ref error) => Some(error),
+            Error::CargoExpand(_, ref error) => Some(error),
+            Error::ParseSyntaxError { ref error, .. } => Some(error),
+            Error::ParseCannotOpenFile { .. } => None,
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/annotation.rs b/cbindgen-0.24.5/src/bindgen/ir/annotation.rs
new file mode 100644
index 0000000..c3c8db0
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/annotation.rs
@@ -0,0 +1,179 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::hash_map::Entry;
+use std::collections::HashMap;
+use std::str::FromStr;
+
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::utilities::SynAttributeHelpers;
+
+// A system for specifying properties on items. Annotations are
+// given through document comments and parsed by this code.
+//
+// An annotation is in the form cbindgen:PROPERTY=VALUE
+// Where PROPERTY depends on the item
+// Where VALUE can be
+//  * list - [Item1, Item2, Item3, ...]
+//  * atom - Foo
+//  * bool - true,false
+// Examples:
+//  * cbindgen:field-names=[mHandle, mNamespace]
+//  * cbindgen:function-postfix=WR_DESTRUCTOR_SAFE
+
+/// A value specified by an annotation.
+#[derive(Debug, Clone)]
+pub enum AnnotationValue {
+    List(Vec<String>),
+    Atom(Option<String>),
+    Bool(bool),
+}
+
+/// A set of annotations specified by a document comment.
+#[derive(Debug, Default, Clone)]
+pub struct AnnotationSet {
+    annotations: HashMap<String, AnnotationValue>,
+    pub must_use: bool,
+}
+
+impl AnnotationSet {
+    pub fn new() -> AnnotationSet {
+        AnnotationSet {
+            annotations: HashMap::new(),
+            must_use: false,
+        }
+    }
+
+    pub fn is_empty(&self) -> bool {
+        self.annotations.is_empty() && !self.must_use
+    }
+
+    pub(crate) fn must_use(&self, config: &Config) -> bool {
+        self.must_use && config.language != Language::Cython
+    }
+
+    pub fn load(attrs: &[syn::Attribute]) -> Result<AnnotationSet, String> {
+        let lines = attrs.get_comment_lines();
+        let lines: Vec<&str> = lines
+            .iter()
+            .filter_map(|line| {
+                let line = line.trim_start();
+                if !line.starts_with("cbindgen:") {
+                    return None;
+                }
+
+                Some(line)
+            })
+            .collect();
+
+        let must_use = attrs.has_attr_word("must_use");
+
+        let mut annotations = HashMap::new();
+
+        // Look at each line for an annotation
+        for line in lines {
+            debug_assert!(line.starts_with("cbindgen:"));
+
+            // Remove the "cbindgen:" prefix
+            let annotation = &line[9..];
+
+            // Split the annotation in two
+            let parts: Vec<&str> = annotation.split('=').map(|x| x.trim()).collect();
+
+            if parts.len() > 2 {
+                return Err(format!("Couldn't parse {}.", line));
+            }
+
+            // Grab the name that this annotation is modifying
+            let name = parts[0];
+
+            // If the annotation only has a name, assume it's setting a bool flag
+            if parts.len() == 1 {
+                annotations.insert(name.to_string(), AnnotationValue::Bool(true));
+                continue;
+            }
+
+            // Parse the value we're setting the name to
+            let value = parts[1];
+
+            if let Some(x) = parse_list(value) {
+                annotations.insert(name.to_string(), AnnotationValue::List(x));
+                continue;
+            }
+            if let Ok(x) = value.parse::<bool>() {
+                annotations.insert(name.to_string(), AnnotationValue::Bool(x));
+                continue;
+            }
+            annotations.insert(
+                name.to_string(),
+                if value.is_empty() {
+                    AnnotationValue::Atom(None)
+                } else {
+                    AnnotationValue::Atom(Some(value.to_string()))
+                },
+            );
+        }
+
+        Ok(AnnotationSet {
+            annotations,
+            must_use,
+        })
+    }
+
+    /// Adds an annotation value if none is specified.
+    pub fn add_default(&mut self, name: &str, value: AnnotationValue) {
+        if let Entry::Vacant(e) = self.annotations.entry(name.to_string()) {
+            e.insert(value);
+        }
+    }
+
+    pub fn list(&self, name: &str) -> Option<Vec<String>> {
+        match self.annotations.get(name) {
+            Some(AnnotationValue::List(x)) => Some(x.clone()),
+            _ => None,
+        }
+    }
+    pub fn atom(&self, name: &str) -> Option<Option<String>> {
+        match self.annotations.get(name) {
+            Some(AnnotationValue::Atom(x)) => Some(x.clone()),
+            _ => None,
+        }
+    }
+    pub fn bool(&self, name: &str) -> Option<bool> {
+        match self.annotations.get(name) {
+            Some(AnnotationValue::Bool(x)) => Some(*x),
+            _ => None,
+        }
+    }
+
+    pub fn parse_atom<T>(&self, name: &str) -> Option<T>
+    where
+        T: Default + FromStr,
+    {
+        match self.annotations.get(name) {
+            Some(AnnotationValue::Atom(x)) => Some(
+                x.as_ref()
+                    .map_or(T::default(), |y| y.parse::<T>().ok().unwrap()),
+            ),
+            _ => None,
+        }
+    }
+}
+
+/// Parse lists like "[x, y, z]". This is not implemented efficiently or well.
+fn parse_list(list: &str) -> Option<Vec<String>> {
+    if list.len() < 2 {
+        return None;
+    }
+
+    match (list.chars().next(), list.chars().last()) {
+        (Some('['), Some(']')) => Some(
+            list[1..list.len() - 1]
+                .split(',')
+                .map(|x| x.trim().to_string())
+                .collect(),
+        ),
+        _ => None,
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/cfg.rs b/cbindgen-0.24.5/src/bindgen/ir/cfg.rs
new file mode 100644
index 0000000..e8aa412
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/cfg.rs
@@ -0,0 +1,365 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::fmt;
+use std::io::Write;
+
+use crate::bindgen::cargo::cargo_metadata::Dependency;
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::writer::SourceWriter;
+
+#[derive(PartialEq, Eq)]
+enum DefineKey<'a> {
+    Boolean(&'a str),
+    Named(&'a str, &'a str),
+}
+
+impl<'a> DefineKey<'a> {
+    fn load(key: &str) -> DefineKey {
+        // TODO: dirty parser
+        if !key.contains('=') {
+            return DefineKey::Boolean(key);
+        }
+
+        let mut splits = key.trim().split('=');
+
+        let name = match splits.next() {
+            Some(n) => n.trim(),
+            None => return DefineKey::Boolean(key),
+        };
+
+        let value = match splits.next() {
+            Some(v) => v.trim(),
+            None => return DefineKey::Boolean(key),
+        };
+
+        if splits.next().is_some() {
+            return DefineKey::Boolean(key);
+        }
+
+        DefineKey::Named(name, value)
+    }
+}
+
+#[derive(Debug, Clone)]
+pub enum Cfg {
+    Boolean(String),
+    Named(String, String),
+    Any(Vec<Cfg>),
+    All(Vec<Cfg>),
+    Not(Box<Cfg>),
+}
+
+impl fmt::Display for Cfg {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self {
+            Cfg::Boolean(key) => write!(f, "{}", key),
+            Cfg::Named(key, value) => write!(f, "{} = {:?}", key, value),
+            Cfg::Any(cfgs) => {
+                write!(f, "any(")?;
+                for (index, cfg) in cfgs.iter().enumerate() {
+                    if index > 0 {
+                        write!(f, ", ")?;
+                    }
+                    write!(f, "{}", cfg)?;
+                }
+                write!(f, ")")
+            }
+            Cfg::All(cfgs) => {
+                write!(f, "all(")?;
+                for (index, cfg) in cfgs.iter().enumerate() {
+                    if index > 0 {
+                        write!(f, ", ")?;
+                    }
+                    write!(f, "{}", cfg)?;
+                }
+                write!(f, ")")
+            }
+            Cfg::Not(cfg) => write!(f, "not({})", cfg),
+        }
+    }
+}
+
+impl Cfg {
+    pub fn join(cfgs: &[Cfg]) -> Option<Cfg> {
+        if cfgs.is_empty() {
+            None
+        } else {
+            Some(Cfg::All(cfgs.to_owned()))
+        }
+    }
+
+    pub fn append(parent: Option<&Cfg>, child: Option<Cfg>) -> Option<Cfg> {
+        match (parent, child) {
+            (None, None) => None,
+            (None, Some(child)) => Some(child),
+            (Some(parent), None) => Some(parent.clone()),
+            (Some(parent), Some(child)) => Some(Cfg::All(vec![parent.clone(), child])),
+        }
+    }
+
+    pub fn load(attrs: &[syn::Attribute]) -> Option<Cfg> {
+        let mut configs = Vec::new();
+
+        for attr in attrs {
+            if let Ok(syn::Meta::List(syn::MetaList { path, nested, .. })) = attr.parse_meta() {
+                if !path.is_ident("cfg") || nested.len() != 1 {
+                    continue;
+                }
+
+                if let Some(config) = Cfg::load_single(nested.first().unwrap()) {
+                    configs.push(config);
+                }
+            }
+        }
+
+        match configs.len() {
+            0 => None,
+            1 => Some(configs.pop().unwrap()),
+            _ => Some(Cfg::All(configs)),
+        }
+    }
+
+    pub fn load_metadata(dependency: &Dependency) -> Option<Cfg> {
+        let target = dependency.target.as_ref()?;
+        match syn::parse_str::<syn::Meta>(target) {
+            Ok(target) => {
+                // Parsing succeeded using the #[cfg] syntax
+                if let syn::Meta::List(syn::MetaList { path, nested, .. }) = target {
+                    if !path.is_ident("cfg") || nested.len() != 1 {
+                        return None;
+                    }
+                    Cfg::load_single(nested.first().unwrap())
+                } else {
+                    None
+                }
+            }
+            Err(_) => {
+                // Parsing failed using #[cfg], this may be a literal target
+                // name
+                Cfg::load_single(&syn::NestedMeta::Lit(syn::Lit::Str(syn::LitStr::new(
+                    target,
+                    proc_macro2::Span::call_site(),
+                ))))
+            }
+        }
+    }
+
+    fn load_single(item: &syn::NestedMeta) -> Option<Cfg> {
+        Some(match *item {
+            syn::NestedMeta::Meta(syn::Meta::Path(ref path)) => {
+                Cfg::Boolean(format!("{}", path.segments.first().unwrap().ident))
+            }
+            syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue {
+                ref path,
+                lit: syn::Lit::Str(ref value),
+                ..
+            })) => Cfg::Named(
+                format!("{}", path.segments.first().unwrap().ident),
+                value.value(),
+            ),
+            syn::NestedMeta::Meta(syn::Meta::List(syn::MetaList {
+                ref path,
+                ref nested,
+                ..
+            })) => {
+                if path.is_ident("any") {
+                    Cfg::Any(Cfg::load_list(nested.iter())?)
+                } else if path.is_ident("all") {
+                    Cfg::All(Cfg::load_list(nested.iter())?)
+                } else if path.is_ident("not") {
+                    if nested.len() != 1 {
+                        return None;
+                    }
+
+                    Cfg::Not(Box::new(Cfg::load_single(&nested[0])?))
+                } else {
+                    return None;
+                }
+            }
+            _ => return None,
+        })
+    }
+
+    fn load_list<'a, I: Iterator<Item = &'a syn::NestedMeta>>(attrs: I) -> Option<Vec<Cfg>> {
+        let mut configs = Vec::new();
+
+        for attr in attrs {
+            configs.push(Cfg::load_single(attr)?);
+        }
+
+        if configs.is_empty() {
+            None
+        } else {
+            Some(configs)
+        }
+    }
+}
+
+pub trait ToCondition: Sized {
+    fn to_condition(&self, config: &Config) -> Option<Condition>;
+}
+
+impl ToCondition for Option<Cfg> {
+    fn to_condition(&self, config: &Config) -> Option<Condition> {
+        self.as_ref()?.to_condition(config)
+    }
+}
+
+impl ToCondition for Cfg {
+    fn to_condition(&self, config: &Config) -> Option<Condition> {
+        match *self {
+            Cfg::Boolean(ref cfg_name) => {
+                let define = config
+                    .defines
+                    .iter()
+                    .find(|(key, ..)| DefineKey::Boolean(cfg_name) == DefineKey::load(key));
+                if let Some((_, define)) = define {
+                    Some(Condition::Define(define.to_owned()))
+                } else {
+                    warn!(
+                        "Missing `[defines]` entry for `{}` in cbindgen config.",
+                        self,
+                    );
+                    None
+                }
+            }
+            Cfg::Named(ref cfg_name, ref cfg_value) => {
+                let define = config.defines.iter().find(|(key, ..)| {
+                    DefineKey::Named(cfg_name, cfg_value) == DefineKey::load(key)
+                });
+                if let Some((_, define)) = define {
+                    Some(Condition::Define(define.to_owned()))
+                } else {
+                    warn!(
+                        "Missing `[defines]` entry for `{}` in cbindgen config.",
+                        self,
+                    );
+                    None
+                }
+            }
+            Cfg::Any(ref children) => {
+                let conditions: Vec<_> = children
+                    .iter()
+                    .filter_map(|x| x.to_condition(config))
+                    .collect();
+                match conditions.len() {
+                    0 => None,
+                    1 => conditions.into_iter().next(),
+                    _ => Some(Condition::Any(conditions)),
+                }
+            }
+            Cfg::All(ref children) => {
+                let cfgs: Vec<_> = children
+                    .iter()
+                    .filter_map(|x| x.to_condition(config))
+                    .collect();
+                match cfgs.len() {
+                    0 => None,
+                    1 => cfgs.into_iter().next(),
+                    _ => Some(Condition::All(cfgs)),
+                }
+            }
+            Cfg::Not(ref child) => child
+                .to_condition(config)
+                .map(|cfg| Condition::Not(Box::new(cfg))),
+        }
+    }
+}
+
+#[derive(Debug, Clone)]
+pub enum Condition {
+    Define(String),
+    Any(Vec<Condition>),
+    All(Vec<Condition>),
+    Not(Box<Condition>),
+}
+
+impl Condition {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        match *self {
+            Condition::Define(ref define) => {
+                if config.language == Language::Cython {
+                    write!(out, "{}", define);
+                } else {
+                    out.write("defined(");
+                    write!(out, "{}", define);
+                    out.write(")");
+                }
+            }
+            Condition::Any(ref conditions) => {
+                out.write("(");
+                for (i, condition) in conditions.iter().enumerate() {
+                    if i != 0 {
+                        out.write(if config.language == Language::Cython {
+                            " or "
+                        } else {
+                            " || "
+                        });
+                    }
+                    condition.write(config, out);
+                }
+                out.write(")");
+            }
+            Condition::All(ref conditions) => {
+                out.write("(");
+                for (i, condition) in conditions.iter().enumerate() {
+                    if i != 0 {
+                        out.write(if config.language == Language::Cython {
+                            " and "
+                        } else {
+                            " && "
+                        });
+                    }
+                    condition.write(config, out);
+                }
+                out.write(")");
+            }
+            Condition::Not(ref condition) => {
+                out.write(if config.language == Language::Cython {
+                    "not "
+                } else {
+                    "!"
+                });
+                condition.write(config, out);
+            }
+        }
+    }
+}
+
+pub trait ConditionWrite {
+    fn write_before<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>);
+    fn write_after<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>);
+}
+
+impl ConditionWrite for Option<Condition> {
+    fn write_before<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        if let Some(ref cfg) = *self {
+            if config.language == Language::Cython {
+                out.write("IF ");
+                cfg.write(config, out);
+                out.open_brace();
+            } else {
+                out.push_set_spaces(0);
+                out.write("#if ");
+                cfg.write(config, out);
+                out.pop_set_spaces();
+                out.new_line();
+            }
+        }
+    }
+
+    fn write_after<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        if self.is_some() {
+            if config.language == Language::Cython {
+                out.close_brace(false);
+            } else {
+                out.new_line();
+                out.push_set_spaces(0);
+                out.write("#endif");
+                out.pop_set_spaces();
+            }
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/constant.rs b/cbindgen-0.24.5/src/bindgen/ir/constant.rs
new file mode 100644
index 0000000..42182ab
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/constant.rs
@@ -0,0 +1,813 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::borrow::Cow;
+use std::collections::HashMap;
+use std::io::Write;
+
+use syn::ext::IdentExt;
+use syn::{self, UnOp};
+
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, ConditionWrite, Documentation, GenericParams, Item, ItemContainer, Path,
+    Struct, ToCondition, Type,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::writer::{Source, SourceWriter};
+use crate::bindgen::Bindings;
+
+fn member_to_ident(member: &syn::Member) -> String {
+    match member {
+        syn::Member::Named(ref name) => name.unraw().to_string(),
+        syn::Member::Unnamed(ref index) => format!("_{}", index.index),
+    }
+}
+
+// TODO: Maybe add support to more std associated constants.
+fn to_known_assoc_constant(associated_to: &Path, name: &str) -> Option<String> {
+    use crate::bindgen::ir::{IntKind, PrimitiveType};
+
+    if name != "MAX" && name != "MIN" {
+        return None;
+    }
+
+    let prim = PrimitiveType::maybe(associated_to.name())?;
+    let prefix = match prim {
+        PrimitiveType::Integer {
+            kind,
+            signed,
+            zeroable: _,
+        } => match kind {
+            IntKind::B8 => {
+                if signed {
+                    "INT8"
+                } else {
+                    "UINT8"
+                }
+            }
+            IntKind::B16 => {
+                if signed {
+                    "INT16"
+                } else {
+                    "UINT16"
+                }
+            }
+            IntKind::B32 => {
+                if signed {
+                    "INT32"
+                } else {
+                    "UINT32"
+                }
+            }
+            IntKind::B64 => {
+                if signed {
+                    "INT64"
+                } else {
+                    "UINT64"
+                }
+            }
+            _ => return None,
+        },
+        _ => return None,
+    };
+    Some(format!("{}_{}", prefix, name))
+}
+
+#[derive(Debug, Clone)]
+pub enum Literal {
+    Expr(String),
+    Path {
+        associated_to: Option<(Path, String)>,
+        name: String,
+    },
+    PostfixUnaryOp {
+        op: &'static str,
+        value: Box<Literal>,
+    },
+    BinOp {
+        left: Box<Literal>,
+        op: &'static str,
+        right: Box<Literal>,
+    },
+    FieldAccess {
+        base: Box<Literal>,
+        field: String,
+    },
+    Struct {
+        path: Path,
+        export_name: String,
+        fields: HashMap<String, Literal>,
+    },
+    Cast {
+        ty: Type,
+        value: Box<Literal>,
+    },
+}
+
+impl Literal {
+    fn replace_self_with(&mut self, self_ty: &Path) {
+        match *self {
+            Literal::PostfixUnaryOp { ref mut value, .. } => {
+                value.replace_self_with(self_ty);
+            }
+            Literal::BinOp {
+                ref mut left,
+                ref mut right,
+                ..
+            } => {
+                left.replace_self_with(self_ty);
+                right.replace_self_with(self_ty);
+            }
+            Literal::FieldAccess { ref mut base, .. } => {
+                base.replace_self_with(self_ty);
+            }
+            Literal::Struct {
+                ref mut path,
+                ref mut export_name,
+                ref mut fields,
+            } => {
+                if path.replace_self_with(self_ty) {
+                    *export_name = self_ty.name().to_owned();
+                }
+                for ref mut expr in fields.values_mut() {
+                    expr.replace_self_with(self_ty);
+                }
+            }
+            Literal::Cast {
+                ref mut ty,
+                ref mut value,
+            } => {
+                ty.replace_self_with(self_ty);
+                value.replace_self_with(self_ty);
+            }
+            Literal::Path {
+                ref mut associated_to,
+                ..
+            } => {
+                if let Some((ref mut path, ref mut export_name)) = *associated_to {
+                    if path.replace_self_with(self_ty) {
+                        *export_name = self_ty.name().to_owned();
+                    }
+                }
+            }
+            Literal::Expr(..) => {}
+        }
+    }
+
+    fn is_valid(&self, bindings: &Bindings) -> bool {
+        match *self {
+            Literal::Expr(..) => true,
+            Literal::Path {
+                ref associated_to,
+                ref name,
+            } => {
+                if let Some((ref path, _export_name)) = associated_to {
+                    return bindings.struct_exists(path)
+                        || to_known_assoc_constant(path, name).is_some();
+                }
+                true
+            }
+            Literal::PostfixUnaryOp { ref value, .. } => value.is_valid(bindings),
+            Literal::BinOp {
+                ref left,
+                ref right,
+                ..
+            } => left.is_valid(bindings) && right.is_valid(bindings),
+            Literal::FieldAccess { ref base, .. } => base.is_valid(bindings),
+            Literal::Struct { ref path, .. } => bindings.struct_exists(path),
+            Literal::Cast { ref value, .. } => value.is_valid(bindings),
+        }
+    }
+
+    fn can_be_constexpr(&self) -> bool {
+        !self.has_pointer_casts()
+    }
+
+    fn visit(&self, visitor: &mut impl FnMut(&Self) -> bool) -> bool {
+        if !visitor(self) {
+            return false;
+        }
+        match self {
+            Literal::Expr(..) | Literal::Path { .. } => true,
+            Literal::PostfixUnaryOp { ref value, .. } => value.visit(visitor),
+            Literal::BinOp {
+                ref left,
+                ref right,
+                ..
+            } => left.visit(visitor) && right.visit(visitor),
+            Literal::FieldAccess { ref base, .. } => base.visit(visitor),
+            Literal::Struct { ref fields, .. } => {
+                for (_name, field) in fields.iter() {
+                    if !field.visit(visitor) {
+                        return false;
+                    }
+                }
+                true
+            }
+            Literal::Cast { ref value, .. } => value.visit(visitor),
+        }
+    }
+
+    fn has_pointer_casts(&self) -> bool {
+        let mut has_pointer_casts = false;
+        self.visit(&mut |lit| {
+            if let Literal::Cast { ref ty, .. } = *lit {
+                has_pointer_casts = has_pointer_casts || ty.is_ptr();
+            }
+            !has_pointer_casts
+        });
+        has_pointer_casts
+    }
+
+    pub fn uses_only_primitive_types(&self) -> bool {
+        let mut uses_only_primitive_types = true;
+        self.visit(&mut |lit| {
+            // XXX This is a bit sketchy, but alas.
+            uses_only_primitive_types = uses_only_primitive_types
+                && match *lit {
+                    Literal::Struct { .. } => false,
+                    Literal::Cast { ref ty, .. } => ty.is_primitive_or_ptr_primitive(),
+                    _ => true,
+                };
+            uses_only_primitive_types
+        });
+        uses_only_primitive_types
+    }
+}
+
+impl Literal {
+    pub fn rename_for_config(&mut self, config: &Config) {
+        match self {
+            Literal::Struct {
+                ref mut export_name,
+                fields,
+                ..
+            } => {
+                config.export.rename(export_name);
+                for lit in fields.values_mut() {
+                    lit.rename_for_config(config);
+                }
+            }
+            Literal::FieldAccess { ref mut base, .. } => {
+                base.rename_for_config(config);
+            }
+            Literal::Path {
+                ref mut associated_to,
+                ref mut name,
+            } => {
+                if let Some((_path, ref mut export_name)) = associated_to {
+                    config.export.rename(export_name);
+                } else {
+                    config.export.rename(name);
+                }
+            }
+            Literal::PostfixUnaryOp { ref mut value, .. } => {
+                value.rename_for_config(config);
+            }
+            Literal::BinOp {
+                ref mut left,
+                ref mut right,
+                ..
+            } => {
+                left.rename_for_config(config);
+                right.rename_for_config(config);
+            }
+            Literal::Expr(_) => {}
+            Literal::Cast {
+                ref mut ty,
+                ref mut value,
+            } => {
+                ty.rename_for_config(config, &GenericParams::default());
+                value.rename_for_config(config);
+            }
+        }
+    }
+
+    // Translate from full blown `syn::Expr` into a simpler `Literal` type
+    pub fn load(expr: &syn::Expr) -> Result<Literal, String> {
+        match *expr {
+            // Match binary expressions of the form `a * b`
+            syn::Expr::Binary(ref bin_expr) => {
+                let l = Self::load(&bin_expr.left)?;
+                let r = Self::load(&bin_expr.right)?;
+                let op = match bin_expr.op {
+                    syn::BinOp::Add(..) => "+",
+                    syn::BinOp::Sub(..) => "-",
+                    syn::BinOp::Mul(..) => "*",
+                    syn::BinOp::Div(..) => "/",
+                    syn::BinOp::Rem(..) => "%",
+                    syn::BinOp::And(..) => "&&",
+                    syn::BinOp::Or(..) => "||",
+                    syn::BinOp::BitXor(..) => "^",
+                    syn::BinOp::BitAnd(..) => "&",
+                    syn::BinOp::BitOr(..) => "|",
+                    syn::BinOp::Shl(..) => "<<",
+                    syn::BinOp::Shr(..) => ">>",
+                    syn::BinOp::Eq(..) => "==",
+                    syn::BinOp::Lt(..) => "<",
+                    syn::BinOp::Le(..) => "<=",
+                    syn::BinOp::Ne(..) => "!=",
+                    syn::BinOp::Ge(..) => ">=",
+                    syn::BinOp::Gt(..) => ">",
+                    syn::BinOp::AddEq(..) => "+=",
+                    syn::BinOp::SubEq(..) => "-=",
+                    syn::BinOp::MulEq(..) => "*=",
+                    syn::BinOp::DivEq(..) => "/=",
+                    syn::BinOp::RemEq(..) => "%=",
+                    syn::BinOp::BitXorEq(..) => "^=",
+                    syn::BinOp::BitAndEq(..) => "&=",
+                    syn::BinOp::BitOrEq(..) => "|=",
+                    syn::BinOp::ShlEq(..) => ">>=",
+                    syn::BinOp::ShrEq(..) => "<<=",
+                };
+                Ok(Literal::BinOp {
+                    left: Box::new(l),
+                    op,
+                    right: Box::new(r),
+                })
+            }
+
+            // Match literals like true, 'a', 32 etc
+            syn::Expr::Lit(syn::ExprLit { ref lit, .. }) => {
+                match lit {
+                    syn::Lit::Byte(ref value) => Ok(Literal::Expr(format!("{}", value.value()))),
+                    syn::Lit::Char(ref value) => Ok(Literal::Expr(match value.value() as u32 {
+                        0..=255 => format!("'{}'", value.value().escape_default()),
+                        other_code => format!(r"U'\U{:08X}'", other_code),
+                    })),
+                    syn::Lit::Int(ref value) => {
+                        let suffix = match value.suffix() {
+                            "u64" => "ull",
+                            "i64" => "ll",
+                            "u32" => "u",
+                            _ if value.base10_parse::<i64>().is_err() => "ull",
+                            _ => "",
+                        };
+                        Ok(Literal::Expr(format!(
+                            "{}{}",
+                            value.base10_digits(),
+                            suffix
+                        )))
+                    }
+                    syn::Lit::Float(ref value) => {
+                        Ok(Literal::Expr(value.base10_digits().to_string()))
+                    }
+                    syn::Lit::Bool(ref value) => Ok(Literal::Expr(format!("{}", value.value))),
+                    // TODO: Add support for byte string and Verbatim
+                    _ => Err(format!("Unsupported literal expression. {:?}", *lit)),
+                }
+            }
+
+            syn::Expr::Field(syn::ExprField {
+                ref base,
+                ref member,
+                ..
+            }) => Ok(Literal::FieldAccess {
+                base: Box::new(Literal::load(base)?),
+                field: member_to_ident(member),
+            }),
+
+            syn::Expr::Call(syn::ExprCall {
+                ref func, ref args, ..
+            }) => {
+                let struct_name = match Literal::load(func)? {
+                    Literal::Path {
+                        associated_to: None,
+                        name,
+                    } => name,
+                    _ => return Err(format!("Unsupported call expression. {:?}", *expr)),
+                };
+                let mut fields = HashMap::<String, Literal>::default();
+                for (index, arg) in args.iter().enumerate() {
+                    let ident =
+                        member_to_ident(&syn::Member::Unnamed(syn::Index::from(index))).to_string();
+                    let value = Literal::load(arg)?;
+                    fields.insert(ident, value);
+                }
+                Ok(Literal::Struct {
+                    path: Path::new(struct_name.clone()),
+                    export_name: struct_name,
+                    fields,
+                })
+            }
+
+            syn::Expr::Struct(syn::ExprStruct {
+                ref path,
+                ref fields,
+                ..
+            }) => {
+                let struct_name = path.segments[0].ident.unraw().to_string();
+                let mut field_map = HashMap::<String, Literal>::default();
+                for field in fields {
+                    let ident = member_to_ident(&field.member).to_string();
+                    let value = Literal::load(&field.expr)?;
+                    field_map.insert(ident, value);
+                }
+                Ok(Literal::Struct {
+                    path: Path::new(struct_name.clone()),
+                    export_name: struct_name,
+                    fields: field_map,
+                })
+            }
+
+            syn::Expr::Unary(syn::ExprUnary {
+                ref op, ref expr, ..
+            }) => match *op {
+                UnOp::Not(_) => {
+                    let val = Self::load(expr)?;
+                    Ok(Literal::PostfixUnaryOp {
+                        op: "~",
+                        value: Box::new(val),
+                    })
+                }
+                UnOp::Neg(_) => {
+                    let val = Self::load(expr)?;
+                    Ok(Literal::PostfixUnaryOp {
+                        op: "-",
+                        value: Box::new(val),
+                    })
+                }
+                _ => Err(format!("Unsupported Unary expression. {:?}", *op)),
+            },
+
+            // Match identifiers, like `5 << SHIFT`
+            syn::Expr::Path(syn::ExprPath { ref path, .. }) => {
+                // Handle only the simplest identifiers and Associated::IDENT
+                // kind of syntax.
+                Ok(match path.segments.len() {
+                    1 => Literal::Path {
+                        associated_to: None,
+                        name: path.segments[0].ident.to_string(),
+                    },
+                    2 => {
+                        let struct_name = path.segments[0].ident.to_string();
+                        Literal::Path {
+                            associated_to: Some((Path::new(&struct_name), struct_name)),
+                            name: path.segments[1].ident.to_string(),
+                        }
+                    }
+                    _ => return Err(format!("Unsupported path expression. {:?}", path)),
+                })
+            }
+
+            syn::Expr::Paren(syn::ExprParen { ref expr, .. }) => Self::load(expr),
+
+            syn::Expr::Cast(syn::ExprCast {
+                ref expr, ref ty, ..
+            }) => {
+                let val = Self::load(expr)?;
+                match Type::load(ty)? {
+                    Some(ty) => Ok(Literal::Cast {
+                        ty,
+                        value: Box::new(val),
+                    }),
+                    None => Err("Cannot cast to zero sized type.".to_owned()),
+                }
+            }
+
+            _ => Err(format!("Unsupported expression. {:?}", *expr)),
+        }
+    }
+
+    pub(crate) fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        match self {
+            Literal::Expr(v) => match (&**v, config.language) {
+                ("true", Language::Cython) => write!(out, "True"),
+                ("false", Language::Cython) => write!(out, "False"),
+                (v, _) => write!(out, "{}", v),
+            },
+            Literal::Path {
+                ref associated_to,
+                ref name,
+            } => {
+                if let Some((ref path, ref export_name)) = associated_to {
+                    if let Some(known) = to_known_assoc_constant(path, name) {
+                        return write!(out, "{}", known);
+                    }
+                    let path_separator = match config.language {
+                        Language::Cython | Language::C => "_",
+                        Language::Cxx => {
+                            if config.structure.associated_constants_in_body {
+                                "::"
+                            } else {
+                                "_"
+                            }
+                        }
+                    };
+                    write!(out, "{}{}", export_name, path_separator)
+                }
+                write!(out, "{}", name)
+            }
+            Literal::FieldAccess {
+                ref base,
+                ref field,
+            } => {
+                write!(out, "(");
+                base.write(config, out);
+                write!(out, ").{}", field);
+            }
+            Literal::PostfixUnaryOp { op, ref value } => {
+                write!(out, "{}", op);
+                value.write(config, out);
+            }
+            Literal::BinOp {
+                ref left,
+                op,
+                ref right,
+            } => {
+                write!(out, "(");
+                left.write(config, out);
+                write!(out, " {} ", op);
+                right.write(config, out);
+                write!(out, ")");
+            }
+            Literal::Cast { ref ty, ref value } => {
+                out.write(if config.language == Language::Cython {
+                    "<"
+                } else {
+                    "("
+                });
+                ty.write(config, out);
+                out.write(if config.language == Language::Cython {
+                    ">"
+                } else {
+                    ")"
+                });
+                value.write(config, out);
+            }
+            Literal::Struct {
+                export_name,
+                fields,
+                path,
+            } => {
+                match config.language {
+                    Language::C => write!(out, "({})", export_name),
+                    Language::Cxx => write!(out, "{}", export_name),
+                    Language::Cython => write!(out, "<{}>", export_name),
+                }
+
+                write!(out, "{{ ");
+                let mut is_first_field = true;
+                // In C++, same order as defined is required.
+                let ordered_fields = out.bindings().struct_field_names(path);
+                for ordered_key in ordered_fields.iter() {
+                    if let Some(lit) = fields.get(ordered_key) {
+                        if !is_first_field {
+                            write!(out, ", ");
+                        } else {
+                            is_first_field = false;
+                        }
+                        match config.language {
+                            Language::Cxx => write!(out, "/* .{} = */ ", ordered_key),
+                            Language::C => write!(out, ".{} = ", ordered_key),
+                            Language::Cython => {}
+                        }
+                        lit.write(config, out);
+                    }
+                }
+                write!(out, " }}");
+            }
+        }
+    }
+}
+
+#[derive(Debug, Clone)]
+pub struct Constant {
+    pub path: Path,
+    pub export_name: String,
+    pub ty: Type,
+    pub value: Literal,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+    pub associated_to: Option<Path>,
+}
+
+impl Constant {
+    pub fn load(
+        path: Path,
+        mod_cfg: Option<&Cfg>,
+        ty: &syn::Type,
+        expr: &syn::Expr,
+        attrs: &[syn::Attribute],
+        associated_to: Option<Path>,
+    ) -> Result<Constant, String> {
+        let ty = Type::load(ty)?;
+        let mut ty = match ty {
+            Some(ty) => ty,
+            None => {
+                return Err("Cannot have a zero sized const definition.".to_owned());
+            }
+        };
+
+        let mut lit = Literal::load(expr)?;
+
+        if let Some(ref associated_to) = associated_to {
+            ty.replace_self_with(associated_to);
+            lit.replace_self_with(associated_to);
+        }
+
+        Ok(Constant::new(
+            path,
+            ty,
+            lit,
+            Cfg::append(mod_cfg, Cfg::load(attrs)),
+            AnnotationSet::load(attrs)?,
+            Documentation::load(attrs),
+            associated_to,
+        ))
+    }
+
+    pub fn new(
+        path: Path,
+        ty: Type,
+        value: Literal,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+        associated_to: Option<Path>,
+    ) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            ty,
+            value,
+            cfg,
+            annotations,
+            documentation,
+            associated_to,
+        }
+    }
+
+    pub fn uses_only_primitive_types(&self) -> bool {
+        self.value.uses_only_primitive_types() && self.ty.is_primitive_or_ptr_primitive()
+    }
+}
+
+impl Item for Constant {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        self.ty.add_dependencies(library, out);
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::Constant(self.clone())
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        if self.associated_to.is_none() {
+            config.export.rename(&mut self.export_name);
+        }
+        self.value.rename_for_config(config);
+        self.ty.rename_for_config(config, &GenericParams::default()); // FIXME: should probably propagate something here
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        self.ty.resolve_declaration_types(resolver);
+    }
+}
+
+impl Constant {
+    pub fn write_declaration<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        associated_to_struct: &Struct,
+    ) {
+        debug_assert!(self.associated_to.is_some());
+        debug_assert!(config.language == Language::Cxx);
+        debug_assert!(!associated_to_struct.is_transparent);
+        debug_assert!(config.structure.associated_constants_in_body);
+        debug_assert!(config.constant.allow_static_const);
+
+        if let Type::Ptr { is_const: true, .. } = self.ty {
+            out.write("static ");
+        } else {
+            out.write("static const ");
+        }
+        self.ty.write(config, out);
+        write!(out, " {};", self.export_name())
+    }
+
+    pub fn write<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        associated_to_struct: Option<&Struct>,
+    ) {
+        if let Some(assoc) = associated_to_struct {
+            if assoc.is_generic() {
+                return; // Not tested / implemented yet, so bail out.
+            }
+        }
+
+        if !self.value.is_valid(out.bindings()) {
+            return;
+        }
+
+        let associated_to_transparent = associated_to_struct.map_or(false, |s| s.is_transparent);
+
+        let in_body = associated_to_struct.is_some()
+            && config.language == Language::Cxx
+            && config.structure.associated_constants_in_body
+            && config.constant.allow_static_const
+            && !associated_to_transparent;
+
+        let condition = self.cfg.to_condition(config);
+        condition.write_before(config, out);
+
+        let name = if in_body {
+            Cow::Owned(format!(
+                "{}::{}",
+                associated_to_struct.unwrap().export_name(),
+                self.export_name(),
+            ))
+        } else if self.associated_to.is_none() {
+            Cow::Borrowed(self.export_name())
+        } else {
+            let associated_name = match associated_to_struct {
+                Some(s) => Cow::Borrowed(s.export_name()),
+                None => {
+                    let mut name = self.associated_to.as_ref().unwrap().name().to_owned();
+                    config.export.rename(&mut name);
+                    Cow::Owned(name)
+                }
+            };
+
+            Cow::Owned(format!("{}_{}", associated_name, self.export_name()))
+        };
+
+        let value = match self.value {
+            Literal::Struct {
+                ref fields,
+                ref path,
+                ..
+            } if out.bindings().struct_is_transparent(path) => fields.iter().next().unwrap().1,
+            _ => &self.value,
+        };
+
+        self.documentation.write(config, out);
+
+        let allow_constexpr = config.constant.allow_constexpr && self.value.can_be_constexpr();
+        match config.language {
+            Language::Cxx if config.constant.allow_static_const || allow_constexpr => {
+                if allow_constexpr {
+                    out.write("constexpr ")
+                }
+
+                if config.constant.allow_static_const {
+                    out.write(if in_body { "inline " } else { "static " });
+                }
+
+                if let Type::Ptr { is_const: true, .. } = self.ty {
+                    // Nothing.
+                } else {
+                    out.write("const ");
+                }
+
+                self.ty.write(config, out);
+                write!(out, " {} = ", name);
+                value.write(config, out);
+                write!(out, ";");
+            }
+            Language::Cxx | Language::C => {
+                write!(out, "#define {} ", name);
+                value.write(config, out);
+            }
+            Language::Cython => {
+                out.write("const ");
+                self.ty.write(config, out);
+                // For extern Cython declarations the initializer is ignored,
+                // but still useful as documentation, so we write it as a comment.
+                write!(out, " {} # = ", name);
+                value.write(config, out);
+            }
+        }
+
+        condition.write_after(config, out);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/documentation.rs b/cbindgen-0.24.5/src/bindgen/ir/documentation.rs
new file mode 100644
index 0000000..6822c0e
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/documentation.rs
@@ -0,0 +1,111 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use crate::bindgen::config::{Config, DocumentationLength, DocumentationStyle, Language};
+use crate::bindgen::utilities::SynAttributeHelpers;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct Documentation {
+    pub doc_comment: Vec<String>,
+}
+
+impl Documentation {
+    pub fn load(attrs: &[syn::Attribute]) -> Self {
+        let doc = attrs
+            .get_comment_lines()
+            .into_iter()
+            .filter(|x| !x.trim_start().starts_with("cbindgen:"))
+            .collect();
+
+        Documentation { doc_comment: doc }
+    }
+
+    pub fn simple(line: &str) -> Self {
+        Documentation {
+            doc_comment: vec![line.to_owned()],
+        }
+    }
+
+    pub fn none() -> Self {
+        Documentation {
+            doc_comment: Vec::new(),
+        }
+    }
+}
+
+impl Source for Documentation {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        if self.doc_comment.is_empty() || !config.documentation {
+            return;
+        }
+
+        let end = match config.documentation_length {
+            DocumentationLength::Short => 1,
+            DocumentationLength::Full => self.doc_comment.len(),
+        };
+
+        // Cython uses Python-style comments, so `documentation_style` is not relevant.
+        if config.language == Language::Cython {
+            for line in &self.doc_comment[..end] {
+                write!(out, "#{}", line);
+                out.new_line();
+            }
+            return;
+        }
+
+        let style = match config.documentation_style {
+            DocumentationStyle::Auto if config.language == Language::C => DocumentationStyle::Doxy,
+            DocumentationStyle::Auto if config.language == Language::Cxx => DocumentationStyle::Cxx,
+            DocumentationStyle::Auto => DocumentationStyle::C, // Fallback if `Language` gets extended.
+            other => other,
+        };
+
+        // Following these documents for style conventions:
+        // https://en.wikibooks.org/wiki/C++_Programming/Code/Style_Conventions/Comments
+        // https://www.cs.cmu.edu/~410/doc/doxygen.html
+        match style {
+            DocumentationStyle::C => {
+                out.write("/*");
+                out.new_line();
+            }
+
+            DocumentationStyle::Doxy => {
+                out.write("/**");
+                out.new_line();
+            }
+
+            _ => (),
+        }
+
+        for line in &self.doc_comment[..end] {
+            match style {
+                DocumentationStyle::C => out.write(""),
+                DocumentationStyle::Doxy => out.write(" *"),
+                DocumentationStyle::C99 => out.write("//"),
+                DocumentationStyle::Cxx => out.write("///"),
+                DocumentationStyle::Auto => unreachable!(), // Auto case should always be covered
+            }
+
+            write!(out, "{}", line);
+            out.new_line();
+        }
+
+        match style {
+            DocumentationStyle::C => {
+                out.write(" */");
+                out.new_line();
+            }
+
+            DocumentationStyle::Doxy => {
+                out.write(" */");
+                out.new_line();
+            }
+
+            _ => (),
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/enumeration.rs b/cbindgen-0.24.5/src/bindgen/ir/enumeration.rs
new file mode 100644
index 0000000..b1b6c04
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/enumeration.rs
@@ -0,0 +1,1529 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, AnnotationValue, Cfg, ConditionWrite, Documentation, Field, GenericArgument,
+    GenericParams, GenericPath, Item, ItemContainer, Literal, Path, Repr, ReprStyle, Struct,
+    ToCondition, Type,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::mangle;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::rename::{IdentifierType, RenameRule};
+use crate::bindgen::reserved;
+use crate::bindgen::writer::{ListType, Source, SourceWriter};
+
+#[allow(clippy::large_enum_variant)]
+#[derive(Debug, Clone)]
+pub enum VariantBody {
+    Empty(AnnotationSet),
+    Body {
+        /// The variant field / export name.
+        name: String,
+        /// The struct with all the items.
+        body: Struct,
+        /// A separate named struct is not created for this variant,
+        /// an unnamed struct is inlined at the point of use instead.
+        /// This is a reasonable thing to do only for tuple variants with a single field.
+        inline: bool,
+        /// Generated cast methods return the variant's only field instead of the variant itself.
+        /// For backward compatibility casts are inlined in a slightly
+        /// larger set of cases than whole variants.
+        inline_casts: bool,
+    },
+}
+
+impl VariantBody {
+    fn empty() -> Self {
+        Self::Empty(AnnotationSet::new())
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        match *self {
+            Self::Empty(ref anno) => anno,
+            Self::Body { ref body, .. } => &body.annotations,
+        }
+    }
+
+    fn is_empty(&self) -> bool {
+        match *self {
+            Self::Empty(..) => true,
+            Self::Body { .. } => false,
+        }
+    }
+
+    fn specialize(
+        &self,
+        generic_values: &[GenericArgument],
+        mappings: &[(&Path, &GenericArgument)],
+        config: &Config,
+    ) -> Self {
+        match *self {
+            Self::Empty(ref annos) => Self::Empty(annos.clone()),
+            Self::Body {
+                ref name,
+                ref body,
+                inline,
+                inline_casts,
+            } => Self::Body {
+                name: name.clone(),
+                body: body.specialize(generic_values, mappings, config),
+                inline,
+                inline_casts,
+            },
+        }
+    }
+}
+
+#[derive(Debug, Clone)]
+pub struct EnumVariant {
+    pub name: String,
+    pub export_name: String,
+    pub discriminant: Option<Literal>,
+    pub body: VariantBody,
+    pub cfg: Option<Cfg>,
+    pub documentation: Documentation,
+}
+
+impl EnumVariant {
+    fn load(
+        inline_tag_field: bool,
+        variant: &syn::Variant,
+        generic_params: GenericParams,
+        mod_cfg: Option<&Cfg>,
+        self_path: &Path,
+        enum_annotations: &AnnotationSet,
+        config: &Config,
+    ) -> Result<Self, String> {
+        let discriminant = match variant.discriminant {
+            Some((_, ref expr)) => Some(Literal::load(expr)?),
+            None => None,
+        };
+
+        fn parse_fields(
+            inline_tag_field: bool,
+            fields: &syn::punctuated::Punctuated<syn::Field, syn::token::Comma>,
+            self_path: &Path,
+            inline_name: Option<&str>,
+        ) -> Result<Vec<Field>, String> {
+            let mut res = Vec::new();
+
+            if inline_tag_field {
+                res.push(Field::from_name_and_type(
+                    inline_name.map_or_else(|| "tag".to_string(), |name| format!("{}_tag", name)),
+                    Type::Path(GenericPath::new(Path::new("Tag"), vec![])),
+                ));
+            }
+
+            for (i, field) in fields.iter().enumerate() {
+                if let Some(mut ty) = Type::load(&field.ty)? {
+                    ty.replace_self_with(self_path);
+                    res.push(Field {
+                        name: inline_name.map_or_else(
+                            || match field.ident {
+                                Some(ref ident) => ident.unraw().to_string(),
+                                None => i.to_string(),
+                            },
+                            |name| name.to_string(),
+                        ),
+                        ty,
+                        cfg: Cfg::load(&field.attrs),
+                        annotations: AnnotationSet::load(&field.attrs)?,
+                        documentation: Documentation::load(&field.attrs),
+                    });
+                }
+            }
+
+            Ok(res)
+        }
+
+        let variant_cfg = Cfg::append(mod_cfg, Cfg::load(&variant.attrs));
+        let mut annotations = AnnotationSet::load(&variant.attrs)?;
+        if let Some(b) = enum_annotations.bool("derive-ostream") {
+            annotations.add_default("derive-ostream", AnnotationValue::Bool(b));
+        }
+
+        let body_rule = enum_annotations
+            .parse_atom::<RenameRule>("rename-variant-name-fields")
+            .unwrap_or(config.enumeration.rename_variant_name_fields);
+
+        let body = match variant.fields {
+            syn::Fields::Unit => VariantBody::Empty(annotations),
+            syn::Fields::Named(ref fields) => {
+                let path = Path::new(format!("{}_Body", variant.ident));
+                let name = body_rule
+                    .apply(
+                        &variant.ident.unraw().to_string(),
+                        IdentifierType::StructMember,
+                    )
+                    .into_owned();
+                VariantBody::Body {
+                    body: Struct::new(
+                        path,
+                        generic_params,
+                        parse_fields(inline_tag_field, &fields.named, self_path, None)?,
+                        inline_tag_field,
+                        true,
+                        None,
+                        false,
+                        None,
+                        annotations,
+                        Documentation::none(),
+                    ),
+                    name,
+                    inline: false,
+                    inline_casts: false,
+                }
+            }
+            syn::Fields::Unnamed(ref fields) => {
+                let path = Path::new(format!("{}_Body", variant.ident));
+                let name = body_rule
+                    .apply(
+                        &variant.ident.unraw().to_string(),
+                        IdentifierType::StructMember,
+                    )
+                    .into_owned();
+                let inline_casts = fields.unnamed.len() == 1;
+                // In C++ types with destructors cannot be put into unnamed structs like the
+                // inlining requires, and it's hard to detect such types.
+                // Besides that for C++ we generate casts/getters that can be used instead of
+                // direct field accesses and also have a benefit of being checked.
+                // As a result we don't currently inline variant definitions in C++ mode at all.
+                let inline = inline_casts && config.language != Language::Cxx;
+                let inline_name = if inline { Some(&*name) } else { None };
+                VariantBody::Body {
+                    body: Struct::new(
+                        path,
+                        generic_params,
+                        parse_fields(inline_tag_field, &fields.unnamed, self_path, inline_name)?,
+                        inline_tag_field,
+                        true,
+                        None,
+                        false,
+                        None,
+                        annotations,
+                        Documentation::none(),
+                    ),
+                    name,
+                    inline,
+                    inline_casts,
+                }
+            }
+        };
+
+        Ok(EnumVariant::new(
+            variant.ident.unraw().to_string(),
+            discriminant,
+            body,
+            variant_cfg,
+            Documentation::load(&variant.attrs),
+        ))
+    }
+
+    pub fn new(
+        name: String,
+        discriminant: Option<Literal>,
+        body: VariantBody,
+        cfg: Option<Cfg>,
+        documentation: Documentation,
+    ) -> Self {
+        let export_name = name.clone();
+        Self {
+            name,
+            export_name,
+            discriminant,
+            body,
+            cfg,
+            documentation,
+        }
+    }
+
+    fn simplify_standard_types(&mut self, config: &Config) {
+        if let VariantBody::Body { ref mut body, .. } = self.body {
+            body.simplify_standard_types(config);
+        }
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        if let VariantBody::Body { ref body, .. } = self.body {
+            body.add_dependencies(library, out);
+        }
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        if let VariantBody::Body { ref mut body, .. } = self.body {
+            body.resolve_declaration_types(resolver);
+        }
+    }
+
+    fn specialize(
+        &self,
+        generic_values: &[GenericArgument],
+        mappings: &[(&Path, &GenericArgument)],
+        config: &Config,
+    ) -> Self {
+        Self::new(
+            mangle::mangle_name(&self.name, generic_values, &config.export.mangle),
+            self.discriminant.clone(),
+            self.body.specialize(generic_values, mappings, config),
+            self.cfg.clone(),
+            self.documentation.clone(),
+        )
+    }
+
+    fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        if let VariantBody::Body { ref body, .. } = self.body {
+            body.add_monomorphs(library, out);
+        }
+    }
+
+    fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        if let VariantBody::Body { ref mut body, .. } = self.body {
+            body.mangle_paths(monomorphs);
+        }
+    }
+}
+
+impl Source for EnumVariant {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        let condition = self.cfg.to_condition(config);
+        // Cython doesn't support conditional enum variants.
+        if config.language != Language::Cython {
+            condition.write_before(config, out);
+        }
+        self.documentation.write(config, out);
+        write!(out, "{}", self.export_name);
+        if let Some(discriminant) = &self.discriminant {
+            if config.language == Language::Cython {
+                // For extern Cython declarations the enumerator value is ignored,
+                // but still useful as documentation, so we write it as a comment.
+                out.write(" #")
+            }
+            out.write(" = ");
+            discriminant.write(config, out);
+        }
+        out.write(",");
+        if config.language != Language::Cython {
+            condition.write_after(config, out);
+        }
+    }
+}
+
+#[derive(Debug, Clone)]
+pub struct Enum {
+    pub path: Path,
+    pub export_name: String,
+    pub generic_params: GenericParams,
+    pub repr: Repr,
+    pub variants: Vec<EnumVariant>,
+    pub tag: Option<String>,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+}
+
+impl Enum {
+    /// Name of the generated tag enum.
+    fn tag_name(&self) -> &str {
+        self.tag.as_deref().unwrap_or_else(|| self.export_name())
+    }
+
+    /// Enum with data turns into a union of structs with each struct having its own tag field.
+    fn inline_tag_field(repr: &Repr) -> bool {
+        repr.style != ReprStyle::C
+    }
+
+    pub fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        if self.generic_params.len() > 0 {
+            return;
+        }
+
+        for v in &self.variants {
+            v.add_monomorphs(library, out);
+        }
+    }
+
+    fn can_derive_eq(&self) -> bool {
+        if self.tag.is_none() {
+            return false;
+        }
+
+        self.variants.iter().all(|variant| match variant.body {
+            VariantBody::Empty(..) => true,
+            VariantBody::Body { ref body, .. } => body.can_derive_eq(),
+        })
+    }
+
+    pub fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        for variant in &mut self.variants {
+            variant.mangle_paths(monomorphs);
+        }
+    }
+
+    pub fn load(
+        item: &syn::ItemEnum,
+        mod_cfg: Option<&Cfg>,
+        config: &Config,
+    ) -> Result<Enum, String> {
+        let repr = Repr::load(&item.attrs)?;
+        if repr.style == ReprStyle::Rust && repr.ty.is_none() {
+            return Err("Enum is not marked with a valid #[repr(prim)] or #[repr(C)].".to_owned());
+        }
+        // TODO: Implement translation of aligned enums.
+        if repr.align.is_some() {
+            return Err("Enum is marked with #[repr(align(...))] or #[repr(packed)].".to_owned());
+        }
+
+        let path = Path::new(item.ident.unraw().to_string());
+        let generic_params = GenericParams::load(&item.generics)?;
+
+        let mut variants = Vec::new();
+        let mut has_data = false;
+
+        let annotations = AnnotationSet::load(&item.attrs)?;
+
+        for variant in item.variants.iter() {
+            let variant = EnumVariant::load(
+                Self::inline_tag_field(&repr),
+                variant,
+                generic_params.clone(),
+                mod_cfg,
+                &path,
+                &annotations,
+                config,
+            )?;
+            has_data = has_data || !variant.body.is_empty();
+            variants.push(variant);
+        }
+
+        if let Some(names) = annotations.list("enum-trailing-values") {
+            for name in names {
+                variants.push(EnumVariant::new(
+                    name,
+                    None,
+                    VariantBody::empty(),
+                    None,
+                    Documentation::none(),
+                ));
+            }
+        }
+
+        if config.enumeration.add_sentinel(&annotations) {
+            variants.push(EnumVariant::new(
+                "Sentinel".to_owned(),
+                None,
+                VariantBody::empty(),
+                None,
+                Documentation::simple(" Must be last for serialization purposes"),
+            ));
+        }
+
+        let tag = if has_data {
+            Some("Tag".to_string())
+        } else {
+            None
+        };
+
+        Ok(Enum::new(
+            path,
+            generic_params,
+            repr,
+            variants,
+            tag,
+            Cfg::append(mod_cfg, Cfg::load(&item.attrs)),
+            annotations,
+            Documentation::load(&item.attrs),
+        ))
+    }
+
+    #[allow(clippy::too_many_arguments)]
+    pub fn new(
+        path: Path,
+        generic_params: GenericParams,
+        repr: Repr,
+        variants: Vec<EnumVariant>,
+        tag: Option<String>,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+    ) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            generic_params,
+            repr,
+            variants,
+            tag,
+            cfg,
+            annotations,
+            documentation,
+        }
+    }
+}
+
+impl Item for Enum {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::Enum(self.clone())
+    }
+
+    fn collect_declaration_types(&self, resolver: &mut DeclarationTypeResolver) {
+        if self.tag.is_some() {
+            if self.repr.style == ReprStyle::C {
+                resolver.add_struct(&self.path);
+            } else {
+                resolver.add_union(&self.path);
+            }
+        } else if self.repr.style == ReprStyle::C {
+            resolver.add_enum(&self.path);
+        } else {
+            // This is important to handle conflicting names with opaque items.
+            resolver.add_none(&self.path);
+        }
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        for &mut ref mut var in &mut self.variants {
+            var.resolve_declaration_types(resolver);
+        }
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        config.export.rename(&mut self.export_name);
+
+        if config.language != Language::Cxx && self.tag.is_some() {
+            // it makes sense to always prefix Tag with type name in C
+            let new_tag = format!("{}_Tag", self.export_name);
+            if self.repr.style == ReprStyle::Rust {
+                for variant in &mut self.variants {
+                    if let VariantBody::Body { ref mut body, .. } = variant.body {
+                        let path = Path::new(new_tag.clone());
+                        let generic_path = GenericPath::new(path, vec![]);
+                        body.fields[0].ty = Type::Path(generic_path);
+                    }
+                }
+            }
+            self.tag = Some(new_tag);
+        }
+
+        for variant in &mut self.variants {
+            reserved::escape(&mut variant.export_name);
+            if let Some(discriminant) = &mut variant.discriminant {
+                discriminant.rename_for_config(config);
+            }
+            if let VariantBody::Body {
+                ref mut name,
+                ref mut body,
+                ..
+            } = variant.body
+            {
+                body.rename_for_config(config);
+                reserved::escape(name);
+            }
+        }
+
+        if config.enumeration.prefix_with_name
+            || self.annotations.bool("prefix-with-name").unwrap_or(false)
+        {
+            let separator = if config.export.mangle.remove_underscores {
+                ""
+            } else {
+                "_"
+            };
+
+            for variant in &mut self.variants {
+                variant.export_name =
+                    format!("{}{}{}", self.export_name, separator, variant.export_name);
+                if let VariantBody::Body { ref mut body, .. } = variant.body {
+                    body.export_name =
+                        format!("{}{}{}", self.export_name, separator, body.export_name());
+                }
+            }
+        }
+
+        let rules = self
+            .annotations
+            .parse_atom::<RenameRule>("rename-all")
+            .unwrap_or(config.enumeration.rename_variants);
+
+        if let Some(r) = rules.not_none() {
+            self.variants = self
+                .variants
+                .iter()
+                .map(|variant| {
+                    EnumVariant::new(
+                        r.apply(
+                            &variant.export_name,
+                            IdentifierType::EnumVariant {
+                                prefix: &self.export_name,
+                            },
+                        )
+                        .into_owned(),
+                        variant.discriminant.clone(),
+                        match variant.body {
+                            VariantBody::Empty(..) => variant.body.clone(),
+                            VariantBody::Body {
+                                ref name,
+                                ref body,
+                                inline,
+                                inline_casts,
+                            } => VariantBody::Body {
+                                name: r.apply(name, IdentifierType::StructMember).into_owned(),
+                                body: body.clone(),
+                                inline,
+                                inline_casts,
+                            },
+                        },
+                        variant.cfg.clone(),
+                        variant.documentation.clone(),
+                    )
+                })
+                .collect();
+        }
+    }
+
+    fn instantiate_monomorph(
+        &self,
+        generic_values: &[GenericArgument],
+        library: &Library,
+        out: &mut Monomorphs,
+    ) {
+        let mappings = self.generic_params.call(self.path.name(), generic_values);
+
+        for variant in &self.variants {
+            if let VariantBody::Body { ref body, .. } = variant.body {
+                body.instantiate_monomorph(generic_values, library, out);
+            }
+        }
+
+        let mangled_path = mangle::mangle_path(
+            &self.path,
+            generic_values,
+            &library.get_config().export.mangle,
+        );
+
+        let monomorph = Enum::new(
+            mangled_path,
+            GenericParams::default(),
+            self.repr,
+            self.variants
+                .iter()
+                .map(|v| v.specialize(generic_values, &mappings, library.get_config()))
+                .collect(),
+            self.tag.clone(),
+            self.cfg.clone(),
+            self.annotations.clone(),
+            self.documentation.clone(),
+        );
+
+        out.insert_enum(library, self, monomorph, generic_values.to_owned());
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        for variant in &self.variants {
+            variant.add_dependencies(library, out);
+        }
+    }
+}
+
+impl Source for Enum {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        let size = self.repr.ty.map(|ty| ty.to_primitive().to_repr_c(config));
+        let has_data = self.tag.is_some();
+        let inline_tag_field = Self::inline_tag_field(&self.repr);
+        let tag_name = self.tag_name();
+
+        let condition = self.cfg.to_condition(config);
+        condition.write_before(config, out);
+
+        self.documentation.write(config, out);
+        self.generic_params.write(config, out);
+
+        // If the enum has data, we need to emit a struct or union for the data
+        // and enum for the tag. C++ supports nested type definitions, so we open
+        // the struct or union here and define the tag enum inside it (*).
+        if has_data && config.language == Language::Cxx {
+            self.open_struct_or_union(config, out, inline_tag_field);
+        }
+
+        // Emit the tag enum and everything related to it.
+        self.write_tag_enum(config, out, size, has_data, tag_name);
+
+        // If the enum has data, we need to emit structs for the variants and gather them together.
+        if has_data {
+            self.write_variant_defs(config, out);
+            out.new_line();
+            out.new_line();
+
+            // Open the struct or union for the data (**), gathering all the variants with data
+            // together, unless it's C++, then we have already opened that struct/union at (*) and
+            // are currently inside it.
+            if config.language != Language::Cxx {
+                self.open_struct_or_union(config, out, inline_tag_field);
+            }
+
+            // Emit tag field that is separate from all variants.
+            self.write_tag_field(config, out, size, inline_tag_field, tag_name);
+            out.new_line();
+
+            // Open union of all variants with data, only in the non-inline tag scenario.
+            // Cython extern declarations don't manage layouts, layouts are defined entierly by the
+            // corresponding C code. So we can inline the unnamed union into the struct and get the
+            // same observable result. Moreother we have to do it because Cython doesn't support
+            // unnamed unions.
+            if !inline_tag_field && config.language != Language::Cython {
+                out.write("union");
+                out.open_brace();
+            }
+
+            // Emit fields for all variants with data.
+            self.write_variant_fields(config, out, inline_tag_field);
+
+            // Close union of all variants with data, only in the non-inline tag scenario.
+            // See the comment about Cython on `open_brace`.
+            if !inline_tag_field && config.language != Language::Cython {
+                out.close_brace(true);
+            }
+
+            // Emit convenience methods for the struct or enum for the data.
+            self.write_derived_functions_data(config, out, tag_name);
+
+            // Emit the post_body section, if relevant.
+            if let Some(body) = config.export.post_body(&self.path) {
+                out.new_line();
+                out.write_raw_block(body);
+            }
+
+            // Close the struct or union opened either at (*) or at (**).
+            if config.language == Language::C && config.style.generate_typedef() {
+                out.close_brace(false);
+                write!(out, " {};", self.export_name);
+            } else {
+                out.close_brace(true);
+            }
+        }
+
+        condition.write_after(config, out);
+    }
+}
+
+impl Enum {
+    /// Emit the tag enum and convenience methods for it.
+    /// For enums with data this is only a part of the output,
+    /// but for enums without data it's the whole output (modulo doc comments etc.).
+    fn write_tag_enum<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        size: Option<&str>,
+        has_data: bool,
+        tag_name: &str,
+    ) {
+        // Open the tag enum.
+        match config.language {
+            Language::C => {
+                if let Some(prim) = size {
+                    // If we need to specify size, then we have no choice but to create a typedef,
+                    // so `config.style` is not respected.
+                    write!(out, "enum {}", tag_name);
+
+                    if config.cpp_compatible_c() {
+                        out.new_line();
+                        out.write("#ifdef __cplusplus");
+                        out.new_line();
+                        write!(out, "  : {}", prim);
+                        out.new_line();
+                        out.write("#endif // __cplusplus");
+                        out.new_line();
+                    }
+                } else {
+                    if config.style.generate_typedef() {
+                        out.write("typedef ");
+                    }
+                    out.write("enum");
+                    if config.style.generate_tag() {
+                        write!(out, " {}", tag_name);
+                    }
+                }
+            }
+            Language::Cxx => {
+                if config.enumeration.enum_class(&self.annotations) {
+                    out.write("enum class");
+                } else {
+                    out.write("enum");
+                }
+
+                if self.annotations.must_use(config) {
+                    if let Some(ref anno) = config.enumeration.must_use {
+                        write!(out, " {}", anno)
+                    }
+                }
+
+                write!(out, " {}", tag_name);
+                if let Some(prim) = size {
+                    write!(out, " : {}", prim);
+                }
+            }
+            Language::Cython => {
+                if size.is_some() {
+                    // If we need to specify size, then we have no choice but to create a typedef,
+                    // so `config.style` is not respected.
+                    write!(out, "cdef enum");
+                } else {
+                    write!(out, "{}enum {}", config.style.cython_def(), tag_name);
+                }
+            }
+        }
+        out.open_brace();
+
+        // Emit enumerators for the tag enum.
+        for (i, variant) in self.variants.iter().enumerate() {
+            if i != 0 {
+                out.new_line()
+            }
+            variant.write(config, out);
+        }
+
+        // Close the tag enum.
+        if config.language == Language::C && size.is_none() && config.style.generate_typedef() {
+            out.close_brace(false);
+            write!(out, " {};", tag_name);
+        } else {
+            out.close_brace(true);
+        }
+
+        // Emit typedef specifying the tag enum's size if necessary.
+        // In C++ enums can "inherit" from numeric types (`enum E: uint8_t { ... }`),
+        // but in C `typedef uint8_t E` is the only way to give a fixed size to `E`.
+        if let Some(prim) = size {
+            if config.cpp_compatible_c() {
+                out.new_line_if_not_start();
+                out.write("#ifndef __cplusplus");
+            }
+
+            if config.language != Language::Cxx {
+                out.new_line();
+                write!(out, "{} {} {};", config.language.typedef(), prim, tag_name);
+            }
+
+            if config.cpp_compatible_c() {
+                out.new_line_if_not_start();
+                out.write("#endif // __cplusplus");
+            }
+        }
+
+        // Emit convenience methods for the tag enum.
+        self.write_derived_functions_enum(config, out, has_data, tag_name);
+    }
+
+    /// The code here mirrors the beginning of `Struct::write` and `Union::write`.
+    fn open_struct_or_union<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        inline_tag_field: bool,
+    ) {
+        match config.language {
+            Language::C if config.style.generate_typedef() => out.write("typedef "),
+            Language::C | Language::Cxx => {}
+            Language::Cython => out.write(config.style.cython_def()),
+        }
+
+        out.write(if inline_tag_field { "union" } else { "struct" });
+
+        if self.annotations.must_use(config) {
+            if let Some(ref anno) = config.structure.must_use {
+                write!(out, " {}", anno);
+            }
+        }
+
+        if config.language != Language::C || config.style.generate_tag() {
+            write!(out, " {}", self.export_name());
+        }
+
+        out.open_brace();
+
+        // Emit the pre_body section, if relevant.
+        if let Some(body) = config.export.pre_body(&self.path) {
+            out.write_raw_block(body);
+            out.new_line();
+        }
+    }
+
+    /// Emit struct definitions for variants having data.
+    fn write_variant_defs<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        for variant in &self.variants {
+            if let VariantBody::Body {
+                ref body,
+                inline: false,
+                ..
+            } = variant.body
+            {
+                out.new_line();
+                out.new_line();
+                let condition = variant.cfg.to_condition(config);
+                // Cython doesn't support conditional enum variants.
+                if config.language != Language::Cython {
+                    condition.write_before(config, out);
+                }
+                body.write(config, out);
+                if config.language != Language::Cython {
+                    condition.write_after(config, out);
+                }
+            }
+        }
+    }
+
+    /// Emit tag field that is separate from all variants.
+    /// For non-inline tag scenario this is *the* tag field, and it does not exist in the variants.
+    /// For the inline tag scenario this is just a convenience and another way
+    /// to refer to the same tag that exist in all the variants.
+    fn write_tag_field<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        size: Option<&str>,
+        inline_tag_field: bool,
+        tag_name: &str,
+    ) {
+        // C++ allows accessing only common initial sequence of union
+        // fields so we have to wrap the tag field into an anonymous struct.
+        let wrap_tag = inline_tag_field && config.language == Language::Cxx;
+
+        if wrap_tag {
+            out.write("struct");
+            out.open_brace();
+        }
+
+        if config.language == Language::C && size.is_none() && !config.style.generate_typedef() {
+            out.write("enum ");
+        }
+
+        write!(out, "{} tag;", tag_name);
+
+        if wrap_tag {
+            out.close_brace(true);
+        }
+    }
+
+    /// Emit fields for all variants with data.
+    fn write_variant_fields<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        inline_tag_field: bool,
+    ) {
+        let mut first = true;
+        for variant in &self.variants {
+            if let VariantBody::Body {
+                name, body, inline, ..
+            } = &variant.body
+            {
+                if !first {
+                    out.new_line();
+                }
+                first = false;
+                let condition = variant.cfg.to_condition(config);
+                // Cython doesn't support conditional enum variants.
+                if config.language != Language::Cython {
+                    condition.write_before(config, out);
+                }
+                if *inline {
+                    // Write definition of an inlined variant with data.
+                    // Cython extern declarations don't manage layouts, layouts are defined entierly
+                    // by the corresponding C code. So we can inline the unnamed struct and get the
+                    // same observable result. Moreother we have to do it because Cython doesn't
+                    // support unnamed structs.
+                    // For the same reason with Cython we can omit per-variant tags (the first
+                    // field) to avoid extra noise, the main `tag` is enough in this case.
+                    if config.language != Language::Cython {
+                        out.write("struct");
+                        out.open_brace();
+                    }
+                    let start_field =
+                        usize::from(inline_tag_field && config.language == Language::Cython);
+                    out.write_vertical_source_list(&body.fields[start_field..], ListType::Cap(";"));
+                    if config.language != Language::Cython {
+                        out.close_brace(true);
+                    }
+                } else if config.style.generate_typedef() || config.language == Language::Cython {
+                    write!(out, "{} {};", body.export_name(), name);
+                } else {
+                    write!(out, "struct {} {};", body.export_name(), name);
+                }
+                if config.language != Language::Cython {
+                    condition.write_after(config, out);
+                }
+            }
+        }
+    }
+
+    // Emit convenience methods for enums themselves.
+    fn write_derived_functions_enum<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        has_data: bool,
+        tag_name: &str,
+    ) {
+        if config.language != Language::Cxx {
+            return;
+        }
+
+        // Emit an ostream function if required.
+        if config.enumeration.derive_ostream(&self.annotations) {
+            // For enums without data, this emits the serializer function for the
+            // enum. For enums with data, this emits the serializer function for
+            // the tag enum. In the latter case we need a couple of minor changes
+            // due to the function living inside the top-level struct or enum.
+            let stream = config
+                .function
+                .rename_args
+                .apply("stream", IdentifierType::FunctionArg);
+            let instance = config
+                .function
+                .rename_args
+                .apply("instance", IdentifierType::FunctionArg);
+
+            out.new_line();
+            out.new_line();
+            // For enums without data, we mark the function inline because the
+            // header might get included into multiple compilation units that
+            // get linked together, and not marking it inline would result in
+            // multiply-defined symbol errors. For enums with data we don't have
+            // the same problem, but mark it as a friend function of the
+            // containing union/struct.
+            // Note also that for enums with data, the case labels for switch
+            // statements apparently need to be qualified to the top-level
+            // generated struct or union. This is why the generated case labels
+            // below use the A::B::C format for enums with data, with A being
+            // self.export_name(). Failure to have that qualification results
+            // in a surprising compilation failure for the generated header.
+            write!(
+                out,
+                "{} std::ostream& operator<<(std::ostream& {}, const {}& {})",
+                if has_data { "friend" } else { "inline" },
+                stream,
+                tag_name,
+                instance,
+            );
+
+            out.open_brace();
+            if has_data {
+                // C++ name resolution rules are weird.
+                write!(
+                    out,
+                    "using {} = {}::{};",
+                    tag_name,
+                    self.export_name(),
+                    tag_name
+                );
+                out.new_line();
+            }
+            write!(out, "switch ({})", instance);
+            out.open_brace();
+            let vec: Vec<_> = self
+                .variants
+                .iter()
+                .map(|x| {
+                    format!(
+                        "case {}::{}: {} << \"{}\"; break;",
+                        tag_name, x.export_name, stream, x.export_name
+                    )
+                })
+                .collect();
+            out.write_vertical_source_list(&vec[..], ListType::Join(""));
+            out.close_brace(false);
+            out.new_line();
+
+            write!(out, "return {};", stream);
+            out.close_brace(false);
+
+            if has_data {
+                // For enums with data, this emits the serializer function for
+                // the top-level union or struct.
+                out.new_line();
+                out.new_line();
+                write!(
+                    out,
+                    "friend std::ostream& operator<<(std::ostream& {}, const {}& {})",
+                    stream,
+                    self.export_name(),
+                    instance,
+                );
+
+                out.open_brace();
+
+                // C++ name resolution rules are weird.
+                write!(
+                    out,
+                    "using {} = {}::{};",
+                    tag_name,
+                    self.export_name(),
+                    tag_name
+                );
+                out.new_line();
+
+                write!(out, "switch ({}.tag)", instance);
+                out.open_brace();
+                let vec: Vec<_> = self
+                    .variants
+                    .iter()
+                    .map(|x| {
+                        let tag_str = format!("\"{}\"", x.export_name);
+                        if let VariantBody::Body {
+                            ref name, ref body, ..
+                        } = x.body
+                        {
+                            format!(
+                                "case {}::{}: {} << {}{}{}.{}; break;",
+                                tag_name,
+                                x.export_name,
+                                stream,
+                                if body.has_tag_field { "" } else { &tag_str },
+                                if body.has_tag_field { "" } else { " << " },
+                                instance,
+                                name,
+                            )
+                        } else {
+                            format!(
+                                "case {}::{}: {} << {}; break;",
+                                tag_name, x.export_name, stream, tag_str,
+                            )
+                        }
+                    })
+                    .collect();
+                out.write_vertical_source_list(&vec[..], ListType::Join(""));
+                out.close_brace(false);
+                out.new_line();
+
+                write!(out, "return {};", stream);
+                out.close_brace(false);
+            }
+        }
+    }
+
+    // Emit convenience methods for structs or unions produced for enums with data.
+    fn write_derived_functions_data<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        tag_name: &str,
+    ) {
+        if config.language != Language::Cxx {
+            return;
+        }
+
+        if config.enumeration.derive_helper_methods(&self.annotations) {
+            for variant in &self.variants {
+                out.new_line();
+                out.new_line();
+
+                let condition = variant.cfg.to_condition(config);
+                condition.write_before(config, out);
+
+                let arg_renamer = |name: &str| {
+                    config
+                        .function
+                        .rename_args
+                        .apply(name, IdentifierType::FunctionArg)
+                        .into_owned()
+                };
+
+                macro_rules! write_attrs {
+                    ($op:expr) => {{
+                        if let Some(Some(attrs)) =
+                            variant
+                                .body
+                                .annotations()
+                                .atom(concat!("variant-", $op, "-attributes"))
+                        {
+                            write!(out, "{} ", attrs);
+                        }
+                    }};
+                }
+
+                write_attrs!("constructor");
+                write!(out, "static {} {}(", self.export_name, variant.export_name);
+
+                if let VariantBody::Body { ref body, .. } = variant.body {
+                    let skip_fields = body.has_tag_field as usize;
+                    let vec: Vec<_> = body
+                        .fields
+                        .iter()
+                        .skip(skip_fields)
+                        .map(|field| {
+                            Field::from_name_and_type(
+                                // const-ref args to constructor
+                                arg_renamer(&field.name),
+                                Type::const_ref_to(&field.ty),
+                            )
+                        })
+                        .collect();
+                    out.write_vertical_source_list(&vec[..], ListType::Join(","));
+                }
+
+                write!(out, ")");
+                out.open_brace();
+
+                write!(out, "{} result;", self.export_name);
+
+                if let VariantBody::Body {
+                    name: ref variant_name,
+                    ref body,
+                    ..
+                } = variant.body
+                {
+                    let skip_fields = body.has_tag_field as usize;
+                    for field in body.fields.iter().skip(skip_fields) {
+                        out.new_line();
+                        match field.ty {
+                            Type::Array(ref ty, ref length) => {
+                                // arrays are not assignable in C++ so we
+                                // need to manually copy the elements
+                                write!(out, "for (int i = 0; i < {}; i++)", length.as_str());
+                                out.open_brace();
+                                write!(out, "::new (&result.{}.{}[i]) (", variant_name, field.name);
+                                ty.write(config, out);
+                                write!(out, ")({}[i]);", arg_renamer(&field.name));
+                                out.close_brace(false);
+                            }
+                            ref ty => {
+                                write!(out, "::new (&result.{}.{}) (", variant_name, field.name);
+                                ty.write(config, out);
+                                write!(out, ")({});", arg_renamer(&field.name));
+                            }
+                        }
+                    }
+                }
+
+                out.new_line();
+                write!(out, "result.tag = {}::{};", tag_name, variant.export_name);
+                out.new_line();
+                write!(out, "return result;");
+                out.close_brace(false);
+
+                out.new_line();
+                out.new_line();
+
+                write_attrs!("is");
+                // FIXME: create a config for method case
+                write!(out, "bool Is{}() const", variant.export_name);
+                out.open_brace();
+                write!(out, "return tag == {}::{};", tag_name, variant.export_name);
+                out.close_brace(false);
+
+                let assert_name = match config.enumeration.cast_assert_name {
+                    Some(ref n) => &**n,
+                    None => "assert",
+                };
+
+                let mut derive_casts = |const_casts: bool| {
+                    let (member_name, body, inline_casts) = match variant.body {
+                        VariantBody::Body {
+                            ref name,
+                            ref body,
+                            inline_casts,
+                            ..
+                        } => (name, body, inline_casts),
+                        VariantBody::Empty(..) => return,
+                    };
+
+                    let skip_fields = body.has_tag_field as usize;
+                    let field_count = body.fields.len() - skip_fields;
+                    if field_count == 0 {
+                        return;
+                    }
+
+                    out.new_line();
+                    out.new_line();
+
+                    if const_casts {
+                        write_attrs!("const-cast");
+                    } else {
+                        write_attrs!("mut-cast");
+                    }
+                    if inline_casts {
+                        let field = body.fields.last().unwrap();
+                        let return_type = field.ty.clone();
+                        let return_type = Type::Ptr {
+                            ty: Box::new(return_type),
+                            is_const: const_casts,
+                            is_ref: true,
+                            is_nullable: false,
+                        };
+                        return_type.write(config, out);
+                    } else if const_casts {
+                        write!(out, "const {}&", body.export_name());
+                    } else {
+                        write!(out, "{}&", body.export_name());
+                    }
+
+                    write!(out, " As{}()", variant.export_name);
+                    if const_casts {
+                        write!(out, " const");
+                    }
+                    out.open_brace();
+                    write!(out, "{}(Is{}());", assert_name, variant.export_name);
+                    out.new_line();
+                    write!(out, "return {}", member_name);
+                    if inline_casts {
+                        write!(out, "._0");
+                    }
+                    write!(out, ";");
+                    out.close_brace(false);
+                };
+
+                if config.enumeration.derive_const_casts(&self.annotations) {
+                    derive_casts(true)
+                }
+
+                if config.enumeration.derive_mut_casts(&self.annotations) {
+                    derive_casts(false)
+                }
+
+                condition.write_after(config, out);
+            }
+        }
+
+        let other = config
+            .function
+            .rename_args
+            .apply("other", IdentifierType::FunctionArg);
+
+        macro_rules! write_attrs {
+            ($op:expr) => {{
+                if let Some(Some(attrs)) = self.annotations.atom(concat!($op, "-attributes")) {
+                    write!(out, "{} ", attrs);
+                }
+            }};
+        }
+
+        if self.can_derive_eq() && config.structure.derive_eq(&self.annotations) {
+            out.new_line();
+            out.new_line();
+            write_attrs!("eq");
+            write!(
+                out,
+                "bool operator==(const {}& {}) const",
+                self.export_name, other
+            );
+            out.open_brace();
+            write!(out, "if (tag != {}.tag)", other);
+            out.open_brace();
+            write!(out, "return false;");
+            out.close_brace(false);
+            out.new_line();
+            write!(out, "switch (tag)");
+            out.open_brace();
+            let mut exhaustive = true;
+            for variant in &self.variants {
+                if let VariantBody::Body {
+                    name: ref variant_name,
+                    ..
+                } = variant.body
+                {
+                    let condition = variant.cfg.to_condition(config);
+                    condition.write_before(config, out);
+                    write!(
+                        out,
+                        "case {}::{}: return {} == {}.{};",
+                        self.tag.as_ref().unwrap(),
+                        variant.export_name,
+                        variant_name,
+                        other,
+                        variant_name
+                    );
+                    condition.write_after(config, out);
+                    out.new_line();
+                } else {
+                    exhaustive = false;
+                }
+            }
+            if !exhaustive {
+                write!(out, "default: break;");
+            }
+            out.close_brace(false);
+
+            out.new_line();
+            write!(out, "return true;");
+
+            out.close_brace(false);
+
+            if config.structure.derive_neq(&self.annotations) {
+                out.new_line();
+                out.new_line();
+                write_attrs!("neq");
+                write!(
+                    out,
+                    "bool operator!=(const {}& {}) const",
+                    self.export_name, other
+                );
+                out.open_brace();
+                write!(out, "return !(*this == {});", other);
+                out.close_brace(false);
+            }
+        }
+
+        if config
+            .enumeration
+            .private_default_tagged_enum_constructor(&self.annotations)
+        {
+            out.new_line();
+            out.new_line();
+            write!(out, "private:");
+            out.new_line();
+            write!(out, "{}()", self.export_name);
+            out.open_brace();
+            out.close_brace(false);
+            out.new_line();
+            write!(out, "public:");
+            out.new_line();
+        }
+
+        if config
+            .enumeration
+            .derive_tagged_enum_destructor(&self.annotations)
+        {
+            out.new_line();
+            out.new_line();
+            write_attrs!("destructor");
+            write!(out, "~{}()", self.export_name);
+            out.open_brace();
+            write!(out, "switch (tag)");
+            out.open_brace();
+            let mut exhaustive = true;
+            for variant in &self.variants {
+                if let VariantBody::Body {
+                    ref name, ref body, ..
+                } = variant.body
+                {
+                    let condition = variant.cfg.to_condition(config);
+                    condition.write_before(config, out);
+                    write!(
+                        out,
+                        "case {}::{}: {}.~{}(); break;",
+                        self.tag.as_ref().unwrap(),
+                        variant.export_name,
+                        name,
+                        body.export_name(),
+                    );
+                    condition.write_after(config, out);
+                    out.new_line();
+                } else {
+                    exhaustive = false;
+                }
+            }
+            if !exhaustive {
+                write!(out, "default: break;");
+            }
+            out.close_brace(false);
+            out.close_brace(false);
+        }
+
+        if config
+            .enumeration
+            .derive_tagged_enum_copy_constructor(&self.annotations)
+        {
+            out.new_line();
+            out.new_line();
+            write_attrs!("copy-constructor");
+            write!(
+                out,
+                "{}(const {}& {})",
+                self.export_name, self.export_name, other
+            );
+            out.new_line();
+            write!(out, " : tag({}.tag)", other);
+            out.open_brace();
+            write!(out, "switch (tag)");
+            out.open_brace();
+            let mut exhaustive = true;
+            for variant in &self.variants {
+                if let VariantBody::Body {
+                    ref name, ref body, ..
+                } = variant.body
+                {
+                    let condition = variant.cfg.to_condition(config);
+                    condition.write_before(config, out);
+                    write!(
+                        out,
+                        "case {}::{}: ::new (&{}) ({})({}.{}); break;",
+                        self.tag.as_ref().unwrap(),
+                        variant.export_name,
+                        name,
+                        body.export_name(),
+                        other,
+                        name,
+                    );
+                    condition.write_after(config, out);
+                    out.new_line();
+                } else {
+                    exhaustive = false;
+                }
+            }
+            if !exhaustive {
+                write!(out, "default: break;");
+            }
+            out.close_brace(false);
+            out.close_brace(false);
+
+            if config
+                .enumeration
+                .derive_tagged_enum_copy_assignment(&self.annotations)
+            {
+                out.new_line();
+                write_attrs!("copy-assignment");
+                write!(
+                    out,
+                    "{}& operator=(const {}& {})",
+                    self.export_name, self.export_name, other
+                );
+                out.open_brace();
+                write!(out, "if (this != &{})", other);
+                out.open_brace();
+                write!(out, "this->~{}();", self.export_name);
+                out.new_line();
+                write!(out, "new (this) {}({});", self.export_name, other);
+                out.close_brace(false);
+                out.new_line();
+                write!(out, "return *this;");
+                out.close_brace(false);
+            }
+        }
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        for variant in &mut self.variants {
+            variant.simplify_standard_types(config);
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/field.rs b/cbindgen-0.24.5/src/bindgen/ir/field.rs
new file mode 100644
index 0000000..6e132bf
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/field.rs
@@ -0,0 +1,80 @@
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::cdecl;
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::ir::{AnnotationSet, Cfg, ConditionWrite};
+use crate::bindgen::ir::{Documentation, Path, ToCondition, Type};
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct Field {
+    pub name: String,
+    pub ty: Type,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+}
+
+impl Field {
+    pub fn from_name_and_type(name: String, ty: Type) -> Field {
+        Field {
+            name,
+            ty,
+            cfg: None,
+            annotations: AnnotationSet::new(),
+            documentation: Documentation::none(),
+        }
+    }
+
+    pub fn load(field: &syn::Field, self_path: &Path) -> Result<Option<Field>, String> {
+        Ok(if let Some(mut ty) = Type::load(&field.ty)? {
+            ty.replace_self_with(self_path);
+            Some(Field {
+                name: field
+                    .ident
+                    .as_ref()
+                    .ok_or_else(|| "field is missing identifier".to_string())?
+                    .unraw()
+                    .to_string(),
+                ty,
+                cfg: Cfg::load(&field.attrs),
+                annotations: AnnotationSet::load(&field.attrs)?,
+                documentation: Documentation::load(&field.attrs),
+            })
+        } else {
+            None
+        })
+    }
+}
+
+impl Source for Field {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        // Cython doesn't support conditional fields.
+        let condition = self.cfg.to_condition(config);
+        if config.language != Language::Cython {
+            condition.write_before(config, out);
+        }
+
+        self.documentation.write(config, out);
+        cdecl::write_field(out, &self.ty, &self.name, config);
+        // Cython extern declarations don't manage layouts, layouts are defined entierly by the
+        // corresponding C code. So we can omit bitfield sizes which are not supported by Cython.
+        if config.language != Language::Cython {
+            if let Some(bitfield) = self.annotations.atom("bitfield") {
+                write!(out, ": {}", bitfield.unwrap_or_default());
+            }
+        }
+
+        if config.language != Language::Cython {
+            condition.write_after(config, out);
+            // FIXME(#634): `write_vertical_source_list` should support
+            // configuring list elements natively. For now we print a newline
+            // here to avoid printing `#endif;` with semicolon.
+            if condition.is_some() {
+                out.new_line();
+            }
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/function.rs b/cbindgen-0.24.5/src/bindgen/ir/function.rs
new file mode 100644
index 0000000..da09207
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/function.rs
@@ -0,0 +1,376 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::HashMap;
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::cdecl;
+use crate::bindgen::config::{Config, Language, Layout};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, ConditionWrite, Documentation, GenericPath, Path, ToCondition, Type,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::rename::{IdentifierType, RenameRule};
+use crate::bindgen::reserved;
+use crate::bindgen::utilities::IterHelpers;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct FunctionArgument {
+    pub name: Option<String>,
+    pub ty: Type,
+    pub array_length: Option<String>,
+}
+
+#[derive(Debug, Clone)]
+pub struct Function {
+    pub path: Path,
+    /// Path to the self-type of the function
+    /// If the function is a method, this will contain the path of the type in the impl block
+    pub self_type_path: Option<Path>,
+    pub ret: Type,
+    pub args: Vec<FunctionArgument>,
+    pub extern_decl: bool,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+    pub never_return: bool,
+}
+
+impl Function {
+    pub fn load(
+        path: Path,
+        self_type_path: Option<&Path>,
+        sig: &syn::Signature,
+        extern_decl: bool,
+        attrs: &[syn::Attribute],
+        mod_cfg: Option<&Cfg>,
+    ) -> Result<Function, String> {
+        let mut args = sig.inputs.iter().try_skip_map(|x| x.as_argument())?;
+
+        let (mut ret, never_return) = Type::load_from_output(&sig.output)?;
+
+        if let Some(self_path) = self_type_path {
+            for arg in &mut args {
+                arg.ty.replace_self_with(self_path);
+            }
+            ret.replace_self_with(self_path);
+        }
+
+        Ok(Function {
+            path,
+            self_type_path: self_type_path.cloned(),
+            ret,
+            args,
+            extern_decl,
+            cfg: Cfg::append(mod_cfg, Cfg::load(attrs)),
+            annotations: AnnotationSet::load(attrs)?,
+            documentation: Documentation::load(attrs),
+            never_return,
+        })
+    }
+
+    pub fn swift_name(&self, config: &Config) -> Option<String> {
+        if config.language == Language::Cython {
+            return None;
+        }
+        // If the symbol name starts with the type name, separate the two components with '.'
+        // so that Swift recognises the association between the method and the type
+        let (ref type_prefix, ref type_name) = match self.self_type_path {
+            Some(ref type_name) => {
+                let type_name = type_name.to_string();
+                if !self.path.name().starts_with(&type_name) {
+                    return Some(self.path.to_string());
+                }
+                (format!("{}.", type_name), type_name)
+            }
+            None => ("".to_string(), "".to_string()),
+        };
+
+        let item_name = self
+            .path
+            .name()
+            .trim_start_matches(type_name)
+            .trim_start_matches('_');
+
+        let item_args = {
+            let mut items = Vec::with_capacity(self.args.len());
+            for arg in self.args.iter() {
+                items.push(format!("{}:", arg.name.as_ref()?.as_str()));
+            }
+            items.join("")
+        };
+        Some(format!("{}{}({})", type_prefix, item_name, item_args))
+    }
+
+    pub fn path(&self) -> &Path {
+        &self.path
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        self.ret.simplify_standard_types(config);
+        for arg in &mut self.args {
+            arg.ty.simplify_standard_types(config);
+        }
+    }
+
+    pub fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        self.ret.add_dependencies(library, out);
+        for arg in &self.args {
+            arg.ty.add_dependencies(library, out);
+        }
+    }
+
+    pub fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        self.ret.add_monomorphs(library, out);
+        for arg in &self.args {
+            arg.ty.add_monomorphs(library, out);
+        }
+    }
+
+    pub fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        self.ret.mangle_paths(monomorphs);
+        for arg in &mut self.args {
+            arg.ty.mangle_paths(monomorphs);
+        }
+    }
+
+    pub fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        self.ret.resolve_declaration_types(resolver);
+        for arg in &mut self.args {
+            arg.ty.resolve_declaration_types(resolver);
+        }
+    }
+
+    pub fn rename_for_config(&mut self, config: &Config) {
+        // Rename the types used in arguments
+        let generic_params = Default::default();
+        self.ret.rename_for_config(config, &generic_params);
+
+        // Apply rename rules to argument names
+        let rules = self
+            .annotations
+            .parse_atom::<RenameRule>("rename-all")
+            .unwrap_or(config.function.rename_args);
+
+        if let Some(r) = rules.not_none() {
+            let args = std::mem::take(&mut self.args);
+            self.args = args
+                .into_iter()
+                .map(|arg| {
+                    let name = arg
+                        .name
+                        .map(|n| r.apply(&n, IdentifierType::FunctionArg).into_owned());
+                    FunctionArgument {
+                        name,
+                        ty: arg.ty,
+                        array_length: None,
+                    }
+                })
+                .collect()
+        }
+
+        // Escape C/C++ reserved keywords used in argument names, and
+        // recursively rename argument types.
+        for arg in &mut self.args {
+            arg.ty.rename_for_config(config, &generic_params);
+            if let Some(ref mut name) = arg.name {
+                reserved::escape(name);
+            }
+        }
+
+        // Save the array length of the pointer arguments which need to use
+        // the C-array notation
+        if let Some(tuples) = self.annotations.list("ptrs-as-arrays") {
+            let mut ptrs_as_arrays: HashMap<String, String> = HashMap::new();
+            for str_tuple in tuples {
+                let parts: Vec<&str> = str_tuple[1..str_tuple.len() - 1]
+                    .split(';')
+                    .map(|x| x.trim())
+                    .collect();
+                if parts.len() != 2 {
+                    warn!(
+                        "{:?} does not follow the correct syntax, so the annotation is being ignored",
+                        parts
+                    );
+                    continue;
+                }
+                ptrs_as_arrays.insert(parts[0].to_string(), parts[1].to_string());
+            }
+
+            for arg in &mut self.args {
+                match arg.ty {
+                    Type::Ptr { .. } => {}
+                    _ => continue,
+                }
+                let name = match arg.name {
+                    Some(ref name) => name,
+                    None => continue,
+                };
+                arg.array_length = ptrs_as_arrays.get(name).cloned();
+            }
+        }
+    }
+}
+
+impl Source for Function {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        fn write_1<W: Write>(func: &Function, config: &Config, out: &mut SourceWriter<W>) {
+            let prefix = config.function.prefix(&func.annotations);
+            let postfix = config.function.postfix(&func.annotations);
+
+            let condition = func.cfg.to_condition(config);
+            condition.write_before(config, out);
+
+            func.documentation.write(config, out);
+
+            if func.extern_decl {
+                out.write("extern ");
+            } else {
+                if let Some(ref prefix) = prefix {
+                    write!(out, "{} ", prefix);
+                }
+                if func.annotations.must_use(config) {
+                    if let Some(ref anno) = config.function.must_use {
+                        write!(out, "{} ", anno);
+                    }
+                }
+            }
+            cdecl::write_func(out, func, Layout::Horizontal, config);
+
+            if !func.extern_decl {
+                if let Some(ref postfix) = postfix {
+                    write!(out, " {}", postfix);
+                }
+            }
+
+            if let Some(ref swift_name_macro) = config.function.swift_name_macro {
+                if let Some(swift_name) = func.swift_name(config) {
+                    write!(out, " {}({})", swift_name_macro, swift_name);
+                }
+            }
+
+            out.write(";");
+
+            condition.write_after(config, out);
+        }
+
+        fn write_2<W: Write>(func: &Function, config: &Config, out: &mut SourceWriter<W>) {
+            let prefix = config.function.prefix(&func.annotations);
+            let postfix = config.function.postfix(&func.annotations);
+
+            let condition = func.cfg.to_condition(config);
+
+            condition.write_before(config, out);
+
+            func.documentation.write(config, out);
+
+            if func.extern_decl {
+                out.write("extern ");
+            } else {
+                if let Some(ref prefix) = prefix {
+                    write!(out, "{}", prefix);
+                    out.new_line();
+                }
+                if func.annotations.must_use(config) {
+                    if let Some(ref anno) = config.function.must_use {
+                        write!(out, "{}", anno);
+                        out.new_line();
+                    }
+                }
+            }
+            cdecl::write_func(out, func, Layout::Vertical, config);
+            if !func.extern_decl {
+                if let Some(ref postfix) = postfix {
+                    out.new_line();
+                    write!(out, "{}", postfix);
+                }
+            }
+
+            if let Some(ref swift_name_macro) = config.function.swift_name_macro {
+                if let Some(swift_name) = func.swift_name(config) {
+                    write!(out, " {}({})", swift_name_macro, swift_name);
+                }
+            }
+
+            out.write(";");
+
+            condition.write_after(config, out);
+        }
+
+        match config.function.args {
+            Layout::Horizontal => write_1(self, config, out),
+            Layout::Vertical => write_2(self, config, out),
+            Layout::Auto => {
+                if !out.try_write(|out| write_1(self, config, out), config.line_length) {
+                    write_2(self, config, out)
+                }
+            }
+        }
+    }
+}
+
+trait SynFnArgHelpers {
+    fn as_argument(&self) -> Result<Option<FunctionArgument>, String>;
+}
+
+fn gen_self_type(receiver: &syn::Receiver) -> Type {
+    let self_ty = Type::Path(GenericPath::self_path());
+    if receiver.reference.is_none() {
+        return self_ty;
+    }
+
+    let is_const = receiver.mutability.is_none();
+    Type::Ptr {
+        ty: Box::new(self_ty),
+        is_const,
+        is_nullable: false,
+        is_ref: false,
+    }
+}
+
+impl SynFnArgHelpers for syn::FnArg {
+    fn as_argument(&self) -> Result<Option<FunctionArgument>, String> {
+        match *self {
+            syn::FnArg::Typed(syn::PatType {
+                ref pat, ref ty, ..
+            }) => {
+                let name = match **pat {
+                    syn::Pat::Wild(..) => None,
+                    syn::Pat::Ident(syn::PatIdent { ref ident, .. }) => {
+                        Some(ident.unraw().to_string())
+                    }
+                    _ => {
+                        return Err(format!(
+                            "Parameter has an unsupported argument name: {:?}",
+                            pat
+                        ))
+                    }
+                };
+                let ty = match Type::load(ty)? {
+                    Some(x) => x,
+                    None => return Ok(None),
+                };
+                if let Type::Array(..) = ty {
+                    return Err("Array as function arguments are not supported".to_owned());
+                }
+                Ok(Some(FunctionArgument {
+                    name,
+                    ty,
+                    array_length: None,
+                }))
+            }
+            syn::FnArg::Receiver(ref receiver) => Ok(Some(FunctionArgument {
+                name: Some("self".to_string()),
+                ty: gen_self_type(receiver),
+                array_length: None,
+            })),
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/generic_path.rs b/cbindgen-0.24.5/src/bindgen/ir/generic_path.rs
new file mode 100644
index 0000000..ef14890
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/generic_path.rs
@@ -0,0 +1,303 @@
+use std::io::Write;
+use std::ops::Deref;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::cdecl;
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::declarationtyperesolver::{DeclarationType, DeclarationTypeResolver};
+use crate::bindgen::ir::{ConstExpr, Path, Type};
+use crate::bindgen::utilities::IterHelpers;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub enum GenericParamType {
+    Type,
+    Const(Type),
+}
+
+#[derive(Debug, Clone)]
+pub struct GenericParam {
+    name: Path,
+    ty: GenericParamType,
+}
+
+impl GenericParam {
+    pub fn new_type_param(name: &str) -> Self {
+        GenericParam {
+            name: Path::new(name),
+            ty: GenericParamType::Type,
+        }
+    }
+
+    pub fn load(param: &syn::GenericParam) -> Result<Option<Self>, String> {
+        match *param {
+            syn::GenericParam::Type(syn::TypeParam { ref ident, .. }) => Ok(Some(GenericParam {
+                name: Path::new(ident.unraw().to_string()),
+                ty: GenericParamType::Type,
+            })),
+
+            syn::GenericParam::Lifetime(_) => Ok(None),
+
+            syn::GenericParam::Const(syn::ConstParam {
+                ref ident, ref ty, ..
+            }) => match Type::load(ty)? {
+                None => {
+                    // A type that evaporates, like PhantomData.
+                    Err(format!("unsupported const generic type: {:?}", ty))
+                }
+                Some(ty) => Ok(Some(GenericParam {
+                    name: Path::new(ident.unraw().to_string()),
+                    ty: GenericParamType::Const(ty),
+                })),
+            },
+        }
+    }
+
+    pub fn name(&self) -> &Path {
+        &self.name
+    }
+}
+
+#[derive(Default, Debug, Clone)]
+pub struct GenericParams(pub Vec<GenericParam>);
+
+impl GenericParams {
+    pub fn load(generics: &syn::Generics) -> Result<Self, String> {
+        let mut params = vec![];
+        for param in &generics.params {
+            if let Some(p) = GenericParam::load(param)? {
+                params.push(p);
+            }
+        }
+
+        Ok(GenericParams(params))
+    }
+
+    /// Associate each parameter with an argument.
+    pub fn call<'out>(
+        &'out self,
+        item_name: &str,
+        arguments: &'out [GenericArgument],
+    ) -> Vec<(&'out Path, &'out GenericArgument)> {
+        assert!(self.len() > 0, "{} is not generic", item_name);
+        assert!(
+            self.len() == arguments.len(),
+            "{} has {} params but is being instantiated with {} values",
+            item_name,
+            self.len(),
+            arguments.len(),
+        );
+        self.iter()
+            .map(|param| param.name())
+            .zip(arguments.iter())
+            .collect()
+    }
+
+    fn write_internal<F: Write>(
+        &self,
+        config: &Config,
+        out: &mut SourceWriter<F>,
+        with_default: bool,
+    ) {
+        if !self.0.is_empty() && config.language == Language::Cxx {
+            out.write("template<");
+            for (i, item) in self.0.iter().enumerate() {
+                if i != 0 {
+                    out.write(", ");
+                }
+                match item.ty {
+                    GenericParamType::Type => {
+                        write!(out, "typename {}", item.name);
+                        if with_default {
+                            write!(out, " = void");
+                        }
+                    }
+                    GenericParamType::Const(ref ty) => {
+                        cdecl::write_field(out, ty, item.name.name(), config);
+                        if with_default {
+                            write!(out, " = 0");
+                        }
+                    }
+                }
+            }
+            out.write(">");
+            out.new_line();
+        }
+    }
+
+    pub fn write_with_default<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        self.write_internal(config, out, true);
+    }
+}
+
+impl Deref for GenericParams {
+    type Target = [GenericParam];
+
+    fn deref(&self) -> &[GenericParam] {
+        &self.0
+    }
+}
+
+impl Source for GenericParams {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        self.write_internal(config, out, false);
+    }
+}
+
+/// A (non-lifetime) argument passed to a generic, either a type or a constant expression.
+///
+/// Note: Both arguments in a type like `Array<T, N>` are represented as
+/// `GenericArgument::Type`s, even if `N` is actually the name of a const. This
+/// is a consequence of `syn::GenericArgument` doing the same thing.
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub enum GenericArgument {
+    Type(Type),
+    Const(ConstExpr),
+}
+
+impl GenericArgument {
+    pub fn specialize(&self, mappings: &[(&Path, &GenericArgument)]) -> GenericArgument {
+        match *self {
+            GenericArgument::Type(ref ty) => {
+                if let Type::Path(ref path) = *ty {
+                    if path.is_single_identifier() {
+                        // See note on `GenericArgument` above: `ty` may
+                        // actually be the name of a const. Check for that now.
+                        for &(name, value) in mappings {
+                            if *name == path.path {
+                                return value.clone();
+                            }
+                        }
+                    }
+                }
+                GenericArgument::Type(ty.specialize(mappings))
+            }
+            GenericArgument::Const(ref expr) => GenericArgument::Const(expr.clone()),
+        }
+    }
+
+    pub fn rename_for_config(&mut self, config: &Config, generic_params: &GenericParams) {
+        match *self {
+            GenericArgument::Type(ref mut ty) => ty.rename_for_config(config, generic_params),
+            GenericArgument::Const(ref mut expr) => expr.rename_for_config(config),
+        }
+    }
+}
+
+impl Source for GenericArgument {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        match *self {
+            GenericArgument::Type(ref ty) => ty.write(config, out),
+            GenericArgument::Const(ref expr) => expr.write(config, out),
+        }
+    }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub struct GenericPath {
+    path: Path,
+    export_name: String,
+    generics: Vec<GenericArgument>,
+    ctype: Option<DeclarationType>,
+}
+
+impl GenericPath {
+    pub fn new(path: Path, generics: Vec<GenericArgument>) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            generics,
+            ctype: None,
+        }
+    }
+
+    pub fn self_path() -> Self {
+        Self::new(Path::new("Self"), vec![])
+    }
+
+    pub fn replace_self_with(&mut self, self_ty: &Path) {
+        if self.path.replace_self_with(self_ty) {
+            self.export_name = self_ty.name().to_owned();
+        }
+        // Caller deals with generics.
+    }
+
+    pub fn path(&self) -> &Path {
+        &self.path
+    }
+
+    pub fn generics(&self) -> &[GenericArgument] {
+        &self.generics
+    }
+
+    pub fn generics_mut(&mut self) -> &mut [GenericArgument] {
+        &mut self.generics
+    }
+
+    pub fn ctype(&self) -> Option<&DeclarationType> {
+        self.ctype.as_ref()
+    }
+
+    pub fn name(&self) -> &str {
+        self.path.name()
+    }
+
+    pub fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    pub fn is_single_identifier(&self) -> bool {
+        self.generics.is_empty()
+    }
+
+    pub fn rename_for_config(&mut self, config: &Config, generic_params: &GenericParams) {
+        for generic in &mut self.generics {
+            generic.rename_for_config(config, generic_params);
+        }
+        if !generic_params.iter().any(|param| param.name == self.path) {
+            config.export.rename(&mut self.export_name);
+        }
+    }
+
+    pub fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        self.ctype = resolver.type_for(&self.path);
+    }
+
+    pub fn load(path: &syn::Path) -> Result<Self, String> {
+        assert!(
+            !path.segments.is_empty(),
+            "{:?} doesn't have any segments",
+            path
+        );
+        let last_segment = path.segments.last().unwrap();
+        let name = last_segment.ident.unraw().to_string();
+
+        let path = Path::new(name);
+        let phantom_data_path = Path::new("PhantomData");
+        if path == phantom_data_path {
+            return Ok(Self::new(path, Vec::new()));
+        }
+
+        let generics = match last_segment.arguments {
+            syn::PathArguments::AngleBracketed(syn::AngleBracketedGenericArguments {
+                ref args,
+                ..
+            }) => args.iter().try_skip_map(|x| match *x {
+                syn::GenericArgument::Type(ref x) => Ok(Type::load(x)?.map(GenericArgument::Type)),
+                syn::GenericArgument::Lifetime(_) => Ok(None),
+                syn::GenericArgument::Const(ref x) => {
+                    Ok(Some(GenericArgument::Const(ConstExpr::load(x)?)))
+                }
+                _ => Err(format!("can't handle generic argument {:?}", x)),
+            })?,
+            syn::PathArguments::Parenthesized(_) => {
+                return Err("Path contains parentheses.".to_owned());
+            }
+            _ => Vec::new(),
+        };
+
+        Ok(Self::new(path, generics))
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/global.rs b/cbindgen-0.24.5/src/bindgen/ir/global.rs
new file mode 100644
index 0000000..47c9960
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/global.rs
@@ -0,0 +1,119 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::cdecl;
+use crate::bindgen::config::Config;
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{AnnotationSet, Cfg, Documentation, Item, ItemContainer, Path, Type};
+use crate::bindgen::library::Library;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct Static {
+    pub path: Path,
+    pub export_name: String,
+    pub ty: Type,
+    pub mutable: bool,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+}
+
+impl Static {
+    pub fn load(item: &syn::ItemStatic, mod_cfg: Option<&Cfg>) -> Result<Static, String> {
+        let ty = Type::load(&item.ty)?;
+
+        if ty.is_none() {
+            return Err("Cannot have a zero sized static definition.".to_owned());
+        }
+
+        Ok(Static::new(
+            Path::new(item.ident.unraw().to_string()),
+            ty.unwrap(),
+            item.mutability.is_some(),
+            Cfg::append(mod_cfg, Cfg::load(&item.attrs)),
+            AnnotationSet::load(&item.attrs)?,
+            Documentation::load(&item.attrs),
+        ))
+    }
+
+    pub fn new(
+        path: Path,
+        ty: Type,
+        mutable: bool,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+    ) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            ty,
+            mutable,
+            cfg,
+            annotations,
+            documentation,
+        }
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        self.ty.simplify_standard_types(config);
+    }
+}
+
+impl Item for Static {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::Static(self.clone())
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        self.ty.rename_for_config(config, &Default::default());
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        self.ty.resolve_declaration_types(resolver);
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        self.ty.add_dependencies(library, out);
+    }
+}
+
+impl Source for Static {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        out.write("extern ");
+        if let Type::Ptr { is_const: true, .. } = self.ty {
+        } else if !self.mutable {
+            out.write("const ");
+        }
+        cdecl::write_field(out, &self.ty, &self.export_name, config);
+        out.write(";");
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/item.rs b/cbindgen-0.24.5/src/bindgen/ir/item.rs
new file mode 100644
index 0000000..16d98f5
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/item.rs
@@ -0,0 +1,250 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use indexmap::IndexMap;
+use std::mem;
+
+use crate::bindgen::config::Config;
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, Constant, Enum, GenericArgument, OpaqueItem, Path, Static, Struct, Typedef,
+    Union,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::monomorph::Monomorphs;
+
+/// An item is any type of rust item besides a function
+pub trait Item {
+    fn path(&self) -> &Path;
+    fn name(&self) -> &str {
+        self.path().name()
+    }
+    fn export_name(&self) -> &str {
+        self.name()
+    }
+    fn cfg(&self) -> Option<&Cfg>;
+    fn annotations(&self) -> &AnnotationSet;
+    fn annotations_mut(&mut self) -> &mut AnnotationSet;
+
+    fn container(&self) -> ItemContainer;
+
+    fn collect_declaration_types(&self, _resolver: &mut DeclarationTypeResolver) {
+        unimplemented!()
+    }
+    fn resolve_declaration_types(&mut self, _resolver: &DeclarationTypeResolver) {
+        unimplemented!()
+    }
+    fn rename_for_config(&mut self, _config: &Config) {}
+    fn add_dependencies(&self, _library: &Library, _out: &mut Dependencies) {}
+    fn instantiate_monomorph(
+        &self,
+        _generics: &[GenericArgument],
+        _library: &Library,
+        _out: &mut Monomorphs,
+    ) {
+        unreachable!("Cannot instantiate {} as a generic.", self.name())
+    }
+}
+
+#[derive(Debug, Clone)]
+pub enum ItemContainer {
+    Constant(Constant),
+    Static(Static),
+    OpaqueItem(OpaqueItem),
+    Struct(Struct),
+    Union(Union),
+    Enum(Enum),
+    Typedef(Typedef),
+}
+
+impl ItemContainer {
+    pub fn deref(&self) -> &dyn Item {
+        match *self {
+            ItemContainer::Constant(ref x) => x,
+            ItemContainer::Static(ref x) => x,
+            ItemContainer::OpaqueItem(ref x) => x,
+            ItemContainer::Struct(ref x) => x,
+            ItemContainer::Union(ref x) => x,
+            ItemContainer::Enum(ref x) => x,
+            ItemContainer::Typedef(ref x) => x,
+        }
+    }
+}
+
+#[derive(Debug, Clone)]
+pub enum ItemValue<T: Item> {
+    Cfg(Vec<T>),
+    Single(T),
+}
+
+#[derive(Debug, Clone)]
+pub struct ItemMap<T: Item> {
+    data: IndexMap<Path, ItemValue<T>>,
+}
+
+impl<T: Item> Default for ItemMap<T> {
+    fn default() -> ItemMap<T> {
+        ItemMap {
+            data: Default::default(),
+        }
+    }
+}
+
+impl<T: Item + Clone> ItemMap<T> {
+    pub fn rebuild(&mut self) {
+        let old = mem::take(self);
+        old.for_all_items(|x| {
+            self.try_insert(x.clone());
+        });
+    }
+
+    pub fn try_insert(&mut self, item: T) -> bool {
+        match (item.cfg().is_some(), self.data.get_mut(item.path())) {
+            (true, Some(&mut ItemValue::Cfg(ref mut items))) => {
+                items.push(item);
+                return true;
+            }
+            (false, Some(&mut ItemValue::Cfg(_))) => {
+                return false;
+            }
+            (true, Some(&mut ItemValue::Single(_))) => {
+                return false;
+            }
+            (false, Some(&mut ItemValue::Single(_))) => {
+                return false;
+            }
+            _ => {}
+        }
+
+        let path = item.path().clone();
+        if item.cfg().is_some() {
+            self.data.insert(path, ItemValue::Cfg(vec![item]));
+        } else {
+            self.data.insert(path, ItemValue::Single(item));
+        }
+
+        true
+    }
+
+    pub fn extend_with(&mut self, other: &ItemMap<T>) {
+        other.for_all_items(|x| {
+            self.try_insert(x.clone());
+        });
+    }
+
+    pub fn to_vec(&self) -> Vec<T> {
+        let mut result = Vec::with_capacity(self.data.len());
+        for container in self.data.values() {
+            match *container {
+                ItemValue::Cfg(ref items) => result.extend_from_slice(items),
+                ItemValue::Single(ref item) => {
+                    result.push(item.clone());
+                }
+            }
+        }
+        result
+    }
+
+    pub fn get_items(&self, path: &Path) -> Option<Vec<ItemContainer>> {
+        Some(match *self.data.get(path)? {
+            ItemValue::Cfg(ref items) => items.iter().map(|x| x.container()).collect(),
+            ItemValue::Single(ref item) => vec![item.container()],
+        })
+    }
+
+    pub fn filter<F>(&mut self, callback: F)
+    where
+        F: Fn(&T) -> bool,
+    {
+        let data = mem::take(&mut self.data);
+
+        for (name, container) in data {
+            match container {
+                ItemValue::Cfg(items) => {
+                    let mut new_items = Vec::new();
+                    for item in items {
+                        if !callback(&item) {
+                            new_items.push(item);
+                        }
+                    }
+                    if !new_items.is_empty() {
+                        self.data.insert(name, ItemValue::Cfg(new_items));
+                    }
+                }
+                ItemValue::Single(item) => {
+                    if !callback(&item) {
+                        self.data.insert(name, ItemValue::Single(item));
+                    }
+                }
+            }
+        }
+    }
+
+    pub fn for_all_items<F>(&self, mut callback: F)
+    where
+        F: FnMut(&T),
+    {
+        for container in self.data.values() {
+            match *container {
+                ItemValue::Cfg(ref items) => {
+                    for item in items {
+                        callback(item);
+                    }
+                }
+                ItemValue::Single(ref item) => callback(item),
+            }
+        }
+    }
+
+    pub fn for_all_items_mut<F>(&mut self, mut callback: F)
+    where
+        F: FnMut(&mut T),
+    {
+        for container in self.data.values_mut() {
+            match *container {
+                ItemValue::Cfg(ref mut items) => {
+                    for item in items {
+                        callback(item);
+                    }
+                }
+                ItemValue::Single(ref mut item) => callback(item),
+            }
+        }
+    }
+
+    pub fn for_items<F>(&self, path: &Path, mut callback: F)
+    where
+        F: FnMut(&T),
+    {
+        match self.data.get(path) {
+            Some(ItemValue::Cfg(items)) => {
+                for item in items {
+                    callback(item);
+                }
+            }
+            Some(ItemValue::Single(item)) => {
+                callback(item);
+            }
+            None => {}
+        }
+    }
+
+    pub fn for_items_mut<F>(&mut self, path: &Path, mut callback: F)
+    where
+        F: FnMut(&mut T),
+    {
+        match self.data.get_mut(path) {
+            Some(&mut ItemValue::Cfg(ref mut items)) => {
+                for item in items {
+                    callback(item);
+                }
+            }
+            Some(&mut ItemValue::Single(ref mut item)) => {
+                callback(item);
+            }
+            None => {}
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/mod.rs b/cbindgen-0.24.5/src/bindgen/ir/mod.rs
new file mode 100644
index 0000000..7b0a922
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/mod.rs
@@ -0,0 +1,39 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pub mod annotation;
+pub mod cfg;
+pub mod constant;
+pub mod documentation;
+pub mod enumeration;
+pub mod field;
+pub mod function;
+pub mod generic_path;
+pub mod global;
+pub mod item;
+pub mod opaque;
+pub mod path;
+pub mod repr;
+pub mod structure;
+pub mod ty;
+pub mod typedef;
+pub mod union;
+
+pub use self::annotation::{AnnotationSet, AnnotationValue};
+pub use self::cfg::*;
+pub use self::constant::*;
+pub use self::documentation::Documentation;
+pub use self::enumeration::*;
+pub use self::field::*;
+pub use self::function::*;
+pub use self::generic_path::*;
+pub use self::global::*;
+pub use self::item::*;
+pub use self::opaque::*;
+pub use self::path::*;
+pub use self::repr::*;
+pub use self::structure::*;
+pub use self::ty::*;
+pub use self::typedef::*;
+pub use self::union::*;
diff --git a/cbindgen-0.24.5/src/bindgen/ir/opaque.rs b/cbindgen-0.24.5/src/bindgen/ir/opaque.rs
new file mode 100644
index 0000000..4451d4a
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/opaque.rs
@@ -0,0 +1,176 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, ConditionWrite, Documentation, GenericArgument, GenericParams, Item,
+    ItemContainer, Path, ToCondition,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::mangle;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct OpaqueItem {
+    pub path: Path,
+    pub export_name: String,
+    pub generic_params: GenericParams,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+}
+
+impl OpaqueItem {
+    pub fn load(
+        path: Path,
+        generics: &syn::Generics,
+        attrs: &[syn::Attribute],
+        mod_cfg: Option<&Cfg>,
+    ) -> Result<OpaqueItem, String> {
+        Ok(Self::new(
+            path,
+            GenericParams::load(generics)?,
+            Cfg::append(mod_cfg, Cfg::load(attrs)),
+            AnnotationSet::load(attrs).unwrap_or_else(|_| AnnotationSet::new()),
+            Documentation::load(attrs),
+        ))
+    }
+
+    pub fn new(
+        path: Path,
+        generic_params: GenericParams,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+    ) -> OpaqueItem {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            generic_params,
+            cfg,
+            annotations,
+            documentation,
+        }
+    }
+}
+
+impl Item for OpaqueItem {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::OpaqueItem(self.clone())
+    }
+
+    fn collect_declaration_types(&self, resolver: &mut DeclarationTypeResolver) {
+        resolver.add_struct(&self.path);
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        config.export.rename(&mut self.export_name);
+    }
+
+    fn add_dependencies(&self, _: &Library, _: &mut Dependencies) {}
+
+    fn instantiate_monomorph(
+        &self,
+        generic_values: &[GenericArgument],
+        library: &Library,
+        out: &mut Monomorphs,
+    ) {
+        assert!(
+            !self.generic_params.is_empty(),
+            "{} is not generic",
+            self.path
+        );
+
+        // We can be instantiated with less generic params because of default
+        // template parameters, or because of empty types that we remove during
+        // parsing (`()`).
+        assert!(
+            self.generic_params.len() >= generic_values.len(),
+            "{} has {} params but is being instantiated with {} values",
+            self.path,
+            self.generic_params.len(),
+            generic_values.len(),
+        );
+
+        let mangled_path = mangle::mangle_path(
+            &self.path,
+            generic_values,
+            &library.get_config().export.mangle,
+        );
+
+        let monomorph = OpaqueItem::new(
+            mangled_path,
+            GenericParams::default(),
+            self.cfg.clone(),
+            self.annotations.clone(),
+            self.documentation.clone(),
+        );
+
+        out.insert_opaque(self, monomorph, generic_values.to_owned());
+    }
+}
+
+impl Source for OpaqueItem {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        let condition = self.cfg.to_condition(config);
+        condition.write_before(config, out);
+
+        self.documentation.write(config, out);
+
+        self.generic_params.write_with_default(config, out);
+
+        match config.language {
+            Language::C if config.style.generate_typedef() => {
+                write!(
+                    out,
+                    "typedef struct {} {};",
+                    self.export_name(),
+                    self.export_name()
+                );
+            }
+            Language::C | Language::Cxx => {
+                write!(out, "struct {};", self.export_name());
+            }
+            Language::Cython => {
+                write!(
+                    out,
+                    "{}struct {}",
+                    config.style.cython_def(),
+                    self.export_name()
+                );
+                out.open_brace();
+                out.write("pass");
+                out.close_brace(false);
+            }
+        }
+
+        condition.write_after(config, out);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/path.rs b/cbindgen-0.24.5/src/bindgen/ir/path.rs
new file mode 100644
index 0000000..480c31b
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/path.rs
@@ -0,0 +1,50 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::cmp::Ordering;
+use std::fmt;
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct Path {
+    name: String,
+}
+
+impl Path {
+    pub fn new<T>(name: T) -> Self
+    where
+        String: From<T>,
+    {
+        Self { name: name.into() }
+    }
+
+    pub fn name(&self) -> &str {
+        &self.name
+    }
+
+    pub fn replace_self_with(&mut self, path: &Self) -> bool {
+        if self.name() != "Self" {
+            return false;
+        }
+        *self = path.clone();
+        true
+    }
+}
+
+impl PartialOrd for Path {
+    fn partial_cmp(&self, other: &Path) -> Option<Ordering> {
+        Some(self.cmp(other))
+    }
+}
+
+impl Ord for Path {
+    fn cmp(&self, other: &Path) -> Ordering {
+        self.name.cmp(&other.name)
+    }
+}
+
+impl fmt::Display for Path {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "{}", self.name)
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/repr.rs b/cbindgen-0.24.5/src/bindgen/ir/repr.rs
new file mode 100644
index 0000000..9713201
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/repr.rs
@@ -0,0 +1,187 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::ir::ty::{IntKind, PrimitiveType};
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum ReprStyle {
+    Rust,
+    C,
+    Transparent,
+}
+
+impl Default for ReprStyle {
+    fn default() -> Self {
+        ReprStyle::Rust
+    }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct ReprType {
+    kind: IntKind,
+    signed: bool,
+}
+
+impl ReprType {
+    pub(crate) fn to_primitive(self) -> PrimitiveType {
+        PrimitiveType::Integer {
+            kind: self.kind,
+            signed: self.signed,
+            zeroable: true,
+        }
+    }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum ReprAlign {
+    Packed,
+    Align(u64),
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Default)]
+pub struct Repr {
+    pub style: ReprStyle,
+    pub ty: Option<ReprType>,
+    pub align: Option<ReprAlign>,
+}
+
+impl Repr {
+    pub fn load(attrs: &[syn::Attribute]) -> Result<Repr, String> {
+        let ids = attrs
+            .iter()
+            .filter_map(|attr| {
+                if let syn::Meta::List(syn::MetaList { path, nested, .. }) =
+                    attr.parse_meta().ok()?
+                {
+                    if path.is_ident("repr") {
+                        return Some(nested.into_iter().collect::<Vec<_>>());
+                    }
+                }
+                None
+            })
+            .flatten()
+            .filter_map(|meta| match meta {
+                syn::NestedMeta::Meta(syn::Meta::Path(path)) => Some((
+                    path.segments.first().unwrap().ident.unraw().to_string(),
+                    None,
+                )),
+                syn::NestedMeta::Meta(syn::Meta::List(syn::MetaList { path, nested, .. })) => {
+                    Some((
+                        path.segments.first().unwrap().ident.unraw().to_string(),
+                        Some(
+                            nested
+                                .iter()
+                                .filter_map(|meta| match meta {
+                                    // Only used for #[repr(align(...))].
+                                    syn::NestedMeta::Lit(syn::Lit::Int(literal)) => {
+                                        Some(literal.base10_digits().to_string())
+                                    }
+                                    // Only single levels of nesting supported at the moment.
+                                    _ => None,
+                                })
+                                .collect::<Vec<_>>(),
+                        ),
+                    ))
+                }
+                _ => None,
+            });
+
+        let mut repr = Repr::default();
+        for id in ids {
+            let (int_kind, signed) = match (id.0.as_ref(), id.1) {
+                ("u8", None) => (IntKind::B8, false),
+                ("u16", None) => (IntKind::B16, false),
+                ("u32", None) => (IntKind::B32, false),
+                ("u64", None) => (IntKind::B64, false),
+                ("usize", None) => (IntKind::Size, false),
+                ("i8", None) => (IntKind::B8, true),
+                ("i16", None) => (IntKind::B16, true),
+                ("i32", None) => (IntKind::B32, true),
+                ("i64", None) => (IntKind::B64, true),
+                ("isize", None) => (IntKind::Size, true),
+                ("C", None) => {
+                    repr.style = ReprStyle::C;
+                    continue;
+                }
+                ("transparent", None) => {
+                    repr.style = ReprStyle::Transparent;
+                    continue;
+                }
+                ("packed", args) => {
+                    // #[repr(packed(n))] not supported because of some open questions about how
+                    // to calculate the native alignment of types. See eqrion/cbindgen#433.
+                    if args.is_some() {
+                        return Err(
+                            "Not-yet-implemented #[repr(packed(...))] encountered.".to_string()
+                        );
+                    }
+                    let align = ReprAlign::Packed;
+                    // Only permit a single alignment-setting repr.
+                    if let Some(old_align) = repr.align {
+                        return Err(format!(
+                            "Conflicting #[repr(align(...))] type hints {:?} and {:?}.",
+                            old_align, align
+                        ));
+                    }
+                    repr.align = Some(align);
+                    continue;
+                }
+                ("align", Some(args)) => {
+                    // #[repr(align(...))] only allows a single argument.
+                    if args.len() != 1 {
+                        return Err(format!(
+                            "Unsupported #[repr(align({}))], align must have exactly one argument.",
+                            args.join(", ")
+                        ));
+                    }
+                    // Must be a positive integer.
+                    let align = match args.first().unwrap().parse::<u64>() {
+                        Ok(align) => align,
+                        Err(_) => {
+                            return Err(format!("Non-numeric #[repr(align({}))].", args.join(", ")))
+                        }
+                    };
+                    // Must be a power of 2.
+                    if !align.is_power_of_two() || align == 0 {
+                        return Err(format!("Invalid alignment to #[repr(align({}))].", align));
+                    }
+                    // Only permit a single alignment-setting repr.
+                    if let Some(old_align) = repr.align {
+                        return Err(format!(
+                            "Conflicting #[repr(align(...))] type hints {:?} and {:?}.",
+                            old_align,
+                            ReprAlign::Align(align)
+                        ));
+                    }
+                    repr.align = Some(ReprAlign::Align(align));
+                    continue;
+                }
+                (path, args) => match args {
+                    None => return Err(format!("Unsupported #[repr({})].", path)),
+                    Some(args) => {
+                        return Err(format!(
+                            "Unsupported #[repr({}({}))].",
+                            path,
+                            args.join(", ")
+                        ));
+                    }
+                },
+            };
+            let ty = ReprType {
+                kind: int_kind,
+                signed,
+            };
+            if let Some(old_ty) = repr.ty {
+                return Err(format!(
+                    "Conflicting #[repr(...)] type hints {:?} and {:?}.",
+                    old_ty, ty
+                ));
+            }
+            repr.ty = Some(ty);
+        }
+        Ok(repr)
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/structure.rs b/cbindgen-0.24.5/src/bindgen/ir/structure.rs
new file mode 100644
index 0000000..9f77739
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/structure.rs
@@ -0,0 +1,710 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::config::{Config, Language, LayoutConfig};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, ConditionWrite, Constant, Documentation, Field, GenericArgument,
+    GenericParams, Item, ItemContainer, Path, Repr, ReprAlign, ReprStyle, ToCondition, Type,
+    Typedef,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::mangle;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::rename::{IdentifierType, RenameRule};
+use crate::bindgen::reserved;
+use crate::bindgen::utilities::IterHelpers;
+use crate::bindgen::writer::{ListType, Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct Struct {
+    pub path: Path,
+    pub export_name: String,
+    pub generic_params: GenericParams,
+    pub fields: Vec<Field>,
+    /// Whether there's a tag field on the body of this struct. When this is
+    /// true, is_enum_variant_body is also guaranteed to be true.
+    pub has_tag_field: bool,
+    /// Whether this is an enum variant body.
+    pub is_enum_variant_body: bool,
+    pub alignment: Option<ReprAlign>,
+    pub is_transparent: bool,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+    pub associated_constants: Vec<Constant>,
+}
+
+impl Struct {
+    /// Whether this struct can derive operator== / operator!=.
+    pub fn can_derive_eq(&self) -> bool {
+        !self.fields.is_empty() && self.fields.iter().all(|x| x.ty.can_cmp_eq())
+    }
+
+    pub fn add_associated_constant(&mut self, c: Constant) {
+        self.associated_constants.push(c);
+    }
+
+    pub fn load(
+        layout_config: &LayoutConfig,
+        item: &syn::ItemStruct,
+        mod_cfg: Option<&Cfg>,
+    ) -> Result<Self, String> {
+        let repr = Repr::load(&item.attrs)?;
+        let is_transparent = match repr.style {
+            ReprStyle::C => false,
+            ReprStyle::Transparent => true,
+            _ => {
+                return Err("Struct is not marked #[repr(C)] or #[repr(transparent)].".to_owned());
+            }
+        };
+
+        let path = Path::new(item.ident.unraw().to_string());
+
+        // Ensure we can safely represent the struct given the configuration.
+        if let Some(align) = repr.align {
+            layout_config.ensure_safe_to_represent(&align)?;
+        }
+
+        let fields = match item.fields {
+            syn::Fields::Unit => Vec::new(),
+            syn::Fields::Named(ref fields) => fields
+                .named
+                .iter()
+                .try_skip_map(|field| Field::load(field, &path))?,
+            syn::Fields::Unnamed(ref fields) => {
+                let mut out = Vec::new();
+                let mut current = 0;
+                for field in fields.unnamed.iter() {
+                    if let Some(mut ty) = Type::load(&field.ty)? {
+                        ty.replace_self_with(&path);
+                        out.push(Field {
+                            name: format!("{}", current),
+                            ty,
+                            cfg: Cfg::load(&field.attrs),
+                            annotations: AnnotationSet::load(&field.attrs)?,
+                            documentation: Documentation::load(&field.attrs),
+                        });
+                        current += 1;
+                    }
+                }
+                out
+            }
+        };
+
+        let has_tag_field = false;
+        let is_enum_variant_body = false;
+
+        Ok(Struct::new(
+            path,
+            GenericParams::load(&item.generics)?,
+            fields,
+            has_tag_field,
+            is_enum_variant_body,
+            repr.align,
+            is_transparent,
+            Cfg::append(mod_cfg, Cfg::load(&item.attrs)),
+            AnnotationSet::load(&item.attrs)?,
+            Documentation::load(&item.attrs),
+        ))
+    }
+
+    #[allow(clippy::too_many_arguments)]
+    pub fn new(
+        path: Path,
+        generic_params: GenericParams,
+        fields: Vec<Field>,
+        has_tag_field: bool,
+        is_enum_variant_body: bool,
+        alignment: Option<ReprAlign>,
+        is_transparent: bool,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+    ) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            generic_params,
+            fields,
+            has_tag_field,
+            is_enum_variant_body,
+            alignment,
+            is_transparent,
+            cfg,
+            annotations,
+            documentation,
+            associated_constants: vec![],
+        }
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        for field in &mut self.fields {
+            field.ty.simplify_standard_types(config);
+        }
+    }
+
+    pub fn is_generic(&self) -> bool {
+        self.generic_params.len() > 0
+    }
+
+    pub fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        // Generic structs can instantiate monomorphs only once they've been
+        // instantiated. See `instantiate_monomorph` for more details.
+        if self.is_generic() {
+            return;
+        }
+
+        for field in &self.fields {
+            field.ty.add_monomorphs(library, out);
+        }
+    }
+
+    pub fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        for field in &mut self.fields {
+            field.ty.mangle_paths(monomorphs);
+        }
+    }
+
+    pub fn specialize(
+        &self,
+        generic_values: &[GenericArgument],
+        mappings: &[(&Path, &GenericArgument)],
+        config: &Config,
+    ) -> Self {
+        let mangled_path = mangle::mangle_path(&self.path, generic_values, &config.export.mangle);
+        Struct::new(
+            mangled_path,
+            GenericParams::default(),
+            self.fields
+                .iter()
+                .map(|field| Field {
+                    name: field.name.clone(),
+                    ty: field.ty.specialize(mappings),
+                    cfg: field.cfg.clone(),
+                    annotations: field.annotations.clone(),
+                    documentation: field.documentation.clone(),
+                })
+                .collect(),
+            self.has_tag_field,
+            self.is_enum_variant_body,
+            self.alignment,
+            self.is_transparent,
+            self.cfg.clone(),
+            self.annotations.clone(),
+            self.documentation.clone(),
+        )
+    }
+
+    fn emit_bitflags_binop<F: Write>(
+        &self,
+        constexpr_prefix: &str,
+        operator: char,
+        other: &str,
+        out: &mut SourceWriter<F>,
+    ) {
+        out.new_line();
+        write!(
+            out,
+            "{}{} operator{}(const {}& {}) const",
+            constexpr_prefix,
+            self.export_name(),
+            operator,
+            self.export_name(),
+            other
+        );
+        out.open_brace();
+        write!(
+            out,
+            "return {} {{ static_cast<decltype(bits)>(this->bits {} {}.bits) }};",
+            self.export_name(),
+            operator,
+            other
+        );
+        out.close_brace(false);
+
+        out.new_line();
+        write!(
+            out,
+            "{}& operator{}=(const {}& {})",
+            self.export_name(),
+            operator,
+            self.export_name(),
+            other
+        );
+        out.open_brace();
+        write!(out, "*this = (*this {} {});", operator, other);
+        out.new_line();
+        write!(out, "return *this;");
+        out.close_brace(false);
+    }
+}
+
+impl Item for Struct {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::Struct(self.clone())
+    }
+
+    fn collect_declaration_types(&self, resolver: &mut DeclarationTypeResolver) {
+        if self.is_transparent {
+            resolver.add_none(&self.path);
+        } else {
+            resolver.add_struct(&self.path);
+        }
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        for field in &mut self.fields {
+            field.ty.resolve_declaration_types(resolver);
+        }
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        // Rename the name of the struct
+        if !(self.has_tag_field && config.language == Language::Cxx) {
+            config.export.rename(&mut self.export_name);
+        }
+
+        // Rename the types used in fields
+        {
+            let fields = self.fields.iter_mut().skip(self.has_tag_field as usize);
+            for field in fields {
+                field.ty.rename_for_config(config, &self.generic_params);
+            }
+        }
+
+        // Apply renaming rules to fields in the following order
+        //   1. `cbindgen::field-names` annotation
+        //   2. `cbindgen::rename-all` annotation
+        //   3. config struct rename rule
+        // If the struct is a tuple struct and we have not renamed the
+        // fields, then prefix each of them with an underscore.
+        // If any field is a reserved keyword, then postfix it with an
+        // underscore.
+
+        // Scope for mutable borrow of fields
+        {
+            let names = self.fields.iter_mut().map(|field| &mut field.name);
+
+            let field_rules = self
+                .annotations
+                .parse_atom::<RenameRule>("rename-all")
+                .unwrap_or(config.structure.rename_fields);
+
+            if let Some(o) = self.annotations.list("field-names") {
+                for (dest, src) in names.zip(o) {
+                    *dest = src;
+                }
+            } else if let Some(r) = field_rules.not_none() {
+                for name in names {
+                    *name = r.apply(name, IdentifierType::StructMember).into_owned();
+                }
+            } else {
+                // If we don't have any rules for a tuple struct, prefix them with
+                // an underscore so it still compiles.
+                for name in names {
+                    if name.starts_with(|c: char| c.is_ascii_digit()) {
+                        name.insert(0, '_');
+                    }
+                }
+            }
+        }
+
+        for field in &mut self.fields {
+            reserved::escape(&mut field.name);
+        }
+
+        for c in self.associated_constants.iter_mut() {
+            c.rename_for_config(config);
+        }
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        let mut fields = self.fields.iter();
+
+        // If there is a tag field, skip it
+        if self.has_tag_field {
+            fields.next();
+        }
+
+        for field in fields {
+            field
+                .ty
+                .add_dependencies_ignoring_generics(&self.generic_params, library, out);
+        }
+
+        for c in &self.associated_constants {
+            c.add_dependencies(library, out);
+        }
+    }
+
+    fn instantiate_monomorph(
+        &self,
+        generic_values: &[GenericArgument],
+        library: &Library,
+        out: &mut Monomorphs,
+    ) {
+        let mappings = self.generic_params.call(self.path.name(), generic_values);
+        let monomorph = self.specialize(generic_values, &mappings, library.get_config());
+        out.insert_struct(library, self, monomorph, generic_values.to_owned());
+    }
+}
+
+impl Source for Struct {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        if self.is_transparent {
+            let typedef = Typedef {
+                path: self.path.clone(),
+                export_name: self.export_name.to_owned(),
+                generic_params: self.generic_params.clone(),
+                aliased: self.fields[0].ty.clone(),
+                cfg: self.cfg.clone(),
+                annotations: self.annotations.clone(),
+                documentation: self.documentation.clone(),
+            };
+            typedef.write(config, out);
+            for constant in &self.associated_constants {
+                out.new_line();
+                constant.write(config, out, Some(self));
+            }
+            return;
+        }
+
+        let condition = self.cfg.to_condition(config);
+        condition.write_before(config, out);
+
+        self.documentation.write(config, out);
+
+        if !self.is_enum_variant_body {
+            self.generic_params.write(config, out);
+        }
+
+        // The following results in
+        // C++ or C with Tag as style:
+        //   struct Name {
+        // C with Type only style:
+        //   typedef struct {
+        // C with Both as style:
+        //   typedef struct Name {
+        match config.language {
+            Language::C if config.style.generate_typedef() => out.write("typedef "),
+            Language::C | Language::Cxx => {}
+            Language::Cython => out.write(config.style.cython_def()),
+        }
+
+        // Cython extern declarations don't manage layouts, layouts are defined entierly by the
+        // corresponding C code. So this `packed` is only for documentation, and missing
+        // `aligned(n)` is also not a problem.
+        if config.language == Language::Cython {
+            if let Some(align) = self.alignment {
+                match align {
+                    ReprAlign::Packed => out.write("packed "),
+                    ReprAlign::Align(_) => {} // Not supported
+                }
+            }
+        }
+
+        out.write("struct");
+
+        if config.language != Language::Cython {
+            if let Some(align) = self.alignment {
+                match align {
+                    ReprAlign::Packed => {
+                        if let Some(ref anno) = config.layout.packed {
+                            write!(out, " {}", anno);
+                        }
+                    }
+                    ReprAlign::Align(n) => {
+                        if let Some(ref anno) = config.layout.aligned_n {
+                            write!(out, " {}({})", anno, n);
+                        }
+                    }
+                }
+            }
+        }
+
+        if self.annotations.must_use(config) {
+            if let Some(ref anno) = config.structure.must_use {
+                write!(out, " {}", anno);
+            }
+        }
+
+        if config.language != Language::C || config.style.generate_tag() {
+            write!(out, " {}", self.export_name());
+        }
+
+        out.open_brace();
+
+        // Emit the pre_body section, if relevant
+        if let Some(body) = config.export.pre_body(&self.path) {
+            out.write_raw_block(body);
+            out.new_line();
+        }
+
+        out.write_vertical_source_list(&self.fields, ListType::Cap(";"));
+        if config.language == Language::Cython && self.fields.is_empty() {
+            out.write("pass");
+        }
+
+        if config.language == Language::Cxx {
+            let mut wrote_start_newline = false;
+
+            if config.structure.derive_constructor(&self.annotations) && !self.fields.is_empty() {
+                if !wrote_start_newline {
+                    wrote_start_newline = true;
+                    out.new_line();
+                }
+
+                out.new_line();
+
+                let arg_renamer = |name: &str| {
+                    config
+                        .function
+                        .rename_args
+                        .apply(name, IdentifierType::FunctionArg)
+                        .into_owned()
+                };
+                write!(out, "{}(", self.export_name());
+                let vec: Vec<_> = self
+                    .fields
+                    .iter()
+                    .map(|field| {
+                        Field::from_name_and_type(
+                            // const-ref args to constructor
+                            format!("const& {}", arg_renamer(&field.name)),
+                            field.ty.clone(),
+                        )
+                    })
+                    .collect();
+                out.write_vertical_source_list(&vec[..], ListType::Join(","));
+                write!(out, ")");
+                out.new_line();
+                write!(out, "  : ");
+                let vec: Vec<_> = self
+                    .fields
+                    .iter()
+                    .map(|field| format!("{}({})", field.name, arg_renamer(&field.name)))
+                    .collect();
+                out.write_vertical_source_list(&vec[..], ListType::Join(","));
+                out.new_line();
+                write!(out, "{{}}");
+                out.new_line();
+            }
+
+            let other = config
+                .function
+                .rename_args
+                .apply("other", IdentifierType::FunctionArg);
+
+            if self
+                .annotations
+                .bool("internal-derive-bitflags")
+                .unwrap_or(false)
+            {
+                if !wrote_start_newline {
+                    wrote_start_newline = true;
+                    out.new_line();
+                }
+                let constexpr_prefix = if config.constant.allow_constexpr {
+                    "constexpr "
+                } else {
+                    ""
+                };
+
+                out.new_line();
+                write!(out, "{}explicit operator bool() const", constexpr_prefix);
+                out.open_brace();
+                write!(out, "return !!bits;");
+                out.close_brace(false);
+
+                out.new_line();
+                write!(
+                    out,
+                    "{}{} operator~() const",
+                    constexpr_prefix,
+                    self.export_name()
+                );
+                out.open_brace();
+                write!(
+                    out,
+                    "return {} {{ static_cast<decltype(bits)>(~bits) }};",
+                    self.export_name()
+                );
+                out.close_brace(false);
+                self.emit_bitflags_binop(constexpr_prefix, '|', &other, out);
+                self.emit_bitflags_binop(constexpr_prefix, '&', &other, out);
+                self.emit_bitflags_binop(constexpr_prefix, '^', &other, out);
+            }
+
+            // Generate a serializer function that allows dumping this struct
+            // to an std::ostream. It's defined as a friend function inside the
+            // struct definition, and doesn't need the `inline` keyword even
+            // though it's implemented right in the generated header file.
+            if config.structure.derive_ostream(&self.annotations) {
+                if !wrote_start_newline {
+                    wrote_start_newline = true;
+                    out.new_line();
+                }
+
+                out.new_line();
+                let stream = config
+                    .function
+                    .rename_args
+                    .apply("stream", IdentifierType::FunctionArg);
+                let instance = config
+                    .function
+                    .rename_args
+                    .apply("instance", IdentifierType::FunctionArg);
+                write!(
+                    out,
+                    "friend std::ostream& operator<<(std::ostream& {}, const {}& {})",
+                    stream,
+                    self.export_name(),
+                    instance,
+                );
+                out.open_brace();
+                write!(out, "return {} << \"{{ \"", stream);
+                let vec: Vec<_> = self
+                    .fields
+                    .iter()
+                    .map(|x| format!(" << \"{}=\" << {}.{}", x.name, instance, x.name))
+                    .collect();
+                out.write_vertical_source_list(&vec[..], ListType::Join(" << \", \""));
+                out.write(" << \" }\";");
+                out.close_brace(false);
+            }
+
+            let skip_fields = self.has_tag_field as usize;
+
+            macro_rules! emit_op {
+                ($op_name:expr, $op:expr, $conjuc:expr) => {{
+                    if !wrote_start_newline {
+                        #[allow(unused_assignments)]
+                        {
+                            wrote_start_newline = true;
+                        }
+                        out.new_line();
+                    }
+
+                    out.new_line();
+
+                    if let Some(Some(attrs)) =
+                        self.annotations.atom(concat!($op_name, "-attributes"))
+                    {
+                        write!(out, "{} ", attrs);
+                    }
+
+                    write!(
+                        out,
+                        "bool operator{}(const {}& {}) const",
+                        $op,
+                        self.export_name(),
+                        other
+                    );
+                    out.open_brace();
+                    out.write("return ");
+                    let vec: Vec<_> = self
+                        .fields
+                        .iter()
+                        .skip(skip_fields)
+                        .map(|field| format!("{} {} {}.{}", field.name, $op, other, field.name))
+                        .collect();
+                    out.write_vertical_source_list(
+                        &vec[..],
+                        ListType::Join(&format!(" {}", $conjuc)),
+                    );
+                    out.write(";");
+                    out.close_brace(false);
+                }};
+            }
+
+            if config.structure.derive_eq(&self.annotations) && self.can_derive_eq() {
+                emit_op!("eq", "==", "&&");
+            }
+            if config.structure.derive_neq(&self.annotations) && self.can_derive_eq() {
+                emit_op!("neq", "!=", "||");
+            }
+            if config.structure.derive_lt(&self.annotations)
+                && self.fields.len() == 1
+                && self.fields[0].ty.can_cmp_order()
+            {
+                emit_op!("lt", "<", "&&");
+            }
+            if config.structure.derive_lte(&self.annotations)
+                && self.fields.len() == 1
+                && self.fields[0].ty.can_cmp_order()
+            {
+                emit_op!("lte", "<=", "&&");
+            }
+            if config.structure.derive_gt(&self.annotations)
+                && self.fields.len() == 1
+                && self.fields[0].ty.can_cmp_order()
+            {
+                emit_op!("gt", ">", "&&");
+            }
+            if config.structure.derive_gte(&self.annotations)
+                && self.fields.len() == 1
+                && self.fields[0].ty.can_cmp_order()
+            {
+                emit_op!("gte", ">=", "&&");
+            }
+        }
+
+        // Emit the post_body section, if relevant
+        if let Some(body) = config.export.post_body(&self.path) {
+            out.new_line();
+            out.write_raw_block(body);
+        }
+
+        if config.language == Language::Cxx
+            && config.structure.associated_constants_in_body
+            && config.constant.allow_static_const
+        {
+            for constant in &self.associated_constants {
+                out.new_line();
+                constant.write_declaration(config, out, self);
+            }
+        }
+
+        if config.language == Language::C && config.style.generate_typedef() {
+            out.close_brace(false);
+            write!(out, " {};", self.export_name());
+        } else {
+            out.close_brace(true);
+        }
+
+        for constant in &self.associated_constants {
+            out.new_line();
+            constant.write(config, out, Some(self));
+        }
+
+        condition.write_after(config, out);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/ty.rs b/cbindgen-0.24.5/src/bindgen/ir/ty.rs
new file mode 100644
index 0000000..d51cd63
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/ty.rs
@@ -0,0 +1,1014 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::borrow::Cow;
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::cdecl;
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{GenericArgument, GenericParams, GenericPath, Path};
+use crate::bindgen::library::Library;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::utilities::IterHelpers;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub enum PrimitiveType {
+    Void,
+    Bool,
+    Char,
+    SChar,
+    UChar,
+    Char32,
+    Float,
+    Double,
+    VaList,
+    PtrDiffT,
+    Integer {
+        zeroable: bool,
+        signed: bool,
+        kind: IntKind,
+    },
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub enum IntKind {
+    Short,
+    Int,
+    Long,
+    LongLong,
+    SizeT,
+    Size,
+    B8,
+    B16,
+    B32,
+    B64,
+}
+
+impl PrimitiveType {
+    pub fn maybe(path: &str) -> Option<PrimitiveType> {
+        Some(match path {
+            "c_void" => PrimitiveType::Void,
+            "c_char" => PrimitiveType::Char,
+            "c_schar" => PrimitiveType::SChar,
+            "c_uchar" => PrimitiveType::UChar,
+            "c_float" => PrimitiveType::Float,
+            "c_double" => PrimitiveType::Double,
+            "ptrdiff_t" => PrimitiveType::PtrDiffT,
+            "VaList" => PrimitiveType::VaList,
+            "bool" => PrimitiveType::Bool,
+            "char" => PrimitiveType::Char32,
+
+            "f32" => PrimitiveType::Float,
+            "f64" => PrimitiveType::Double,
+
+            _ => {
+                let (kind, signed) = match path {
+                    "c_short" => (IntKind::Short, true),
+                    "c_int" => (IntKind::Int, true),
+                    "c_long" => (IntKind::Long, true),
+                    "c_longlong" => (IntKind::LongLong, true),
+                    "ssize_t" => (IntKind::SizeT, true),
+                    "c_ushort" => (IntKind::Short, false),
+                    "c_uint" => (IntKind::Int, false),
+                    "c_ulong" => (IntKind::Long, false),
+                    "c_ulonglong" => (IntKind::LongLong, false),
+                    "size_t" => (IntKind::SizeT, false),
+                    "RawFd" => (IntKind::Int, true),
+
+                    "isize" | "intptr_t" => (IntKind::Size, true),
+                    "usize" | "uintptr_t" => (IntKind::Size, false),
+
+                    "u8" | "uint8_t" => (IntKind::B8, false),
+                    "u16" | "uint16_t" => (IntKind::B16, false),
+                    "u32" | "uint32_t" => (IntKind::B32, false),
+                    "u64" | "uint64_t" => (IntKind::B64, false),
+                    "i8" | "int8_t" => (IntKind::B8, true),
+                    "i16" | "int16_t" => (IntKind::B16, true),
+                    "i32" | "int32_t" => (IntKind::B32, true),
+                    "i64" | "int64_t" => (IntKind::B64, true),
+                    _ => return None,
+                };
+                PrimitiveType::Integer {
+                    zeroable: true,
+                    signed,
+                    kind,
+                }
+            }
+        })
+    }
+
+    pub fn to_repr_rust(&self) -> &'static str {
+        match *self {
+            PrimitiveType::Bool => "bool",
+            PrimitiveType::Void => "c_void",
+            PrimitiveType::Char => "c_char",
+            PrimitiveType::SChar => "c_schar",
+            PrimitiveType::UChar => "c_uchar",
+            PrimitiveType::Char32 => "char",
+            PrimitiveType::Integer {
+                kind,
+                signed,
+                zeroable: _,
+            } => match kind {
+                IntKind::Short => {
+                    if signed {
+                        "c_short"
+                    } else {
+                        "c_ushort"
+                    }
+                }
+                IntKind::Int => {
+                    if signed {
+                        "c_int"
+                    } else {
+                        "c_uint"
+                    }
+                }
+                IntKind::Long => {
+                    if signed {
+                        "c_long"
+                    } else {
+                        "c_ulong"
+                    }
+                }
+                IntKind::LongLong => {
+                    if signed {
+                        "c_longlong"
+                    } else {
+                        "c_ulonglong"
+                    }
+                }
+                IntKind::SizeT => {
+                    if signed {
+                        "ssize_t"
+                    } else {
+                        "size_t"
+                    }
+                }
+                IntKind::Size => {
+                    if signed {
+                        "isize"
+                    } else {
+                        "usize"
+                    }
+                }
+                IntKind::B8 => {
+                    if signed {
+                        "i8"
+                    } else {
+                        "u8"
+                    }
+                }
+                IntKind::B16 => {
+                    if signed {
+                        "i16"
+                    } else {
+                        "u16"
+                    }
+                }
+                IntKind::B32 => {
+                    if signed {
+                        "i32"
+                    } else {
+                        "u32"
+                    }
+                }
+                IntKind::B64 => {
+                    if signed {
+                        "i64"
+                    } else {
+                        "u64"
+                    }
+                }
+            },
+            PrimitiveType::Float => "f32",
+            PrimitiveType::Double => "f64",
+            PrimitiveType::PtrDiffT => "ptrdiff_t",
+            PrimitiveType::VaList => "va_list",
+        }
+    }
+
+    pub fn to_repr_c(&self, config: &Config) -> &'static str {
+        match *self {
+            PrimitiveType::Void => "void",
+            PrimitiveType::Bool => "bool",
+            PrimitiveType::Char => "char",
+            PrimitiveType::SChar => "signed char",
+            PrimitiveType::UChar => "unsigned char",
+            // NOTE: It'd be nice to use a char32_t, but:
+            //
+            //  * uchar.h is not present on mac (see #423).
+            //
+            //  * char32_t isn't required to be compatible with Rust's char, as
+            //    the C++ spec only requires it to be the same size as
+            //    uint_least32_t, which is _not_ guaranteed to be 4-bytes.
+            //
+            PrimitiveType::Char32 => "uint32_t",
+            PrimitiveType::Integer {
+                kind,
+                signed,
+                zeroable: _,
+            } => match kind {
+                IntKind::Short => {
+                    if signed {
+                        "short"
+                    } else {
+                        "unsigned short"
+                    }
+                }
+                IntKind::Int => {
+                    if signed {
+                        "int"
+                    } else {
+                        "unsigned int"
+                    }
+                }
+                IntKind::Long => {
+                    if signed {
+                        "long"
+                    } else {
+                        "unsigned long"
+                    }
+                }
+                IntKind::LongLong => {
+                    if signed {
+                        "long long"
+                    } else {
+                        "unsigned long long"
+                    }
+                }
+                IntKind::SizeT => {
+                    if signed {
+                        "ssize_t"
+                    } else {
+                        "size_t"
+                    }
+                }
+                IntKind::Size => {
+                    if config.usize_is_size_t {
+                        if signed {
+                            "ptrdiff_t"
+                        } else {
+                            "size_t"
+                        }
+                    } else if signed {
+                        "intptr_t"
+                    } else {
+                        "uintptr_t"
+                    }
+                }
+                IntKind::B8 => {
+                    if signed {
+                        "int8_t"
+                    } else {
+                        "uint8_t"
+                    }
+                }
+                IntKind::B16 => {
+                    if signed {
+                        "int16_t"
+                    } else {
+                        "uint16_t"
+                    }
+                }
+                IntKind::B32 => {
+                    if signed {
+                        "int32_t"
+                    } else {
+                        "uint32_t"
+                    }
+                }
+                IntKind::B64 => {
+                    if signed {
+                        "int64_t"
+                    } else {
+                        "uint64_t"
+                    }
+                }
+            },
+            PrimitiveType::Float => "float",
+            PrimitiveType::Double => "double",
+            PrimitiveType::PtrDiffT => "ptrdiff_t",
+            PrimitiveType::VaList => "va_list",
+        }
+    }
+
+    fn can_cmp_order(&self) -> bool {
+        !matches!(*self, PrimitiveType::Bool)
+    }
+
+    fn can_cmp_eq(&self) -> bool {
+        true
+    }
+}
+
+/// Constant expressions.
+///
+/// Used for the `U` part of `[T; U]` and const generics. We support a very
+/// limited vocabulary here: only identifiers and literals.
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub enum ConstExpr {
+    Name(String),
+    Value(String),
+}
+
+impl ConstExpr {
+    pub fn as_str(&self) -> &str {
+        match *self {
+            ConstExpr::Name(ref string) | ConstExpr::Value(ref string) => string,
+        }
+    }
+
+    pub fn rename_for_config(&mut self, config: &Config) {
+        if let ConstExpr::Name(ref mut name) = self {
+            config.export.rename(name);
+        }
+    }
+
+    pub fn load(expr: &syn::Expr) -> Result<Self, String> {
+        match *expr {
+            syn::Expr::Lit(syn::ExprLit { ref lit, .. }) => {
+                let val = match *lit {
+                    syn::Lit::Bool(syn::LitBool { value, .. }) => value.to_string(),
+                    syn::Lit::Int(ref len) => len.base10_digits().to_string(),
+                    syn::Lit::Byte(ref byte) => u8::to_string(&byte.value()),
+                    syn::Lit::Char(ref ch) => u32::to_string(&ch.value().into()),
+                    _ => return Err(format!("can't handle const expression {:?}", lit)),
+                };
+                Ok(ConstExpr::Value(val))
+            }
+            syn::Expr::Path(ref path) => {
+                let generic_path = GenericPath::load(&path.path)?;
+                Ok(ConstExpr::Name(generic_path.export_name().to_owned()))
+            }
+            _ => Err(format!("can't handle const expression {:?}", expr)),
+        }
+    }
+
+    pub fn specialize(&self, mappings: &[(&Path, &GenericArgument)]) -> ConstExpr {
+        match *self {
+            ConstExpr::Name(ref name) => {
+                let path = Path::new(name);
+                for &(param, value) in mappings {
+                    if path == *param {
+                        match *value {
+                            GenericArgument::Type(Type::Path(ref path))
+                                if path.is_single_identifier() =>
+                            {
+                                // This happens when the generic argument is a path.
+                                return ConstExpr::Name(path.name().to_string());
+                            }
+                            GenericArgument::Const(ref expr) => {
+                                return expr.clone();
+                            }
+                            _ => {
+                                // unsupported argument type - really should be an error
+                            }
+                        }
+                    }
+                }
+            }
+            ConstExpr::Value(_) => {}
+        }
+        self.clone()
+    }
+}
+
+impl Source for ConstExpr {
+    fn write<F: Write>(&self, _config: &Config, out: &mut SourceWriter<F>) {
+        write!(out, "{}", self.as_str());
+    }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub enum Type {
+    Ptr {
+        ty: Box<Type>,
+        is_const: bool,
+        is_nullable: bool,
+        // FIXME: This is a bit of a hack, this is only to get us to codegen
+        // `T&` / `const T&`, but we should probably pass that down as an option
+        // to code generation or something.
+        is_ref: bool,
+    },
+    Path(GenericPath),
+    Primitive(PrimitiveType),
+    Array(Box<Type>, ConstExpr),
+    FuncPtr {
+        ret: Box<Type>,
+        args: Vec<(Option<String>, Type)>,
+        is_nullable: bool,
+        never_return: bool,
+    },
+}
+
+impl Type {
+    pub fn const_ref_to(ty: &Self) -> Self {
+        Type::Ptr {
+            ty: Box::new(ty.clone()),
+            is_const: true,
+            is_nullable: false,
+            is_ref: true,
+        }
+    }
+
+    pub fn load_from_output(output: &syn::ReturnType) -> Result<(Type, bool), String> {
+        let mut never_return = false;
+        let ty = match output {
+            syn::ReturnType::Default => Type::Primitive(PrimitiveType::Void),
+            syn::ReturnType::Type(_, ref ty) => {
+                if let syn::Type::Never(_) = ty.as_ref() {
+                    never_return = true;
+                    Type::Primitive(PrimitiveType::Void)
+                } else {
+                    Type::load(ty)?.unwrap_or(Type::Primitive(PrimitiveType::Void))
+                }
+            }
+        };
+        Ok((ty, never_return))
+    }
+
+    pub fn load(ty: &syn::Type) -> Result<Option<Type>, String> {
+        let converted = match *ty {
+            syn::Type::Reference(ref reference) => {
+                let converted = Type::load(&reference.elem)?;
+
+                let converted = match converted {
+                    Some(converted) => converted,
+                    None => Type::Primitive(PrimitiveType::Void),
+                };
+
+                // TODO(emilio): we could make these use is_ref: true.
+                let is_const = reference.mutability.is_none();
+                Type::Ptr {
+                    ty: Box::new(converted),
+                    is_const,
+                    is_nullable: false,
+                    is_ref: false,
+                }
+            }
+            syn::Type::Ptr(ref pointer) => {
+                let converted = Type::load(&pointer.elem)?;
+
+                let converted = match converted {
+                    Some(converted) => converted,
+                    None => Type::Primitive(PrimitiveType::Void),
+                };
+
+                let is_const = pointer.mutability.is_none();
+                Type::Ptr {
+                    ty: Box::new(converted),
+                    is_const,
+                    is_nullable: true,
+                    is_ref: false,
+                }
+            }
+            syn::Type::Path(ref path) => {
+                let generic_path = GenericPath::load(&path.path)?;
+
+                if generic_path.name() == "PhantomData" || generic_path.name() == "PhantomPinned" {
+                    return Ok(None);
+                }
+
+                if let Some(prim) = PrimitiveType::maybe(generic_path.name()) {
+                    if !generic_path.generics().is_empty() {
+                        return Err("Primitive has generics.".to_owned());
+                    }
+                    Type::Primitive(prim)
+                } else {
+                    Type::Path(generic_path)
+                }
+            }
+            syn::Type::Array(syn::TypeArray {
+                ref elem, ref len, ..
+            }) => {
+                let converted = Type::load(elem)?;
+
+                let converted = match converted {
+                    Some(converted) => converted,
+                    None => return Err("Cannot have an array of zero sized types.".to_owned()),
+                };
+
+                let len = ConstExpr::load(len)?;
+                Type::Array(Box::new(converted), len)
+            }
+            syn::Type::BareFn(ref function) => {
+                let mut wildcard_counter = 0;
+                let args = function.inputs.iter().try_skip_map(|x| {
+                    Type::load(&x.ty).map(|opt_ty| {
+                        opt_ty.map(|ty| {
+                            (
+                                x.name.as_ref().map(|(ref ident, _)| {
+                                    if ident == "_" {
+                                        wildcard_counter += 1;
+                                        if wildcard_counter == 1 {
+                                            "_".to_owned()
+                                        } else {
+                                            format!("_{}", wildcard_counter - 1)
+                                        }
+                                    } else {
+                                        ident.unraw().to_string()
+                                    }
+                                }),
+                                ty,
+                            )
+                        })
+                    })
+                })?;
+                let (ret, never_return) = Type::load_from_output(&function.output)?;
+                Type::FuncPtr {
+                    ret: Box::new(ret),
+                    args,
+                    is_nullable: false,
+                    never_return,
+                }
+            }
+            syn::Type::Tuple(ref tuple) => {
+                if tuple.elems.is_empty() {
+                    return Ok(None);
+                }
+                return Err("Tuples are not supported types.".to_owned());
+            }
+            _ => return Err(format!("Unsupported type: {:?}", ty)),
+        };
+
+        Ok(Some(converted))
+    }
+
+    pub fn is_ptr(&self) -> bool {
+        matches!(*self, Type::Ptr { .. } | Type::FuncPtr { .. })
+    }
+
+    pub fn is_primitive_or_ptr_primitive(&self) -> bool {
+        match *self {
+            Type::Primitive(..) => true,
+            Type::Ptr { ref ty, .. } => matches!(ty.as_ref(), Type::Primitive(..)),
+            _ => false,
+        }
+    }
+
+    pub fn make_zeroable(&self) -> Option<Self> {
+        let (kind, signed) = match *self {
+            Type::Primitive(PrimitiveType::Integer {
+                zeroable: false,
+                kind,
+                signed,
+            }) => (kind, signed),
+            _ => return None,
+        };
+
+        Some(Type::Primitive(PrimitiveType::Integer {
+            kind,
+            signed,
+            zeroable: true,
+        }))
+    }
+
+    pub fn make_nullable(&self) -> Option<Self> {
+        match *self {
+            Type::Ptr {
+                ref ty,
+                is_const,
+                is_ref,
+                is_nullable: false,
+            } => Some(Type::Ptr {
+                ty: ty.clone(),
+                is_const,
+                is_ref,
+                is_nullable: true,
+            }),
+            Type::FuncPtr {
+                ref ret,
+                ref args,
+                is_nullable: false,
+                never_return,
+            } => Some(Type::FuncPtr {
+                ret: ret.clone(),
+                args: args.clone(),
+                is_nullable: true,
+                never_return,
+            }),
+            _ => None,
+        }
+    }
+
+    fn nonzero_to_primitive(&self) -> Option<Self> {
+        let path = match *self {
+            Type::Path(ref p) => p,
+            _ => return None,
+        };
+
+        if !path.generics().is_empty() {
+            return None;
+        }
+
+        let name = path.name();
+        if !name.starts_with("NonZero") {
+            return None;
+        }
+
+        let (kind, signed) = match path.name() {
+            "NonZeroU8" => (IntKind::B8, false),
+            "NonZeroU16" => (IntKind::B16, false),
+            "NonZeroU32" => (IntKind::B32, false),
+            "NonZeroU64" => (IntKind::B64, false),
+            "NonZeroUSize" => (IntKind::Size, false),
+            "NonZeroI8" => (IntKind::B8, true),
+            "NonZeroI16" => (IntKind::B16, true),
+            "NonZeroI32" => (IntKind::B32, true),
+            "NonZeroI64" => (IntKind::B64, true),
+            "NonZeroISize" => (IntKind::Size, true),
+            _ => return None,
+        };
+
+        Some(Type::Primitive(PrimitiveType::Integer {
+            zeroable: false,
+            signed,
+            kind,
+        }))
+    }
+
+    fn simplified_type(&self, config: &Config) -> Option<Self> {
+        let path = match *self {
+            Type::Path(ref p) => p,
+            _ => return None,
+        };
+
+        if path.generics().is_empty() {
+            return self.nonzero_to_primitive();
+        }
+
+        if path.generics().len() != 1 {
+            return None;
+        }
+
+        let unsimplified_generic = match path.generics()[0] {
+            GenericArgument::Type(ref ty) => ty,
+            GenericArgument::Const(_) => return None,
+        };
+
+        let generic = match unsimplified_generic.simplified_type(config) {
+            Some(generic) => Cow::Owned(generic),
+            None => Cow::Borrowed(unsimplified_generic),
+        };
+        match path.name() {
+            "Option" => {
+                if let Some(nullable) = generic.make_nullable() {
+                    return Some(nullable);
+                }
+                if let Some(zeroable) = generic.make_zeroable() {
+                    return Some(zeroable);
+                }
+                None
+            }
+            "NonNull" => Some(Type::Ptr {
+                ty: Box::new(generic.into_owned()),
+                is_const: false,
+                is_nullable: false,
+                is_ref: false,
+            }),
+            "Box" if config.language != Language::Cxx => Some(Type::Ptr {
+                ty: Box::new(generic.into_owned()),
+                is_const: false,
+                is_nullable: false,
+                is_ref: false,
+            }),
+            "Cell" => Some(generic.into_owned()),
+            "ManuallyDrop" | "MaybeUninit" | "Pin" if config.language != Language::Cxx => {
+                Some(generic.into_owned())
+            }
+            _ => None,
+        }
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        self.visit_types(|ty| ty.simplify_standard_types(config));
+        if let Some(ty) = self.simplified_type(config) {
+            *self = ty;
+        }
+    }
+
+    pub fn replace_self_with(&mut self, self_ty: &Path) {
+        if let Type::Path(ref mut generic_path) = *self {
+            generic_path.replace_self_with(self_ty);
+        }
+        self.visit_types(|ty| ty.replace_self_with(self_ty))
+    }
+
+    fn visit_types(&mut self, mut visitor: impl FnMut(&mut Type)) {
+        match *self {
+            Type::Array(ref mut ty, ..) | Type::Ptr { ref mut ty, .. } => visitor(ty),
+            Type::Path(ref mut path) => {
+                for generic in path.generics_mut() {
+                    match *generic {
+                        GenericArgument::Type(ref mut ty) => visitor(ty),
+                        GenericArgument::Const(_) => {}
+                    }
+                }
+            }
+            Type::Primitive(..) => {}
+            Type::FuncPtr {
+                ref mut ret,
+                ref mut args,
+                ..
+            } => {
+                visitor(ret);
+                for arg in args {
+                    visitor(&mut arg.1)
+                }
+            }
+        }
+    }
+
+    pub fn get_root_path(&self) -> Option<Path> {
+        let mut current = self;
+        loop {
+            match *current {
+                Type::Ptr { ref ty, .. } => current = ty,
+                Type::Path(ref generic) => {
+                    return Some(generic.path().clone());
+                }
+                Type::Primitive(..) => {
+                    return None;
+                }
+                Type::Array(..) => {
+                    return None;
+                }
+                Type::FuncPtr { .. } => {
+                    return None;
+                }
+            };
+        }
+    }
+
+    pub fn specialize(&self, mappings: &[(&Path, &GenericArgument)]) -> Type {
+        match *self {
+            Type::Ptr {
+                ref ty,
+                is_const,
+                is_nullable,
+                is_ref,
+            } => Type::Ptr {
+                ty: Box::new(ty.specialize(mappings)),
+                is_const,
+                is_nullable,
+                is_ref,
+            },
+            Type::Path(ref generic_path) => {
+                for &(param, value) in mappings {
+                    if generic_path.path() == param {
+                        if let GenericArgument::Type(ref ty) = *value {
+                            return ty.clone();
+                        }
+                    }
+                }
+
+                let specialized = GenericPath::new(
+                    generic_path.path().clone(),
+                    generic_path
+                        .generics()
+                        .iter()
+                        .map(|x| x.specialize(mappings))
+                        .collect(),
+                );
+                Type::Path(specialized)
+            }
+            Type::Primitive(ref primitive) => Type::Primitive(primitive.clone()),
+            Type::Array(ref ty, ref constant) => Type::Array(
+                Box::new(ty.specialize(mappings)),
+                constant.specialize(mappings),
+            ),
+            Type::FuncPtr {
+                ref ret,
+                ref args,
+                is_nullable,
+                never_return,
+            } => Type::FuncPtr {
+                ret: Box::new(ret.specialize(mappings)),
+                args: args
+                    .iter()
+                    .cloned()
+                    .map(|(name, ty)| (name, ty.specialize(mappings)))
+                    .collect(),
+                is_nullable,
+                never_return,
+            },
+        }
+    }
+
+    pub fn add_dependencies_ignoring_generics(
+        &self,
+        generic_params: &GenericParams,
+        library: &Library,
+        out: &mut Dependencies,
+    ) {
+        match *self {
+            Type::Ptr { ref ty, .. } => {
+                ty.add_dependencies_ignoring_generics(generic_params, library, out);
+            }
+            Type::Path(ref generic) => {
+                for generic_value in generic.generics() {
+                    if let GenericArgument::Type(ref ty) = *generic_value {
+                        ty.add_dependencies_ignoring_generics(generic_params, library, out);
+                    }
+                }
+                let path = generic.path();
+                if !generic_params.iter().any(|param| param.name() == path) {
+                    if let Some(items) = library.get_items(path) {
+                        if !out.items.contains(path) {
+                            out.items.insert(path.clone());
+
+                            for item in &items {
+                                item.deref().add_dependencies(library, out);
+                            }
+                            for item in items {
+                                out.order.push(item);
+                            }
+                        }
+                    } else {
+                        warn!(
+                            "Can't find {}. This usually means that this type was incompatible or \
+                             not found.",
+                            path
+                        );
+                    }
+                }
+            }
+            Type::Primitive(_) => {}
+            Type::Array(ref ty, _) => {
+                ty.add_dependencies_ignoring_generics(generic_params, library, out);
+            }
+            Type::FuncPtr {
+                ref ret, ref args, ..
+            } => {
+                ret.add_dependencies_ignoring_generics(generic_params, library, out);
+                for (_, ref arg) in args {
+                    arg.add_dependencies_ignoring_generics(generic_params, library, out);
+                }
+            }
+        }
+    }
+
+    pub fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        self.add_dependencies_ignoring_generics(&GenericParams::default(), library, out)
+    }
+
+    pub fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        match *self {
+            Type::Ptr { ref ty, .. } => {
+                ty.add_monomorphs(library, out);
+            }
+            Type::Path(ref generic) => {
+                if generic.generics().is_empty() || out.contains(generic) {
+                    return;
+                }
+                let path = generic.path();
+                if let Some(items) = library.get_items(path) {
+                    for item in items {
+                        item.deref()
+                            .instantiate_monomorph(generic.generics(), library, out);
+                    }
+                }
+            }
+            Type::Primitive(_) => {}
+            Type::Array(ref ty, _) => {
+                ty.add_monomorphs(library, out);
+            }
+            Type::FuncPtr {
+                ref ret, ref args, ..
+            } => {
+                ret.add_monomorphs(library, out);
+                for (_, ref arg) in args {
+                    arg.add_monomorphs(library, out);
+                }
+            }
+        }
+    }
+
+    pub fn rename_for_config(&mut self, config: &Config, generic_params: &GenericParams) {
+        match *self {
+            Type::Ptr { ref mut ty, .. } => {
+                ty.rename_for_config(config, generic_params);
+            }
+            Type::Path(ref mut ty) => {
+                ty.rename_for_config(config, generic_params);
+            }
+            Type::Primitive(_) => {}
+            Type::Array(ref mut ty, ref mut len) => {
+                ty.rename_for_config(config, generic_params);
+                len.rename_for_config(config);
+            }
+            Type::FuncPtr {
+                ref mut ret,
+                ref mut args,
+                ..
+            } => {
+                ret.rename_for_config(config, generic_params);
+                for (_, arg) in args {
+                    arg.rename_for_config(config, generic_params);
+                }
+            }
+        }
+    }
+
+    pub fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        match *self {
+            Type::Ptr { ref mut ty, .. } => {
+                ty.resolve_declaration_types(resolver);
+            }
+            Type::Path(ref mut generic_path) => {
+                generic_path.resolve_declaration_types(resolver);
+            }
+            Type::Primitive(_) => {}
+            Type::Array(ref mut ty, _) => {
+                ty.resolve_declaration_types(resolver);
+            }
+            Type::FuncPtr {
+                ref mut ret,
+                ref mut args,
+                ..
+            } => {
+                ret.resolve_declaration_types(resolver);
+                for (_, ref mut arg) in args {
+                    arg.resolve_declaration_types(resolver);
+                }
+            }
+        }
+    }
+
+    pub fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        match *self {
+            Type::Ptr { ref mut ty, .. } => {
+                ty.mangle_paths(monomorphs);
+            }
+            Type::Path(ref mut generic_path) => {
+                if generic_path.generics().is_empty() {
+                    return;
+                }
+
+                if let Some(mangled_path) = monomorphs.mangle_path(generic_path) {
+                    *generic_path = GenericPath::new(mangled_path.clone(), vec![]);
+                } else {
+                    warn!(
+                        "Cannot find a mangling for generic path {:?}. This usually means that a \
+                         type referenced by this generic was incompatible or not found.",
+                        generic_path
+                    );
+                }
+            }
+            Type::Primitive(_) => {}
+            Type::Array(ref mut ty, _) => {
+                ty.mangle_paths(monomorphs);
+            }
+            Type::FuncPtr {
+                ref mut ret,
+                ref mut args,
+                ..
+            } => {
+                ret.mangle_paths(monomorphs);
+                for (_, ref mut arg) in args {
+                    arg.mangle_paths(monomorphs);
+                }
+            }
+        }
+    }
+
+    pub fn can_cmp_order(&self) -> bool {
+        match *self {
+            // FIXME: Shouldn't this look at ty.can_cmp_order() as well?
+            Type::Ptr { is_ref, .. } => !is_ref,
+            Type::Path(..) => true,
+            Type::Primitive(ref p) => p.can_cmp_order(),
+            Type::Array(..) => false,
+            Type::FuncPtr { .. } => false,
+        }
+    }
+
+    pub fn can_cmp_eq(&self) -> bool {
+        match *self {
+            Type::Ptr { ref ty, is_ref, .. } => !is_ref || ty.can_cmp_eq(),
+            Type::Path(..) => true,
+            Type::Primitive(ref p) => p.can_cmp_eq(),
+            Type::Array(..) => false,
+            Type::FuncPtr { .. } => true,
+        }
+    }
+}
+
+impl Source for String {
+    fn write<F: Write>(&self, _config: &Config, out: &mut SourceWriter<F>) {
+        write!(out, "{}", self);
+    }
+}
+
+impl Source for Type {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        cdecl::write_type(out, self, config);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/typedef.rs b/cbindgen-0.24.5/src/bindgen/ir/typedef.rs
new file mode 100644
index 0000000..626732e
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/typedef.rs
@@ -0,0 +1,208 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::HashMap;
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::config::{Config, Language};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, ConditionWrite, Documentation, Field, GenericArgument, GenericParams, Item,
+    ItemContainer, Path, ToCondition, Type,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::mangle;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::writer::{Source, SourceWriter};
+
+/// A type alias that is represented as a C typedef
+#[derive(Debug, Clone)]
+pub struct Typedef {
+    pub path: Path,
+    pub export_name: String,
+    pub generic_params: GenericParams,
+    pub aliased: Type,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+}
+
+impl Typedef {
+    pub fn load(item: &syn::ItemType, mod_cfg: Option<&Cfg>) -> Result<Typedef, String> {
+        if let Some(x) = Type::load(&item.ty)? {
+            let path = Path::new(item.ident.unraw().to_string());
+            Ok(Typedef::new(
+                path,
+                GenericParams::load(&item.generics)?,
+                x,
+                Cfg::append(mod_cfg, Cfg::load(&item.attrs)),
+                AnnotationSet::load(&item.attrs)?,
+                Documentation::load(&item.attrs),
+            ))
+        } else {
+            Err("Cannot have a typedef of a zero sized type.".to_owned())
+        }
+    }
+
+    pub fn new(
+        path: Path,
+        generic_params: GenericParams,
+        aliased: Type,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+    ) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            generic_params,
+            aliased,
+            cfg,
+            annotations,
+            documentation,
+        }
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        self.aliased.simplify_standard_types(config);
+    }
+
+    pub fn transfer_annotations(&mut self, out: &mut HashMap<Path, AnnotationSet>) {
+        if self.annotations.is_empty() {
+            return;
+        }
+
+        if let Some(alias_path) = self.aliased.get_root_path() {
+            if out.contains_key(&alias_path) {
+                warn!(
+                    "Multiple typedef's with annotations for {}. Ignoring annotations from {}.",
+                    alias_path, self.path
+                );
+                return;
+            }
+
+            out.insert(alias_path, self.annotations.clone());
+            self.annotations = AnnotationSet::new();
+        }
+    }
+
+    pub fn is_generic(&self) -> bool {
+        self.generic_params.len() > 0
+    }
+
+    pub fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        // Generic structs can instantiate monomorphs only once they've been
+        // instantiated. See `instantiate_monomorph` for more details.
+        if self.is_generic() {
+            return;
+        }
+
+        self.aliased.add_monomorphs(library, out);
+    }
+
+    pub fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        self.aliased.mangle_paths(monomorphs);
+    }
+}
+
+impl Item for Typedef {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::Typedef(self.clone())
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        config.export.rename(&mut self.export_name);
+        self.aliased.rename_for_config(config, &self.generic_params);
+    }
+
+    fn collect_declaration_types(&self, resolver: &mut DeclarationTypeResolver) {
+        resolver.add_none(&self.path);
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        self.aliased.resolve_declaration_types(resolver);
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        self.aliased
+            .add_dependencies_ignoring_generics(&self.generic_params, library, out);
+    }
+
+    fn instantiate_monomorph(
+        &self,
+        generic_values: &[GenericArgument],
+        library: &Library,
+        out: &mut Monomorphs,
+    ) {
+        let mappings = self.generic_params.call(self.path.name(), generic_values);
+
+        let mangled_path = mangle::mangle_path(
+            &self.path,
+            generic_values,
+            &library.get_config().export.mangle,
+        );
+
+        let monomorph = Typedef::new(
+            mangled_path,
+            GenericParams::default(),
+            self.aliased.specialize(&mappings),
+            self.cfg.clone(),
+            self.annotations.clone(),
+            self.documentation.clone(),
+        );
+
+        out.insert_typedef(library, self, monomorph, generic_values.to_owned());
+    }
+}
+
+impl Source for Typedef {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        let condition = self.cfg.to_condition(config);
+        condition.write_before(config, out);
+
+        self.documentation.write(config, out);
+
+        self.generic_params.write(config, out);
+
+        match config.language {
+            Language::Cxx => {
+                write!(out, "using {} = ", self.export_name());
+                self.aliased.write(config, out);
+            }
+            Language::C | Language::Cython => {
+                write!(out, "{} ", config.language.typedef());
+                Field::from_name_and_type(self.export_name().to_owned(), self.aliased.clone())
+                    .write(config, out);
+            }
+        }
+
+        out.write(";");
+
+        condition.write_after(config, out);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/ir/union.rs b/cbindgen-0.24.5/src/bindgen/ir/union.rs
new file mode 100644
index 0000000..07bd16c
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/ir/union.rs
@@ -0,0 +1,336 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io::Write;
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::config::{Config, Language, LayoutConfig};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, ConditionWrite, Documentation, Field, GenericArgument, GenericParams, Item,
+    ItemContainer, Path, Repr, ReprAlign, ReprStyle, ToCondition,
+};
+use crate::bindgen::library::Library;
+use crate::bindgen::mangle;
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::rename::{IdentifierType, RenameRule};
+use crate::bindgen::utilities::IterHelpers;
+use crate::bindgen::writer::{ListType, Source, SourceWriter};
+
+#[derive(Debug, Clone)]
+pub struct Union {
+    pub path: Path,
+    pub export_name: String,
+    pub generic_params: GenericParams,
+    pub fields: Vec<Field>,
+    pub tuple_union: bool,
+    pub alignment: Option<ReprAlign>,
+    pub cfg: Option<Cfg>,
+    pub annotations: AnnotationSet,
+    pub documentation: Documentation,
+}
+
+impl Union {
+    pub fn load(
+        layout_config: &LayoutConfig,
+        item: &syn::ItemUnion,
+        mod_cfg: Option<&Cfg>,
+    ) -> Result<Union, String> {
+        let repr = Repr::load(&item.attrs)?;
+        if repr.style != ReprStyle::C {
+            return Err("Union is not marked #[repr(C)].".to_owned());
+        }
+
+        // Ensure we can safely represent the union given the configuration.
+        if let Some(align) = repr.align {
+            layout_config.ensure_safe_to_represent(&align)?;
+        }
+
+        let path = Path::new(item.ident.unraw().to_string());
+
+        let (fields, tuple_union) = {
+            let out = item
+                .fields
+                .named
+                .iter()
+                .try_skip_map(|field| Field::load(field, &path))?;
+            (out, false)
+        };
+
+        Ok(Union::new(
+            path,
+            GenericParams::load(&item.generics)?,
+            fields,
+            repr.align,
+            tuple_union,
+            Cfg::append(mod_cfg, Cfg::load(&item.attrs)),
+            AnnotationSet::load(&item.attrs)?,
+            Documentation::load(&item.attrs),
+        ))
+    }
+
+    #[allow(clippy::too_many_arguments)]
+    pub fn new(
+        path: Path,
+        generic_params: GenericParams,
+        fields: Vec<Field>,
+        alignment: Option<ReprAlign>,
+        tuple_union: bool,
+        cfg: Option<Cfg>,
+        annotations: AnnotationSet,
+        documentation: Documentation,
+    ) -> Self {
+        let export_name = path.name().to_owned();
+        Self {
+            path,
+            export_name,
+            generic_params,
+            fields,
+            tuple_union,
+            alignment,
+            cfg,
+            annotations,
+            documentation,
+        }
+    }
+
+    pub fn simplify_standard_types(&mut self, config: &Config) {
+        for field in &mut self.fields {
+            field.ty.simplify_standard_types(config);
+        }
+    }
+
+    pub fn is_generic(&self) -> bool {
+        self.generic_params.len() > 0
+    }
+
+    pub fn add_monomorphs(&self, library: &Library, out: &mut Monomorphs) {
+        // Generic unions can instantiate monomorphs only once they've been
+        // instantiated. See `instantiate_monomorph` for more details.
+        if self.is_generic() {
+            return;
+        }
+
+        for field in &self.fields {
+            field.ty.add_monomorphs(library, out);
+        }
+    }
+
+    pub fn mangle_paths(&mut self, monomorphs: &Monomorphs) {
+        for field in &mut self.fields {
+            field.ty.mangle_paths(monomorphs);
+        }
+    }
+}
+
+impl Item for Union {
+    fn path(&self) -> &Path {
+        &self.path
+    }
+
+    fn export_name(&self) -> &str {
+        &self.export_name
+    }
+
+    fn cfg(&self) -> Option<&Cfg> {
+        self.cfg.as_ref()
+    }
+
+    fn annotations(&self) -> &AnnotationSet {
+        &self.annotations
+    }
+
+    fn annotations_mut(&mut self) -> &mut AnnotationSet {
+        &mut self.annotations
+    }
+
+    fn container(&self) -> ItemContainer {
+        ItemContainer::Union(self.clone())
+    }
+
+    fn collect_declaration_types(&self, resolver: &mut DeclarationTypeResolver) {
+        resolver.add_union(&self.path);
+    }
+
+    fn resolve_declaration_types(&mut self, resolver: &DeclarationTypeResolver) {
+        for field in &mut self.fields {
+            field.ty.resolve_declaration_types(resolver);
+        }
+    }
+
+    fn rename_for_config(&mut self, config: &Config) {
+        config.export.rename(&mut self.export_name);
+        for field in &mut self.fields {
+            field.ty.rename_for_config(config, &self.generic_params);
+        }
+
+        let rules = self
+            .annotations
+            .parse_atom::<RenameRule>("rename-all")
+            .unwrap_or(config.structure.rename_fields);
+
+        if let Some(o) = self.annotations.list("field-names") {
+            let mut overriden_fields = Vec::new();
+
+            for (i, field) in self.fields.iter().enumerate() {
+                if i >= o.len() {
+                    overriden_fields.push(field.clone());
+                } else {
+                    overriden_fields.push(Field {
+                        name: o[i].clone(),
+                        ty: field.ty.clone(),
+                        cfg: field.cfg.clone(),
+                        annotations: field.annotations.clone(),
+                        documentation: field.documentation.clone(),
+                    });
+                }
+            }
+
+            self.fields = overriden_fields;
+        } else if let Some(r) = rules.not_none() {
+            self.fields = self
+                .fields
+                .iter()
+                .map(|field| Field {
+                    name: r
+                        .apply(&field.name, IdentifierType::StructMember)
+                        .into_owned(),
+                    ty: field.ty.clone(),
+                    cfg: field.cfg.clone(),
+                    annotations: field.annotations.clone(),
+                    documentation: field.documentation.clone(),
+                })
+                .collect();
+        } else if self.tuple_union {
+            // If we don't have any rules for a tuple union, prefix them with
+            // an underscore so it still compiles
+            for field in &mut self.fields {
+                field.name.insert(0, '_');
+            }
+        }
+    }
+
+    fn add_dependencies(&self, library: &Library, out: &mut Dependencies) {
+        for field in &self.fields {
+            field
+                .ty
+                .add_dependencies_ignoring_generics(&self.generic_params, library, out);
+        }
+    }
+
+    fn instantiate_monomorph(
+        &self,
+        generic_values: &[GenericArgument],
+        library: &Library,
+        out: &mut Monomorphs,
+    ) {
+        let mappings = self.generic_params.call(self.path.name(), generic_values);
+
+        let mangled_path = mangle::mangle_path(
+            &self.path,
+            generic_values,
+            &library.get_config().export.mangle,
+        );
+
+        let monomorph = Union::new(
+            mangled_path,
+            GenericParams::default(),
+            self.fields
+                .iter()
+                .map(|field| Field {
+                    name: field.name.clone(),
+                    ty: field.ty.specialize(&mappings),
+                    cfg: field.cfg.clone(),
+                    annotations: field.annotations.clone(),
+                    documentation: field.documentation.clone(),
+                })
+                .collect(),
+            self.alignment,
+            self.tuple_union,
+            self.cfg.clone(),
+            self.annotations.clone(),
+            self.documentation.clone(),
+        );
+
+        out.insert_union(library, self, monomorph, generic_values.to_owned());
+    }
+}
+
+impl Source for Union {
+    fn write<F: Write>(&self, config: &Config, out: &mut SourceWriter<F>) {
+        let condition = self.cfg.to_condition(config);
+        condition.write_before(config, out);
+
+        self.documentation.write(config, out);
+
+        self.generic_params.write(config, out);
+
+        // The following results in
+        // C++ or C with Tag as style:
+        //   union Name {
+        // C with Type only style:
+        //   typedef union {
+        // C with Both as style:
+        //   typedef union Name {
+        match config.language {
+            Language::C if config.style.generate_typedef() => out.write("typedef "),
+            Language::C | Language::Cxx => {}
+            Language::Cython => out.write(config.style.cython_def()),
+        }
+
+        out.write("union");
+
+        // Cython supports `packed` on structs (see comments there), but not on unions.
+        if config.language != Language::Cython {
+            if let Some(align) = self.alignment {
+                match align {
+                    ReprAlign::Packed => {
+                        if let Some(ref anno) = config.layout.packed {
+                            write!(out, " {}", anno);
+                        }
+                    }
+                    ReprAlign::Align(n) => {
+                        if let Some(ref anno) = config.layout.aligned_n {
+                            write!(out, " {}({})", anno, n);
+                        }
+                    }
+                }
+            }
+        }
+
+        if config.language != Language::C || config.style.generate_tag() {
+            write!(out, " {}", self.export_name);
+        }
+
+        out.open_brace();
+
+        // Emit the pre_body section, if relevant
+        if let Some(body) = config.export.pre_body(&self.path) {
+            out.write_raw_block(body);
+            out.new_line();
+        }
+
+        out.write_vertical_source_list(&self.fields, ListType::Cap(";"));
+        if config.language == Language::Cython && self.fields.is_empty() {
+            out.write("pass");
+        }
+
+        // Emit the post_body section, if relevant
+        if let Some(body) = config.export.post_body(&self.path) {
+            out.new_line();
+            out.write_raw_block(body);
+        }
+
+        if config.language == Language::C && config.style.generate_typedef() {
+            out.close_brace(false);
+            write!(out, " {};", self.export_name);
+        } else {
+            out.close_brace(true);
+        }
+
+        condition.write_after(config, out);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/library.rs b/cbindgen-0.24.5/src/bindgen/library.rs
new file mode 100644
index 0000000..c00a6eb
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/library.rs
@@ -0,0 +1,441 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::HashMap;
+
+use crate::bindgen::bindings::Bindings;
+use crate::bindgen::config::{Config, Language, SortKey};
+use crate::bindgen::declarationtyperesolver::DeclarationTypeResolver;
+use crate::bindgen::dependencies::Dependencies;
+use crate::bindgen::error::Error;
+use crate::bindgen::ir::{Constant, Enum, Function, Item, ItemContainer, ItemMap};
+use crate::bindgen::ir::{OpaqueItem, Path, Static, Struct, Typedef, Union};
+use crate::bindgen::monomorph::Monomorphs;
+use crate::bindgen::ItemType;
+
+#[derive(Debug, Clone)]
+pub struct Library {
+    config: Config,
+    constants: ItemMap<Constant>,
+    globals: ItemMap<Static>,
+    enums: ItemMap<Enum>,
+    structs: ItemMap<Struct>,
+    unions: ItemMap<Union>,
+    opaque_items: ItemMap<OpaqueItem>,
+    typedefs: ItemMap<Typedef>,
+    functions: Vec<Function>,
+}
+
+impl Library {
+    #[allow(clippy::too_many_arguments)]
+    pub fn new(
+        config: Config,
+        constants: ItemMap<Constant>,
+        globals: ItemMap<Static>,
+        enums: ItemMap<Enum>,
+        structs: ItemMap<Struct>,
+        unions: ItemMap<Union>,
+        opaque_items: ItemMap<OpaqueItem>,
+        typedefs: ItemMap<Typedef>,
+        functions: Vec<Function>,
+    ) -> Library {
+        Library {
+            config,
+            constants,
+            globals,
+            enums,
+            structs,
+            unions,
+            opaque_items,
+            typedefs,
+            functions,
+        }
+    }
+
+    pub fn generate(mut self) -> Result<Bindings, Error> {
+        self.transfer_annotations();
+        self.simplify_standard_types();
+
+        match self.config.function.sort_by.unwrap_or(self.config.sort_by) {
+            SortKey::Name => self.functions.sort_by(|x, y| x.path.cmp(&y.path)),
+            SortKey::None => { /* keep input order */ }
+        }
+
+        if self.config.language != Language::Cxx {
+            self.instantiate_monomorphs();
+        }
+        self.remove_excluded();
+        if self.config.language == Language::C {
+            self.resolve_declaration_types();
+        }
+
+        self.rename_items();
+
+        let mut dependencies = Dependencies::new();
+
+        for function in &self.functions {
+            function.add_dependencies(&self, &mut dependencies);
+        }
+        self.globals.for_all_items(|global| {
+            global.add_dependencies(&self, &mut dependencies);
+        });
+        self.constants.for_all_items(|constant| {
+            constant.add_dependencies(&self, &mut dependencies);
+        });
+        for name in &self.config.export.include {
+            let path = Path::new(name.clone());
+            if let Some(items) = self.get_items(&path) {
+                if dependencies.items.insert(path) {
+                    for item in &items {
+                        item.deref().add_dependencies(&self, &mut dependencies);
+                    }
+                    for item in items {
+                        dependencies.order.push(item);
+                    }
+                }
+            }
+        }
+
+        dependencies.sort();
+
+        let items = dependencies.order;
+        let constants = if self.config.export.should_generate(ItemType::Constants) {
+            let mut constants = self.constants.to_vec();
+            match self.config.constant.sort_by.unwrap_or(self.config.sort_by) {
+                SortKey::Name => constants.sort_by(|x, y| x.path.cmp(&y.path)),
+                SortKey::None => { /* keep input order */ }
+            }
+            constants
+        } else {
+            vec![]
+        };
+
+        let globals = if self.config.export.should_generate(ItemType::Globals) {
+            let mut globals = self.globals.to_vec();
+            match self.config.constant.sort_by.unwrap_or(self.config.sort_by) {
+                SortKey::Name => globals.sort_by(|x, y| x.path.cmp(&y.path)),
+                SortKey::None => { /* keep input order */ }
+            }
+            globals
+        } else {
+            vec![]
+        };
+        let functions = if self.config.export.should_generate(ItemType::Functions) {
+            self.functions
+        } else {
+            vec![]
+        };
+
+        Ok(Bindings::new(
+            self.config,
+            self.structs,
+            self.typedefs,
+            constants,
+            globals,
+            items,
+            functions,
+            false,
+        ))
+    }
+
+    pub fn get_items(&self, p: &Path) -> Option<Vec<ItemContainer>> {
+        macro_rules! find {
+            ($field:ident, $kind:ident) => {
+                if self.config.export.should_generate(ItemType::$kind) {
+                    if let Some(x) = self.$field.get_items(p) {
+                        return Some(x);
+                    }
+                }
+            };
+        }
+
+        find!(enums, Enums);
+        find!(structs, Structs);
+        find!(unions, Unions);
+        find!(opaque_items, OpaqueItems);
+        find!(typedefs, Typedefs);
+
+        None
+    }
+
+    pub fn get_config(&self) -> &Config {
+        &self.config
+    }
+
+    fn remove_excluded(&mut self) {
+        let config = &self.config;
+        // FIXME: interpret `config.export.exclude` as `Path`s.
+        self.functions
+            .retain(|x| !config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.enums
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.structs
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.unions
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.opaque_items
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.typedefs
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.globals
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+        self.constants
+            .filter(|x| config.export.exclude.iter().any(|y| y == x.path().name()));
+    }
+
+    fn transfer_annotations(&mut self) {
+        let mut annotations = HashMap::new();
+
+        self.typedefs.for_all_items_mut(|x| {
+            x.transfer_annotations(&mut annotations);
+        });
+
+        for (alias_path, annotations) in annotations {
+            // TODO
+            let mut transferred = false;
+
+            self.enums.for_items_mut(&alias_path, |x| {
+                if x.annotations().is_empty() {
+                    *x.annotations_mut() = annotations.clone();
+                    transferred = true;
+                } else {
+                    warn!(
+                        "Can't transfer annotations from typedef to alias ({}) \
+                         that already has annotations.",
+                        alias_path
+                    );
+                }
+            });
+            if transferred {
+                continue;
+            }
+            self.structs.for_items_mut(&alias_path, |x| {
+                if x.annotations().is_empty() {
+                    *x.annotations_mut() = annotations.clone();
+                    transferred = true;
+                } else {
+                    warn!(
+                        "Can't transfer annotations from typedef to alias ({}) \
+                         that already has annotations.",
+                        alias_path
+                    );
+                }
+            });
+            if transferred {
+                continue;
+            }
+            self.unions.for_items_mut(&alias_path, |x| {
+                if x.annotations().is_empty() {
+                    *x.annotations_mut() = annotations.clone();
+                    transferred = true;
+                } else {
+                    warn!(
+                        "Can't transfer annotations from typedef to alias ({}) \
+                         that already has annotations.",
+                        alias_path
+                    );
+                }
+            });
+            if transferred {
+                continue;
+            }
+            self.opaque_items.for_items_mut(&alias_path, |x| {
+                if x.annotations().is_empty() {
+                    *x.annotations_mut() = annotations.clone();
+                    transferred = true;
+                } else {
+                    warn!(
+                        "Can't transfer annotations from typedef to alias ({}) \
+                         that already has annotations.",
+                        alias_path
+                    );
+                }
+            });
+            if transferred {
+                continue;
+            }
+            self.typedefs.for_items_mut(&alias_path, |x| {
+                if x.annotations().is_empty() {
+                    *x.annotations_mut() = annotations.clone();
+                    transferred = true;
+                } else {
+                    warn!(
+                        "Can't transfer annotations from typedef to alias ({}) \
+                         that already has annotations.",
+                        alias_path
+                    );
+                }
+            });
+            if transferred {
+                continue;
+            }
+        }
+    }
+
+    fn rename_items(&mut self) {
+        let config = &self.config;
+
+        self.globals
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.globals.rebuild();
+
+        self.constants
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.constants.rebuild();
+
+        self.structs
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.structs.rebuild();
+
+        self.unions
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.unions.rebuild();
+
+        self.enums
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.enums.rebuild();
+
+        self.opaque_items
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.opaque_items.rebuild();
+
+        self.typedefs
+            .for_all_items_mut(|x| x.rename_for_config(config));
+        self.typedefs.rebuild();
+
+        for item in &mut self.functions {
+            item.rename_for_config(&self.config);
+        }
+    }
+
+    fn resolve_declaration_types(&mut self) {
+        if !self.config.style.generate_tag() {
+            return;
+        }
+
+        let mut resolver = DeclarationTypeResolver::default();
+
+        self.structs.for_all_items(|x| {
+            x.collect_declaration_types(&mut resolver);
+        });
+
+        self.enums.for_all_items(|x| {
+            x.collect_declaration_types(&mut resolver);
+        });
+
+        self.unions.for_all_items(|x| {
+            x.collect_declaration_types(&mut resolver);
+        });
+
+        self.typedefs.for_all_items(|x| {
+            x.collect_declaration_types(&mut resolver);
+        });
+
+        // NOTE: Intentionally last, so that in case there's an opaque type
+        // which is conflicting with a non-opaque one, the later wins.
+        self.opaque_items.for_all_items(|x| {
+            x.collect_declaration_types(&mut resolver);
+        });
+
+        self.enums
+            .for_all_items_mut(|x| x.resolve_declaration_types(&resolver));
+
+        self.structs
+            .for_all_items_mut(|x| x.resolve_declaration_types(&resolver));
+
+        self.unions
+            .for_all_items_mut(|x| x.resolve_declaration_types(&resolver));
+
+        self.typedefs
+            .for_all_items_mut(|x| x.resolve_declaration_types(&resolver));
+
+        self.globals
+            .for_all_items_mut(|x| x.resolve_declaration_types(&resolver));
+
+        for item in &mut self.functions {
+            item.resolve_declaration_types(&resolver);
+        }
+    }
+
+    fn simplify_standard_types(&mut self) {
+        let config = &self.config;
+
+        self.structs.for_all_items_mut(|x| {
+            x.simplify_standard_types(config);
+        });
+        self.enums.for_all_items_mut(|x| {
+            x.simplify_standard_types(config);
+        });
+        self.unions.for_all_items_mut(|x| {
+            x.simplify_standard_types(config);
+        });
+        self.globals.for_all_items_mut(|x| {
+            x.simplify_standard_types(config);
+        });
+        self.typedefs.for_all_items_mut(|x| {
+            x.simplify_standard_types(config);
+        });
+        for x in &mut self.functions {
+            x.simplify_standard_types(config);
+        }
+    }
+
+    fn instantiate_monomorphs(&mut self) {
+        // Collect a list of monomorphs
+        let mut monomorphs = Monomorphs::default();
+
+        self.structs.for_all_items(|x| {
+            x.add_monomorphs(self, &mut monomorphs);
+        });
+        self.unions.for_all_items(|x| {
+            x.add_monomorphs(self, &mut monomorphs);
+        });
+        self.enums.for_all_items(|x| {
+            x.add_monomorphs(self, &mut monomorphs);
+        });
+        self.typedefs.for_all_items(|x| {
+            x.add_monomorphs(self, &mut monomorphs);
+        });
+        for x in &self.functions {
+            x.add_monomorphs(self, &mut monomorphs);
+        }
+
+        // Insert the monomorphs into self
+        for monomorph in monomorphs.drain_structs() {
+            self.structs.try_insert(monomorph);
+        }
+        for monomorph in monomorphs.drain_unions() {
+            self.unions.try_insert(monomorph);
+        }
+        for monomorph in monomorphs.drain_opaques() {
+            self.opaque_items.try_insert(monomorph);
+        }
+        for monomorph in monomorphs.drain_typedefs() {
+            self.typedefs.try_insert(monomorph);
+        }
+        for monomorph in monomorphs.drain_enums() {
+            self.enums.try_insert(monomorph);
+        }
+
+        // Remove structs and opaque items that are generic
+        self.opaque_items.filter(|x| x.generic_params.len() > 0);
+        self.structs.filter(|x| x.generic_params.len() > 0);
+        self.unions.filter(|x| x.generic_params.len() > 0);
+        self.enums.filter(|x| x.generic_params.len() > 0);
+        self.typedefs.filter(|x| x.generic_params.len() > 0);
+
+        // Mangle the paths that remain
+        self.unions
+            .for_all_items_mut(|x| x.mangle_paths(&monomorphs));
+        self.structs
+            .for_all_items_mut(|x| x.mangle_paths(&monomorphs));
+        self.enums
+            .for_all_items_mut(|x| x.mangle_paths(&monomorphs));
+        self.typedefs
+            .for_all_items_mut(|x| x.mangle_paths(&monomorphs));
+        for x in &mut self.functions {
+            x.mangle_paths(&monomorphs);
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/mangle.rs b/cbindgen-0.24.5/src/bindgen/mangle.rs
new file mode 100644
index 0000000..c8769f8
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/mangle.rs
@@ -0,0 +1,348 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use crate::bindgen::config::MangleConfig;
+use crate::bindgen::ir::{ConstExpr, GenericArgument, GenericPath, Path, Type};
+use crate::bindgen::rename::IdentifierType;
+
+pub fn mangle_path(path: &Path, generic_values: &[GenericArgument], config: &MangleConfig) -> Path {
+    Path::new(mangle_name(path.name(), generic_values, config))
+}
+
+pub fn mangle_name(
+    name: &str,
+    generic_values: &[GenericArgument],
+    config: &MangleConfig,
+) -> String {
+    Mangler::new(name, generic_values, /* last = */ true, config).mangle()
+}
+
+enum Separator {
+    OpeningAngleBracket = 1,
+    Comma,
+    ClosingAngleBracket,
+    BeginMutPtr,
+    BeginConstPtr,
+    BeginFn,
+    BetweenFnArg,
+    EndFn,
+}
+
+struct Mangler<'a> {
+    input: &'a str,
+    generic_values: &'a [GenericArgument],
+    output: String,
+    last: bool,
+    config: &'a MangleConfig,
+}
+
+impl<'a> Mangler<'a> {
+    fn new(
+        input: &'a str,
+        generic_values: &'a [GenericArgument],
+        last: bool,
+        config: &'a MangleConfig,
+    ) -> Self {
+        Self {
+            input,
+            generic_values,
+            output: String::new(),
+            last,
+            config,
+        }
+    }
+
+    fn mangle(mut self) -> String {
+        self.mangle_internal();
+        self.output
+    }
+
+    fn push(&mut self, id: Separator) {
+        let count = id as usize;
+        let separator = if self.config.remove_underscores {
+            ""
+        } else {
+            "_"
+        };
+        self.output.extend(std::iter::repeat(separator).take(count));
+    }
+
+    fn append_mangled_argument(&mut self, arg: &GenericArgument, last: bool) {
+        match *arg {
+            GenericArgument::Type(ref ty) => self.append_mangled_type(ty, last),
+            GenericArgument::Const(ConstExpr::Name(ref name)) => {
+                // This must behave the same as a GenericArgument::Type,
+                // because const arguments are commonly represented as Types;
+                // see the comment on `enum GenericArgument`.
+                let fake_ty = Type::Path(GenericPath::new(Path::new(name), vec![]));
+                self.append_mangled_type(&fake_ty, last);
+            }
+            GenericArgument::Const(ConstExpr::Value(ref val)) => self.output.push_str(val),
+        }
+    }
+
+    fn append_mangled_type(&mut self, ty: &Type, last: bool) {
+        match *ty {
+            Type::Path(ref generic) => {
+                let sub_path =
+                    Mangler::new(generic.export_name(), generic.generics(), last, self.config)
+                        .mangle();
+
+                self.output.push_str(
+                    &self
+                        .config
+                        .rename_types
+                        .apply(&sub_path, IdentifierType::Type),
+                );
+            }
+            Type::Primitive(ref primitive) => {
+                self.output.push_str(
+                    &self
+                        .config
+                        .rename_types
+                        .apply(primitive.to_repr_rust(), IdentifierType::Type),
+                );
+            }
+            Type::Ptr {
+                ref ty, is_const, ..
+            } => {
+                self.push(if is_const {
+                    Separator::BeginConstPtr
+                } else {
+                    Separator::BeginMutPtr
+                });
+                self.append_mangled_type(ty, last);
+            }
+            Type::FuncPtr {
+                ref ret, ref args, ..
+            } => {
+                self.push(Separator::BeginFn);
+                self.append_mangled_type(ret, args.is_empty());
+                for (i, arg) in args.iter().enumerate() {
+                    self.push(Separator::BetweenFnArg);
+                    let last = last && i == args.len() - 1;
+                    self.append_mangled_type(&arg.1, last);
+                }
+                if !self.last {
+                    self.push(Separator::EndFn);
+                }
+            }
+            Type::Array(..) => {
+                unimplemented!(
+                    "Unable to mangle generic parameter {:?} for '{}'",
+                    ty,
+                    self.input
+                );
+            }
+        }
+    }
+
+    fn mangle_internal(&mut self) {
+        debug_assert!(self.output.is_empty());
+        self.output = self.input.to_owned();
+        if self.generic_values.is_empty() {
+            return;
+        }
+
+        self.push(Separator::OpeningAngleBracket);
+        for (i, arg) in self.generic_values.iter().enumerate() {
+            if i != 0 {
+                self.push(Separator::Comma);
+            }
+            let last = self.last && i == self.generic_values.len() - 1;
+            self.append_mangled_argument(arg, last);
+        }
+
+        // Skip writing the trailing '>' mangling when possible
+        if !self.last {
+            self.push(Separator::ClosingAngleBracket)
+        }
+    }
+}
+
+#[test]
+fn generics() {
+    use crate::bindgen::ir::{GenericPath, PrimitiveType};
+    use crate::bindgen::rename::RenameRule::{self, PascalCase};
+
+    fn float() -> GenericArgument {
+        GenericArgument::Type(Type::Primitive(PrimitiveType::Float))
+    }
+
+    fn c_char() -> GenericArgument {
+        GenericArgument::Type(Type::Primitive(PrimitiveType::Char))
+    }
+
+    fn path(path: &str) -> GenericArgument {
+        generic_path(path, &[])
+    }
+
+    fn generic_path(path: &str, arguments: &[GenericArgument]) -> GenericArgument {
+        let path = Path::new(path);
+        let generic_path = GenericPath::new(path, arguments.to_owned());
+        GenericArgument::Type(Type::Path(generic_path))
+    }
+
+    // Foo<f32> => Foo_f32
+    assert_eq!(
+        mangle_path(&Path::new("Foo"), &[float()], &MangleConfig::default()),
+        Path::new("Foo_f32")
+    );
+
+    // Foo<Bar<f32>> => Foo_Bar_f32
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[generic_path("Bar", &[float()])],
+            &MangleConfig::default(),
+        ),
+        Path::new("Foo_Bar_f32")
+    );
+
+    // Foo<Bar> => Foo_Bar
+    assert_eq!(
+        mangle_path(&Path::new("Foo"), &[path("Bar")], &MangleConfig::default()),
+        Path::new("Foo_Bar")
+    );
+
+    // Foo<Bar> => FooBar
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[path("Bar")],
+            &MangleConfig {
+                remove_underscores: true,
+                rename_types: RenameRule::None,
+            }
+        ),
+        Path::new("FooBar")
+    );
+
+    // Foo<Bar<f32>> => FooBarF32
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[generic_path("Bar", &[float()])],
+            &MangleConfig {
+                remove_underscores: true,
+                rename_types: PascalCase,
+            },
+        ),
+        Path::new("FooBarF32")
+    );
+
+    // Foo<Bar<c_char>> => FooBarCChar
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[generic_path("Bar", &[c_char()])],
+            &MangleConfig {
+                remove_underscores: true,
+                rename_types: PascalCase,
+            },
+        ),
+        Path::new("FooBarCChar")
+    );
+
+    // Foo<Bar<T>> => Foo_Bar_T
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[generic_path("Bar", &[path("T")])],
+            &MangleConfig::default(),
+        ),
+        Path::new("Foo_Bar_T")
+    );
+
+    // Foo<Bar<T>, E> => Foo_Bar_T_____E
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[generic_path("Bar", &[path("T")]), path("E")],
+            &MangleConfig::default(),
+        ),
+        Path::new("Foo_Bar_T_____E")
+    );
+
+    // Foo<Bar<T>, Bar<E>> => Foo_Bar_T_____Bar_E
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[
+                generic_path("Bar", &[path("T")]),
+                generic_path("Bar", &[path("E")]),
+            ],
+            &MangleConfig::default(),
+        ),
+        Path::new("Foo_Bar_T_____Bar_E")
+    );
+
+    // Foo<Bar<T>, E> => FooBarTE
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[generic_path("Bar", &[path("T")]), path("E")],
+            &MangleConfig {
+                remove_underscores: true,
+                rename_types: PascalCase,
+            },
+        ),
+        Path::new("FooBarTE")
+    );
+
+    // Foo<Bar<T>, Bar<E>> => FooBarTBarE
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[
+                generic_path("Bar", &[path("T")]),
+                generic_path("Bar", &[path("E")]),
+            ],
+            &MangleConfig {
+                remove_underscores: true,
+                rename_types: PascalCase,
+            },
+        ),
+        Path::new("FooBarTBarE")
+    );
+
+    assert_eq!(
+        mangle_path(
+            &Path::new("Top"),
+            &[GenericArgument::Const(ConstExpr::Value("40".to_string()))],
+            &MangleConfig::default(),
+        ),
+        Path::new("Top_40")
+    );
+
+    assert_eq!(
+        mangle_path(
+            &Path::new("Top"),
+            &[GenericArgument::Const(ConstExpr::Name("N".to_string()))],
+            &MangleConfig::default(),
+        ),
+        Path::new("Top_N")
+    );
+
+    assert_eq!(
+        mangle_path(
+            &Path::new("Top"),
+            &[generic_path("N", &[])],
+            &MangleConfig::default(),
+        ),
+        Path::new("Top_N")
+    );
+
+    assert_eq!(
+        mangle_path(
+            &Path::new("Foo"),
+            &[
+                float(),
+                GenericArgument::Const(ConstExpr::Value("40".to_string()))
+            ],
+            &MangleConfig::default(),
+        ),
+        Path::new("Foo_f32__40")
+    );
+}
diff --git a/cbindgen-0.24.5/src/bindgen/mod.rs b/cbindgen-0.24.5/src/bindgen/mod.rs
new file mode 100644
index 0000000..d0789da
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/mod.rs
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/// A helper macro for deriving deserialize for an enum to be used in toml-rs.
+/// This macro works be relying on an existing FromStr implementation for the
+/// desired type.
+macro_rules! deserialize_enum_str {
+    ($name:ident) => {
+        impl<'de> ::serde::Deserialize<'de> for $name {
+            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+            where
+                D: ::serde::Deserializer<'de>,
+            {
+                struct Visitor;
+                impl<'de> ::serde::de::Visitor<'de> for Visitor {
+                    type Value = $name;
+
+                    fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+                        f.write_str("$name")
+                    }
+
+                    fn visit_str<E>(self, v: &str) -> Result<$name, E>
+                    where
+                        E: ::serde::de::Error,
+                    {
+                        match v.parse::<$name>() {
+                            Ok(v) => Ok(v),
+                            Err(m) => Err(E::custom(m)),
+                        }
+                    }
+                }
+                deserializer.deserialize_str(Visitor)
+            }
+        }
+    };
+}
+
+mod bindings;
+mod bitflags;
+mod builder;
+mod cargo;
+mod cdecl;
+mod config;
+mod declarationtyperesolver;
+mod dependencies;
+mod error;
+mod ir;
+mod library;
+mod mangle;
+mod monomorph;
+mod parser;
+mod rename;
+mod reserved;
+mod utilities;
+mod writer;
+
+#[allow(unused)]
+pub(crate) use self::cargo::*;
+
+pub use self::bindings::Bindings;
+pub use self::builder::Builder;
+pub use self::config::Profile; // disambiguate with cargo::Profile
+pub use self::config::*;
+pub use self::error::Error;
diff --git a/cbindgen-0.24.5/src/bindgen/monomorph.rs b/cbindgen-0.24.5/src/bindgen/monomorph.rs
new file mode 100644
index 0000000..db6dce6
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/monomorph.rs
@@ -0,0 +1,147 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::HashMap;
+use std::mem;
+
+use crate::bindgen::ir::{
+    Enum, GenericArgument, GenericPath, OpaqueItem, Path, Struct, Typedef, Union,
+};
+use crate::bindgen::library::Library;
+
+#[derive(Default, Clone, Debug)]
+pub struct Monomorphs {
+    replacements: HashMap<GenericPath, Path>,
+    opaques: Vec<OpaqueItem>,
+    structs: Vec<Struct>,
+    unions: Vec<Union>,
+    typedefs: Vec<Typedef>,
+    enums: Vec<Enum>,
+}
+
+impl Monomorphs {
+    pub fn contains(&self, path: &GenericPath) -> bool {
+        self.replacements.contains_key(path)
+    }
+
+    pub fn insert_struct(
+        &mut self,
+        library: &Library,
+        generic: &Struct,
+        monomorph: Struct,
+        arguments: Vec<GenericArgument>,
+    ) {
+        let replacement_path = GenericPath::new(generic.path.clone(), arguments);
+
+        debug_assert!(generic.generic_params.len() > 0);
+        debug_assert!(!self.contains(&replacement_path));
+
+        self.replacements
+            .insert(replacement_path, monomorph.path.clone());
+
+        monomorph.add_monomorphs(library, self);
+
+        self.structs.push(monomorph);
+    }
+
+    pub fn insert_enum(
+        &mut self,
+        library: &Library,
+        generic: &Enum,
+        monomorph: Enum,
+        arguments: Vec<GenericArgument>,
+    ) {
+        let replacement_path = GenericPath::new(generic.path.clone(), arguments);
+
+        debug_assert!(generic.generic_params.len() > 0);
+        debug_assert!(!self.contains(&replacement_path));
+
+        self.replacements
+            .insert(replacement_path, monomorph.path.clone());
+
+        monomorph.add_monomorphs(library, self);
+
+        self.enums.push(monomorph);
+    }
+
+    pub fn insert_union(
+        &mut self,
+        library: &Library,
+        generic: &Union,
+        monomorph: Union,
+        arguments: Vec<GenericArgument>,
+    ) {
+        let replacement_path = GenericPath::new(generic.path.clone(), arguments);
+
+        debug_assert!(generic.generic_params.len() > 0);
+        debug_assert!(!self.contains(&replacement_path));
+
+        self.replacements
+            .insert(replacement_path, monomorph.path.clone());
+
+        monomorph.add_monomorphs(library, self);
+
+        self.unions.push(monomorph);
+    }
+
+    pub fn insert_opaque(
+        &mut self,
+        generic: &OpaqueItem,
+        monomorph: OpaqueItem,
+        arguments: Vec<GenericArgument>,
+    ) {
+        let replacement_path = GenericPath::new(generic.path.clone(), arguments);
+
+        debug_assert!(generic.generic_params.len() > 0);
+        debug_assert!(!self.contains(&replacement_path));
+
+        self.replacements
+            .insert(replacement_path, monomorph.path.clone());
+        self.opaques.push(monomorph);
+    }
+
+    pub fn insert_typedef(
+        &mut self,
+        library: &Library,
+        generic: &Typedef,
+        monomorph: Typedef,
+        arguments: Vec<GenericArgument>,
+    ) {
+        let replacement_path = GenericPath::new(generic.path.clone(), arguments);
+
+        debug_assert!(generic.generic_params.len() > 0);
+        debug_assert!(!self.contains(&replacement_path));
+
+        self.replacements
+            .insert(replacement_path, monomorph.path.clone());
+
+        monomorph.add_monomorphs(library, self);
+
+        self.typedefs.push(monomorph);
+    }
+
+    pub fn mangle_path(&self, path: &GenericPath) -> Option<&Path> {
+        self.replacements.get(path)
+    }
+
+    pub fn drain_opaques(&mut self) -> Vec<OpaqueItem> {
+        mem::take(&mut self.opaques)
+    }
+
+    pub fn drain_structs(&mut self) -> Vec<Struct> {
+        mem::take(&mut self.structs)
+    }
+
+    pub fn drain_unions(&mut self) -> Vec<Union> {
+        mem::take(&mut self.unions)
+    }
+
+    pub fn drain_typedefs(&mut self) -> Vec<Typedef> {
+        mem::take(&mut self.typedefs)
+    }
+
+    pub fn drain_enums(&mut self) -> Vec<Enum> {
+        mem::take(&mut self.enums)
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/parser.rs b/cbindgen-0.24.5/src/bindgen/parser.rs
new file mode 100644
index 0000000..a964cd2
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/parser.rs
@@ -0,0 +1,1034 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::collections::hash_map::Entry;
+use std::collections::{HashMap, HashSet};
+use std::fs::File;
+use std::io::Read;
+use std::path::{Path as FilePath, PathBuf as FilePathBuf};
+
+use syn::ext::IdentExt;
+
+use crate::bindgen::bitflags;
+use crate::bindgen::cargo::{Cargo, PackageRef};
+use crate::bindgen::config::{Config, ParseConfig};
+use crate::bindgen::error::Error;
+use crate::bindgen::ir::{
+    AnnotationSet, Cfg, Constant, Documentation, Enum, Function, GenericParam, GenericParams,
+    ItemMap, OpaqueItem, Path, Static, Struct, Type, Typedef, Union,
+};
+use crate::bindgen::utilities::{SynAbiHelpers, SynAttributeHelpers, SynItemFnHelpers};
+
+const STD_CRATES: &[&str] = &[
+    "std",
+    "std_unicode",
+    "alloc",
+    "collections",
+    "core",
+    "proc_macro",
+];
+
+type ParseResult = Result<Parse, Error>;
+
+/// Parses a single rust source file, not following `mod` or `extern crate`.
+pub fn parse_src(src_file: &FilePath, config: &Config) -> ParseResult {
+    let mod_name = src_file.file_stem().unwrap().to_str().unwrap();
+    let mut config = config.clone();
+    config.parse = ParseConfig {
+        parse_deps: true,
+        ..ParseConfig::default()
+    };
+
+    let mut context = Parser {
+        binding_crate_name: mod_name.to_owned(),
+        config: &config,
+        lib: None,
+        parsed_crates: HashSet::new(),
+        cache_src: HashMap::new(),
+        cache_expanded_crate: HashMap::new(),
+        cfg_stack: Vec::new(),
+        out: Parse::new(),
+    };
+
+    let pkg_ref = PackageRef {
+        name: mod_name.to_owned(),
+        version: None,
+    };
+
+    context.parse_mod(&pkg_ref, src_file, 0)?;
+    Ok(context.out)
+}
+
+/// Recursively parses a rust library starting at the root crate's directory.
+///
+/// Inside a crate, `mod` and `extern crate` declarations are followed
+/// and parsed. To find an external crate, the parser uses the `cargo metadata`
+/// command to find the location of dependencies.
+pub(crate) fn parse_lib(lib: Cargo, config: &Config) -> ParseResult {
+    let mut context = Parser {
+        binding_crate_name: lib.binding_crate_name().to_owned(),
+        config,
+        lib: Some(lib),
+        parsed_crates: HashSet::new(),
+        cache_src: HashMap::new(),
+        cache_expanded_crate: HashMap::new(),
+        cfg_stack: Vec::new(),
+        out: Parse::new(),
+    };
+
+    let binding_crate = context.lib.as_ref().unwrap().binding_crate_ref();
+    context.parse_crate(&binding_crate)?;
+    Ok(context.out)
+}
+
+#[derive(Debug, Clone)]
+struct Parser<'a> {
+    binding_crate_name: String,
+    lib: Option<Cargo>,
+    config: &'a Config,
+
+    parsed_crates: HashSet<String>,
+    cache_src: HashMap<FilePathBuf, Vec<syn::Item>>,
+    cache_expanded_crate: HashMap<String, Vec<syn::Item>>,
+
+    cfg_stack: Vec<Cfg>,
+
+    out: Parse,
+}
+
+impl<'a> Parser<'a> {
+    fn should_parse_dependency(&self, pkg_name: &str) -> bool {
+        if self.parsed_crates.contains(pkg_name) {
+            return false;
+        }
+
+        if !self.config.parse.parse_deps {
+            return false;
+        }
+
+        // Skip any whitelist or blacklist for expand
+        if self
+            .config
+            .parse
+            .expand
+            .crates
+            .iter()
+            .any(|name| name == pkg_name)
+        {
+            return true;
+        }
+
+        // If we have a whitelist, check it
+        if let Some(ref include) = self.config.parse.include {
+            if !include.iter().any(|name| name == pkg_name) {
+                debug!("Excluding crate {}", pkg_name);
+                return false;
+            }
+        }
+
+        // Check the blacklist
+        !STD_CRATES.contains(&pkg_name)
+            && !self
+                .config
+                .parse
+                .exclude
+                .iter()
+                .any(|name| name == pkg_name)
+    }
+
+    fn parse_crate(&mut self, pkg: &PackageRef) -> Result<(), Error> {
+        assert!(self.lib.is_some());
+        debug!("Parsing crate {}", pkg.name);
+        self.parsed_crates.insert(pkg.name.clone());
+
+        // Check if we should use cargo expand for this crate
+        if self.config.parse.expand.crates.contains(&pkg.name) {
+            self.parse_expand_crate(pkg)?;
+        } else {
+            // Parse the crate before the dependencies otherwise the same-named idents we
+            // want to generate bindings for would be replaced by the ones provided
+            // by the first dependency containing it.
+            let crate_src = self.lib.as_ref().unwrap().find_crate_src(pkg);
+
+            match crate_src {
+                Some(crate_src) => self.parse_mod(pkg, crate_src.as_path(), 0)?,
+                None => {
+                    // This should be an error, but is common enough to just elicit a warning
+                    warn!(
+                        "Parsing crate `{}`: can't find lib.rs with `cargo metadata`. \
+                        The crate may be available only on a particular platform, \
+                        so consider setting `fetch_all_dependencies` in your cbindgen configuration.",
+                        pkg.name
+                    );
+                }
+            }
+        }
+
+        for (dep_pkg, cfg) in self.lib.as_ref().unwrap().dependencies(pkg) {
+            if !self.should_parse_dependency(&dep_pkg.name) {
+                continue;
+            }
+
+            if let Some(ref cfg) = cfg {
+                self.cfg_stack.push(cfg.clone());
+            }
+
+            self.parse_crate(&dep_pkg)?;
+
+            if cfg.is_some() {
+                self.cfg_stack.pop();
+            }
+        }
+
+        Ok(())
+    }
+
+    fn parse_expand_crate(&mut self, pkg: &PackageRef) -> Result<(), Error> {
+        assert!(self.lib.is_some());
+
+        let mod_items = {
+            if !self.cache_expanded_crate.contains_key(&pkg.name) {
+                let s = self
+                    .lib
+                    .as_ref()
+                    .unwrap()
+                    .expand_crate(
+                        pkg,
+                        self.config.parse.expand.all_features,
+                        self.config.parse.expand.default_features,
+                        &self.config.parse.expand.features,
+                        self.config.parse.expand.profile,
+                    )
+                    .map_err(|x| Error::CargoExpand(pkg.name.clone(), x))?;
+                let i = syn::parse_file(&s).map_err(|x| Error::ParseSyntaxError {
+                    crate_name: pkg.name.clone(),
+                    src_path: "".to_owned(),
+                    error: x,
+                })?;
+                self.cache_expanded_crate.insert(pkg.name.clone(), i.items);
+            }
+
+            self.cache_expanded_crate.get(&pkg.name).unwrap().clone()
+        };
+
+        self.process_mod(
+            pkg, None, None, &mod_items, 0, /* is_mod_rs = */ true,
+            /* is_inline = */ false,
+        )
+    }
+
+    fn parse_mod(
+        &mut self,
+        pkg: &PackageRef,
+        mod_path: &FilePath,
+        depth: usize,
+    ) -> Result<(), Error> {
+        let mod_items = match self.cache_src.entry(mod_path.to_path_buf()) {
+            Entry::Vacant(vacant_entry) => {
+                let mut s = String::new();
+                let mut f = File::open(mod_path).map_err(|_| Error::ParseCannotOpenFile {
+                    crate_name: pkg.name.clone(),
+                    src_path: mod_path.to_str().unwrap().to_owned(),
+                })?;
+
+                f.read_to_string(&mut s)
+                    .map_err(|_| Error::ParseCannotOpenFile {
+                        crate_name: pkg.name.clone(),
+                        src_path: mod_path.to_str().unwrap().to_owned(),
+                    })?;
+
+                let i = syn::parse_file(&s).map_err(|x| Error::ParseSyntaxError {
+                    crate_name: pkg.name.clone(),
+                    src_path: mod_path.to_string_lossy().into(),
+                    error: x,
+                })?;
+
+                vacant_entry.insert(i.items).clone()
+            }
+            Entry::Occupied(occupied_entry) => occupied_entry.get().clone(),
+        };
+
+        // Compute module directory according to Rust 2018 rules
+        let submod_dir_2018;
+
+        let mod_dir = mod_path.parent().unwrap();
+
+        let is_mod_rs = depth == 0 || mod_path.ends_with("mod.rs");
+        let submod_dir = if is_mod_rs {
+            mod_dir
+        } else {
+            submod_dir_2018 = mod_path
+                .parent()
+                .unwrap()
+                .join(mod_path.file_stem().unwrap());
+            &submod_dir_2018
+        };
+
+        self.process_mod(
+            pkg,
+            Some(mod_dir),
+            Some(submod_dir),
+            &mod_items,
+            depth,
+            /* is_inline = */ false,
+            is_mod_rs,
+        )
+    }
+
+    /// `mod_dir` is the path to the current directory of the module. It may be
+    /// `None` for pre-expanded modules.
+    ///
+    /// `submod_dir` is the path to search submodules in by default, which might
+    /// be different for rust 2018 for example.
+    #[allow(clippy::too_many_arguments)]
+    fn process_mod(
+        &mut self,
+        pkg: &PackageRef,
+        mod_dir: Option<&FilePath>,
+        submod_dir: Option<&FilePath>,
+        items: &[syn::Item],
+        depth: usize,
+        is_inline: bool,
+        is_in_mod_rs: bool,
+    ) -> Result<(), Error> {
+        debug_assert_eq!(mod_dir.is_some(), submod_dir.is_some());
+        // We process the items first then the nested modules.
+        let nested_modules = self.out.load_syn_crate_mod(
+            self.config,
+            &self.binding_crate_name,
+            &pkg.name,
+            Cfg::join(&self.cfg_stack).as_ref(),
+            items,
+        );
+
+        for item in nested_modules {
+            let next_mod_name = item.ident.unraw().to_string();
+            let cfg = Cfg::load(&item.attrs);
+            if let Some(ref cfg) = cfg {
+                self.cfg_stack.push(cfg.clone());
+            }
+
+            if let Some((_, ref inline_items)) = item.content {
+                // TODO(emilio): This should use #[path] attribute if present,
+                // rather than next_mod_name.
+                let next_submod_dir = submod_dir.map(|dir| dir.join(&next_mod_name));
+                let next_mod_dir = mod_dir.map(|dir| dir.join(&next_mod_name));
+                self.process_mod(
+                    pkg,
+                    next_mod_dir.as_deref(),
+                    next_submod_dir.as_deref(),
+                    inline_items,
+                    depth,
+                    /* is_inline = */ true,
+                    is_in_mod_rs,
+                )?;
+            } else if let Some(mod_dir) = mod_dir {
+                let submod_dir = submod_dir.unwrap();
+                let next_mod_path1 = submod_dir.join(next_mod_name.clone() + ".rs");
+                let next_mod_path2 = submod_dir.join(next_mod_name.clone()).join("mod.rs");
+
+                if next_mod_path1.exists() {
+                    self.parse_mod(pkg, next_mod_path1.as_path(), depth + 1)?;
+                } else if next_mod_path2.exists() {
+                    self.parse_mod(pkg, next_mod_path2.as_path(), depth + 1)?;
+                } else {
+                    // Last chance to find a module path
+                    let mut path_attr_found = false;
+                    for attr in &item.attrs {
+                        if let Ok(syn::Meta::NameValue(syn::MetaNameValue { path, lit, .. })) =
+                            attr.parse_meta()
+                        {
+                            match lit {
+                                syn::Lit::Str(ref path_lit) if path.is_ident("path") => {
+                                    path_attr_found = true;
+                                    // https://doc.rust-lang.org/reference/items/modules.html#the-path-attribute
+                                    //
+                                    //     For path attributes on modules not inside inline module blocks, the file path
+                                    //     is relative to the directory the source file is located.
+                                    //
+                                    //     For path attributes inside inline module blocks, the relative location of the
+                                    //     file path depends on the kind of source file the path attribute is located
+                                    //     in.  "mod-rs" source files are root modules (such as lib.rs or main.rs) and
+                                    //     modules with files named mod.rs. "non-mod-rs" source files are all other
+                                    //     module files.
+                                    //
+                                    //     Paths for path attributes inside inline module blocks in a mod-rs file are
+                                    //     relative to the directory of the mod-rs file including the inline module
+                                    //     components as directories. For non-mod-rs files, it is the same except the
+                                    //     path starts with a directory with the name of the non-mod-rs module.
+                                    //
+                                    let base = if is_inline && !is_in_mod_rs {
+                                        submod_dir
+                                    } else {
+                                        mod_dir
+                                    };
+                                    self.parse_mod(pkg, &base.join(path_lit.value()), depth + 1)?;
+                                    break;
+                                }
+                                _ => (),
+                            }
+                        }
+                    }
+
+                    // This should be an error, but it's common enough to
+                    // just elicit a warning
+                    if !path_attr_found {
+                        warn!(
+                            "Parsing crate `{}`: can't find mod {}`.",
+                            pkg.name, next_mod_name
+                        );
+                    }
+                }
+            } else {
+                warn!(
+                    "Parsing expanded crate `{}`: can't find mod {}`.",
+                    pkg.name, next_mod_name
+                );
+            }
+
+            if cfg.is_some() {
+                self.cfg_stack.pop();
+            }
+        }
+
+        Ok(())
+    }
+}
+
+#[derive(Debug, Clone)]
+pub struct Parse {
+    pub constants: ItemMap<Constant>,
+    pub globals: ItemMap<Static>,
+    pub enums: ItemMap<Enum>,
+    pub structs: ItemMap<Struct>,
+    pub unions: ItemMap<Union>,
+    pub opaque_items: ItemMap<OpaqueItem>,
+    pub typedefs: ItemMap<Typedef>,
+    pub functions: Vec<Function>,
+}
+
+impl Parse {
+    pub fn new() -> Parse {
+        Parse {
+            constants: ItemMap::default(),
+            globals: ItemMap::default(),
+            enums: ItemMap::default(),
+            structs: ItemMap::default(),
+            unions: ItemMap::default(),
+            opaque_items: ItemMap::default(),
+            typedefs: ItemMap::default(),
+            functions: Vec::new(),
+        }
+    }
+
+    pub fn add_std_types(&mut self) {
+        let mut add_opaque = |path: &str, generic_params: Vec<&str>| {
+            let path = Path::new(path);
+            let generic_params: Vec<_> = generic_params
+                .into_iter()
+                .map(GenericParam::new_type_param)
+                .collect();
+            self.opaque_items.try_insert(OpaqueItem::new(
+                path,
+                GenericParams(generic_params),
+                None,
+                AnnotationSet::new(),
+                Documentation::none(),
+            ))
+        };
+
+        add_opaque("String", vec![]);
+        add_opaque("Box", vec!["T"]);
+        add_opaque("RefCell", vec!["T"]);
+        add_opaque("Rc", vec!["T"]);
+        add_opaque("Arc", vec!["T"]);
+        add_opaque("Result", vec!["T", "E"]);
+        add_opaque("Option", vec!["T"]);
+        add_opaque("NonNull", vec!["T"]);
+        add_opaque("Vec", vec!["T"]);
+        add_opaque("HashMap", vec!["K", "V", "Hasher"]);
+        add_opaque("BTreeMap", vec!["K", "V"]);
+        add_opaque("HashSet", vec!["T"]);
+        add_opaque("BTreeSet", vec!["T"]);
+        add_opaque("LinkedList", vec!["T"]);
+        add_opaque("VecDeque", vec!["T"]);
+        add_opaque("ManuallyDrop", vec!["T"]);
+        add_opaque("MaybeUninit", vec!["T"]);
+    }
+
+    pub fn extend_with(&mut self, other: &Parse) {
+        self.constants.extend_with(&other.constants);
+        self.globals.extend_with(&other.globals);
+        self.enums.extend_with(&other.enums);
+        self.structs.extend_with(&other.structs);
+        self.unions.extend_with(&other.unions);
+        self.opaque_items.extend_with(&other.opaque_items);
+        self.typedefs.extend_with(&other.typedefs);
+        self.functions.extend_from_slice(&other.functions);
+    }
+
+    fn load_syn_crate_mod<'a>(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        items: &'a [syn::Item],
+    ) -> Vec<&'a syn::ItemMod> {
+        let mut impls_with_assoc_consts = Vec::new();
+        let mut nested_modules = Vec::new();
+
+        for item in items {
+            if item.should_skip_parsing() {
+                continue;
+            }
+            match item {
+                syn::Item::ForeignMod(ref item) => {
+                    self.load_syn_foreign_mod(
+                        config,
+                        binding_crate_name,
+                        crate_name,
+                        mod_cfg,
+                        item,
+                    );
+                }
+                syn::Item::Fn(ref item) => {
+                    self.load_syn_fn(config, binding_crate_name, crate_name, mod_cfg, item);
+                }
+                syn::Item::Const(ref item) => {
+                    self.load_syn_const(config, binding_crate_name, crate_name, mod_cfg, item);
+                }
+                syn::Item::Static(ref item) => {
+                    self.load_syn_static(config, binding_crate_name, crate_name, mod_cfg, item);
+                }
+                syn::Item::Struct(ref item) => {
+                    self.load_syn_struct(config, crate_name, mod_cfg, item);
+                }
+                syn::Item::Union(ref item) => {
+                    self.load_syn_union(config, crate_name, mod_cfg, item);
+                }
+                syn::Item::Enum(ref item) => {
+                    self.load_syn_enum(config, crate_name, mod_cfg, item);
+                }
+                syn::Item::Type(ref item) => {
+                    self.load_syn_ty(crate_name, mod_cfg, item);
+                }
+                syn::Item::Impl(ref item_impl) => {
+                    let has_assoc_const = item_impl
+                        .items
+                        .iter()
+                        .any(|item| matches!(item, syn::ImplItem::Const(_)));
+                    if has_assoc_const {
+                        impls_with_assoc_consts.push(item_impl);
+                    }
+
+                    if let syn::Type::Path(ref path) = *item_impl.self_ty {
+                        if let Some(type_name) = path.path.get_ident() {
+                            for method in item_impl.items.iter().filter_map(|item| match item {
+                                syn::ImplItem::Method(method) => Some(method),
+                                _ => None,
+                            }) {
+                                self.load_syn_method(
+                                    config,
+                                    binding_crate_name,
+                                    crate_name,
+                                    mod_cfg,
+                                    &Path::new(type_name.unraw().to_string()),
+                                    method,
+                                )
+                            }
+                        }
+                    }
+                }
+                syn::Item::Macro(ref item) => {
+                    self.load_builtin_macro(config, crate_name, mod_cfg, item)
+                }
+                syn::Item::Mod(ref item) => {
+                    nested_modules.push(item);
+                }
+                _ => {}
+            }
+        }
+
+        for item_impl in impls_with_assoc_consts {
+            self.load_syn_assoc_consts_from_impl(crate_name, mod_cfg, item_impl)
+        }
+
+        nested_modules
+    }
+
+    fn load_syn_assoc_consts_from_impl(
+        &mut self,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item_impl: &syn::ItemImpl,
+    ) {
+        let associated_constants = item_impl.items.iter().filter_map(|item| match item {
+            syn::ImplItem::Const(ref associated_constant) => Some(associated_constant),
+            _ => None,
+        });
+        self.load_syn_assoc_consts(
+            crate_name,
+            mod_cfg,
+            &item_impl.self_ty,
+            associated_constants,
+        );
+    }
+
+    /// Enters a `extern "C" { }` declaration and loads function declarations.
+    fn load_syn_foreign_mod(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemForeignMod,
+    ) {
+        if !item.abi.is_c() {
+            info!("Skip {} - (extern block must be extern C).", crate_name);
+            return;
+        }
+
+        for foreign_item in &item.items {
+            if let syn::ForeignItem::Fn(ref function) = *foreign_item {
+                if !config
+                    .parse
+                    .should_generate_top_level_item(crate_name, binding_crate_name)
+                {
+                    info!(
+                        "Skip {}::{} - (fn's outside of the binding crate are not used).",
+                        crate_name, &function.sig.ident
+                    );
+                    return;
+                }
+                let path = Path::new(function.sig.ident.unraw().to_string());
+                match Function::load(path, None, &function.sig, true, &function.attrs, mod_cfg) {
+                    Ok(func) => {
+                        info!("Take {}::{}.", crate_name, &function.sig.ident);
+
+                        self.functions.push(func);
+                    }
+                    Err(msg) => {
+                        error!(
+                            "Cannot use fn {}::{} ({}).",
+                            crate_name, &function.sig.ident, msg
+                        );
+                    }
+                }
+            }
+        }
+    }
+
+    /// Loads a `fn` declaration inside an `impl` block, if the type is a simple identifier
+    fn load_syn_method(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        self_type: &Path,
+        item: &syn::ImplItemMethod,
+    ) {
+        self.load_fn_declaration(
+            config,
+            binding_crate_name,
+            crate_name,
+            mod_cfg,
+            item,
+            Some(self_type),
+            &item.sig,
+            &item.vis,
+            &item.attrs,
+        )
+    }
+
+    /// Loads a `fn` declaration
+    fn load_syn_fn(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemFn,
+    ) {
+        self.load_fn_declaration(
+            config,
+            binding_crate_name,
+            crate_name,
+            mod_cfg,
+            item,
+            None,
+            &item.sig,
+            &item.vis,
+            &item.attrs,
+        );
+    }
+
+    #[allow(clippy::too_many_arguments)]
+    fn load_fn_declaration(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        named_symbol: &dyn SynItemFnHelpers,
+        self_type: Option<&Path>,
+        sig: &syn::Signature,
+        vis: &syn::Visibility,
+        attrs: &[syn::Attribute],
+    ) {
+        if !config
+            .parse
+            .should_generate_top_level_item(crate_name, binding_crate_name)
+        {
+            info!(
+                "Skip {}::{} - (fn's outside of the binding crate are not used).",
+                crate_name, &sig.ident
+            );
+            return;
+        }
+
+        let loggable_item_name = || {
+            let mut items = Vec::with_capacity(3);
+            items.push(crate_name.to_owned());
+            if let Some(ref self_type) = self_type {
+                items.push(self_type.to_string());
+            }
+            items.push(sig.ident.unraw().to_string());
+            items.join("::")
+        };
+
+        let is_extern_c = sig.abi.is_omitted() || sig.abi.is_c();
+        let exported_name = named_symbol.exported_name();
+
+        if let syn::Visibility::Public(_) = vis {
+            match (is_extern_c, exported_name) {
+                (true, Some(exported_name)) => {
+                    let path = Path::new(exported_name);
+                    match Function::load(path, self_type, sig, false, attrs, mod_cfg) {
+                        Ok(func) => {
+                            info!("Take {}.", loggable_item_name());
+                            self.functions.push(func);
+                        }
+                        Err(msg) => {
+                            error!("Cannot use fn {} ({}).", loggable_item_name(), msg);
+                        }
+                    }
+                }
+                (true, None) => {
+                    warn!(
+                        "Skipping {} - (not `no_mangle`, and has no `export_name` attribute)",
+                        loggable_item_name()
+                    );
+                }
+                (false, Some(_exported_name)) => {
+                    warn!("Skipping {} - (not `extern \"C\"`", loggable_item_name());
+                }
+                (false, None) => {}
+            }
+        } else {
+            match (is_extern_c, exported_name) {
+                (true, Some(..)) => {
+                    warn!(
+                        "Skipping {} - (not `pub` but is `extern \"C\"` and `no_mangle`)",
+                        loggable_item_name()
+                    );
+                }
+                (true, None) => {
+                    warn!(
+                        "Skipping {} - (not `pub` but is `extern \"C\"`)",
+                        loggable_item_name()
+                    );
+                }
+                (false, Some(..)) => {
+                    warn!(
+                        "Skipping {} - (not `pub` but is `no_mangle`)",
+                        loggable_item_name()
+                    );
+                }
+                (false, None) => {}
+            }
+        }
+    }
+
+    /// Loads associated `const` declarations
+    fn load_syn_assoc_consts<'a, I>(
+        &mut self,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        impl_ty: &syn::Type,
+        items: I,
+    ) where
+        I: IntoIterator<Item = &'a syn::ImplItemConst>,
+    {
+        let ty = match Type::load(impl_ty) {
+            Ok(ty) => ty,
+            Err(e) => {
+                warn!("Skipping associated constants for {:?}: {:?}", impl_ty, e);
+                return;
+            }
+        };
+
+        let ty = match ty {
+            Some(ty) => ty,
+            None => return,
+        };
+
+        let impl_path = match ty.get_root_path() {
+            Some(p) => p,
+            None => {
+                warn!(
+                    "Couldn't find path for {:?}, skipping associated constants",
+                    ty
+                );
+                return;
+            }
+        };
+
+        for item in items.into_iter() {
+            if let syn::Visibility::Public(_) = item.vis {
+            } else {
+                warn!("Skip {}::{} - (not `pub`).", crate_name, &item.ident);
+                return;
+            }
+
+            let path = Path::new(item.ident.unraw().to_string());
+            match Constant::load(
+                path,
+                mod_cfg,
+                &item.ty,
+                &item.expr,
+                &item.attrs,
+                Some(impl_path.clone()),
+            ) {
+                Ok(constant) => {
+                    info!("Take {}::{}::{}.", crate_name, impl_path, &item.ident);
+                    let mut any = false;
+                    self.structs.for_items_mut(&impl_path, |item| {
+                        any = true;
+                        item.add_associated_constant(constant.clone());
+                    });
+                    // Handle associated constants to other item types that are
+                    // not structs like enums or such as regular constants.
+                    if !any && !self.constants.try_insert(constant) {
+                        error!(
+                            "Conflicting name for constant {}::{}::{}.",
+                            crate_name, impl_path, &item.ident,
+                        );
+                    }
+                }
+                Err(msg) => {
+                    warn!("Skip {}::{} - ({})", crate_name, &item.ident, msg);
+                }
+            }
+        }
+    }
+
+    /// Loads a `const` declaration
+    fn load_syn_const(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemConst,
+    ) {
+        if !config
+            .parse
+            .should_generate_top_level_item(crate_name, binding_crate_name)
+        {
+            info!(
+                "Skip {}::{} - (const's outside of the binding crate are not used).",
+                crate_name, &item.ident
+            );
+            return;
+        }
+
+        if let syn::Visibility::Public(_) = item.vis {
+        } else {
+            warn!("Skip {}::{} - (not `pub`).", crate_name, &item.ident);
+            return;
+        }
+
+        let path = Path::new(item.ident.unraw().to_string());
+        match Constant::load(path, mod_cfg, &item.ty, &item.expr, &item.attrs, None) {
+            Ok(constant) => {
+                info!("Take {}::{}.", crate_name, &item.ident);
+
+                let full_name = constant.path.clone();
+                if !self.constants.try_insert(constant) {
+                    error!("Conflicting name for constant {}", full_name);
+                }
+            }
+            Err(msg) => {
+                warn!("Skip {}::{} - ({})", crate_name, &item.ident, msg);
+            }
+        }
+    }
+
+    /// Loads a `static` declaration
+    fn load_syn_static(
+        &mut self,
+        config: &Config,
+        binding_crate_name: &str,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemStatic,
+    ) {
+        if !config
+            .parse
+            .should_generate_top_level_item(crate_name, binding_crate_name)
+        {
+            info!(
+                "Skip {}::{} - (static's outside of the binding crate are not used).",
+                crate_name, &item.ident
+            );
+            return;
+        }
+
+        if let syn::Visibility::Public(_) = item.vis {
+            if item.is_no_mangle() {
+                match Static::load(item, mod_cfg) {
+                    Ok(constant) => {
+                        info!("Take {}::{}.", crate_name, &item.ident);
+
+                        self.globals.try_insert(constant);
+                    }
+                    Err(msg) => {
+                        warn!("Skip {}::{} - ({})", crate_name, &item.ident, msg);
+                    }
+                }
+            }
+        }
+
+        // TODO
+        if let syn::Visibility::Public(_) = item.vis {
+        } else {
+            warn!("Skip {}::{} - (not `pub`).", crate_name, &item.ident);
+        }
+        if !item.is_no_mangle() {
+            warn!("Skip {}::{} - (not `no_mangle`).", crate_name, &item.ident);
+        }
+    }
+
+    /// Loads a `struct` declaration
+    fn load_syn_struct(
+        &mut self,
+        config: &Config,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemStruct,
+    ) {
+        match Struct::load(&config.layout, item, mod_cfg) {
+            Ok(st) => {
+                info!("Take {}::{}.", crate_name, &item.ident);
+                self.structs.try_insert(st);
+            }
+            Err(msg) => {
+                info!("Take {}::{} - opaque ({}).", crate_name, &item.ident, msg);
+                let path = Path::new(item.ident.unraw().to_string());
+                self.opaque_items.try_insert(
+                    OpaqueItem::load(path, &item.generics, &item.attrs, mod_cfg).unwrap(),
+                );
+            }
+        }
+    }
+
+    /// Loads a `union` declaration
+    fn load_syn_union(
+        &mut self,
+        config: &Config,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemUnion,
+    ) {
+        match Union::load(&config.layout, item, mod_cfg) {
+            Ok(st) => {
+                info!("Take {}::{}.", crate_name, &item.ident);
+
+                self.unions.try_insert(st);
+            }
+            Err(msg) => {
+                info!("Take {}::{} - opaque ({}).", crate_name, &item.ident, msg);
+                let path = Path::new(item.ident.unraw().to_string());
+                self.opaque_items.try_insert(
+                    OpaqueItem::load(path, &item.generics, &item.attrs, mod_cfg).unwrap(),
+                );
+            }
+        }
+    }
+
+    /// Loads a `enum` declaration
+    fn load_syn_enum(
+        &mut self,
+        config: &Config,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemEnum,
+    ) {
+        match Enum::load(item, mod_cfg, config) {
+            Ok(en) => {
+                info!("Take {}::{}.", crate_name, &item.ident);
+                self.enums.try_insert(en);
+            }
+            Err(msg) => {
+                info!("Take {}::{} - opaque ({}).", crate_name, &item.ident, msg);
+                let path = Path::new(item.ident.unraw().to_string());
+                self.opaque_items.try_insert(
+                    OpaqueItem::load(path, &item.generics, &item.attrs, mod_cfg).unwrap(),
+                );
+            }
+        }
+    }
+
+    /// Loads a `type` declaration
+    fn load_syn_ty(&mut self, crate_name: &str, mod_cfg: Option<&Cfg>, item: &syn::ItemType) {
+        match Typedef::load(item, mod_cfg) {
+            Ok(st) => {
+                info!("Take {}::{}.", crate_name, &item.ident);
+
+                self.typedefs.try_insert(st);
+            }
+            Err(msg) => {
+                info!("Take {}::{} - opaque ({}).", crate_name, &item.ident, msg);
+                let path = Path::new(item.ident.unraw().to_string());
+                self.opaque_items.try_insert(
+                    OpaqueItem::load(path, &item.generics, &item.attrs, mod_cfg).unwrap(),
+                );
+            }
+        }
+    }
+
+    fn load_builtin_macro(
+        &mut self,
+        config: &Config,
+        crate_name: &str,
+        mod_cfg: Option<&Cfg>,
+        item: &syn::ItemMacro,
+    ) {
+        let name = match item.mac.path.segments.last() {
+            Some(n) => n.ident.unraw().to_string(),
+            None => return,
+        };
+
+        if name != "bitflags" || !config.macro_expansion.bitflags {
+            return;
+        }
+
+        let bitflags = match bitflags::parse(item.mac.tokens.clone()) {
+            Ok(b) => b,
+            Err(e) => {
+                warn!("Failed to parse bitflags invocation: {:?}", e);
+                return;
+            }
+        };
+
+        let (struct_, impl_) = bitflags.expand();
+        self.load_syn_struct(config, crate_name, mod_cfg, &struct_);
+        // We know that the expansion will only reference `struct_`, so it's
+        // fine to just do it here instead of deferring it like we do with the
+        // other calls to this function.
+        self.load_syn_assoc_consts_from_impl(crate_name, mod_cfg, &impl_);
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/rename.rs b/cbindgen-0.24.5/src/bindgen/rename.rs
new file mode 100644
index 0000000..e58b7a5
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/rename.rs
@@ -0,0 +1,145 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::borrow::Cow;
+use std::str::FromStr;
+
+/// The type of identifier to be renamed.
+#[derive(Debug, Clone, Copy)]
+pub enum IdentifierType<'a> {
+    StructMember,
+    EnumVariant { prefix: &'a str },
+    FunctionArg,
+    Type,
+    Enum,
+}
+
+impl<'a> IdentifierType<'a> {
+    fn to_str(self) -> &'static str {
+        match self {
+            IdentifierType::StructMember => "m",
+            IdentifierType::EnumVariant { .. } => "",
+            IdentifierType::FunctionArg => "a",
+            IdentifierType::Type => "",
+            IdentifierType::Enum => "",
+        }
+    }
+}
+
+/// A rule to apply to an identifier when generating bindings.
+#[derive(Debug, Clone, Copy)]
+pub enum RenameRule {
+    /// Do not apply any renaming. The default.
+    None,
+    /// Converts the identifier to PascalCase and adds a context dependent prefix
+    GeckoCase,
+    /// Converts the identifier to lower case.
+    LowerCase,
+    /// Converts the identifier to upper case.
+    UpperCase,
+    /// Converts the identifier to PascalCase.
+    PascalCase,
+    /// Converts the identifier to camelCase.
+    CamelCase,
+    /// Converts the identifier to snake_case.
+    SnakeCase,
+    /// Converts the identifier to SCREAMING_SNAKE_CASE.
+    ScreamingSnakeCase,
+    /// Converts the identifier to SCREAMING_SNAKE_CASE and prefixes enum variants
+    /// with the enum name.
+    QualifiedScreamingSnakeCase,
+}
+
+impl RenameRule {
+    pub(crate) fn not_none(self) -> Option<Self> {
+        match self {
+            RenameRule::None => None,
+            other => Some(other),
+        }
+    }
+
+    /// Applies the rename rule to a string
+    pub fn apply<'a>(self, text: &'a str, context: IdentifierType) -> Cow<'a, str> {
+        use heck::*;
+
+        if text.is_empty() {
+            return Cow::Borrowed(text);
+        }
+
+        Cow::Owned(match self {
+            RenameRule::None => return Cow::Borrowed(text),
+            RenameRule::GeckoCase => context.to_str().to_owned() + &text.to_upper_camel_case(),
+            RenameRule::LowerCase => text.to_lowercase(),
+            RenameRule::UpperCase => text.to_uppercase(),
+            RenameRule::PascalCase => text.to_pascal_case(),
+            RenameRule::CamelCase => text.to_lower_camel_case(),
+            RenameRule::SnakeCase => text.to_snake_case(),
+            RenameRule::ScreamingSnakeCase => text.to_shouty_snake_case(),
+            RenameRule::QualifiedScreamingSnakeCase => {
+                let mut result = String::new();
+
+                if let IdentifierType::EnumVariant { prefix } = context {
+                    result.push_str(
+                        &RenameRule::ScreamingSnakeCase.apply(prefix, IdentifierType::Enum),
+                    );
+                    result.push('_');
+                }
+
+                result.push_str(&RenameRule::ScreamingSnakeCase.apply(text, context));
+                result
+            }
+        })
+    }
+}
+
+impl Default for RenameRule {
+    fn default() -> RenameRule {
+        RenameRule::None
+    }
+}
+
+impl FromStr for RenameRule {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<RenameRule, Self::Err> {
+        match s {
+            "none" => Ok(RenameRule::None),
+            "None" => Ok(RenameRule::None),
+
+            "mGeckoCase" => Ok(RenameRule::GeckoCase),
+            "GeckoCase" => Ok(RenameRule::GeckoCase),
+            "gecko_case" => Ok(RenameRule::GeckoCase),
+
+            "lowercase" => Ok(RenameRule::LowerCase),
+            "LowerCase" => Ok(RenameRule::LowerCase),
+            "lower_case" => Ok(RenameRule::LowerCase),
+
+            "UPPERCASE" => Ok(RenameRule::UpperCase),
+            "UpperCase" => Ok(RenameRule::UpperCase),
+            "upper_case" => Ok(RenameRule::UpperCase),
+
+            "PascalCase" => Ok(RenameRule::PascalCase),
+            "pascal_case" => Ok(RenameRule::PascalCase),
+
+            "camelCase" => Ok(RenameRule::CamelCase),
+            "CamelCase" => Ok(RenameRule::CamelCase),
+            "camel_case" => Ok(RenameRule::CamelCase),
+
+            "snake_case" => Ok(RenameRule::SnakeCase),
+            "SnakeCase" => Ok(RenameRule::SnakeCase),
+
+            "SCREAMING_SNAKE_CASE" => Ok(RenameRule::ScreamingSnakeCase),
+            "ScreamingSnakeCase" => Ok(RenameRule::ScreamingSnakeCase),
+            "screaming_snake_case" => Ok(RenameRule::ScreamingSnakeCase),
+
+            "QUALIFIED_SCREAMING_SNAKE_CASE" => Ok(RenameRule::QualifiedScreamingSnakeCase),
+            "QualifiedScreamingSnakeCase" => Ok(RenameRule::QualifiedScreamingSnakeCase),
+            "qualified_screaming_snake_case" => Ok(RenameRule::QualifiedScreamingSnakeCase),
+
+            _ => Err(format!("Unrecognized RenameRule: '{}'.", s)),
+        }
+    }
+}
+
+deserialize_enum_str!(RenameRule);
diff --git a/cbindgen-0.24.5/src/bindgen/reserved.rs b/cbindgen-0.24.5/src/bindgen/reserved.rs
new file mode 100644
index 0000000..4983f99
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/reserved.rs
@@ -0,0 +1,91 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/// Taken from `https://en.cppreference.com/w/cpp/keyword`
+/// Some experimental keywords were filtered out and the resulting list was
+/// sorted using a rust program.
+const RESERVED_KEYWORDS: &[&str] = &[
+    "alignas",
+    "alignof",
+    "auto",
+    "bool",
+    "break",
+    "case",
+    "catch",
+    "char",
+    "char16_t",
+    "char32_t",
+    "char8_t",
+    "class",
+    "const",
+    "const_cast",
+    "consteval",
+    "constexpr",
+    "continue",
+    "decltype",
+    "default",
+    "delete",
+    "do",
+    "double",
+    "dynamic_cast",
+    "else",
+    "enum",
+    "explicit",
+    "export",
+    "extern",
+    "false",
+    "float",
+    "for",
+    "friend",
+    "goto",
+    "if",
+    "inline",
+    "int",
+    "long",
+    "mutable",
+    "namespace",
+    "new",
+    "noexcept",
+    "nullptr",
+    "operator",
+    "private",
+    "protected",
+    "public",
+    "register",
+    "reinterpret_cast",
+    "return",
+    "short",
+    "signed",
+    "sizeof",
+    "static",
+    "static_assert",
+    "static_cast",
+    "struct",
+    "switch",
+    "template",
+    "this",
+    "thread_local",
+    "throw",
+    "true",
+    "try",
+    "typedef",
+    "typename",
+    "union",
+    "unsigned",
+    "using",
+    "virtual",
+    "void",
+    "volatile",
+    "wchar_t",
+    "while",
+];
+
+pub fn escape(rust_identifier: &mut String) {
+    if RESERVED_KEYWORDS
+        .binary_search(&rust_identifier.as_ref())
+        .is_ok()
+    {
+        rust_identifier.push('_');
+    }
+}
diff --git a/cbindgen-0.24.5/src/bindgen/utilities.rs b/cbindgen-0.24.5/src/bindgen/utilities.rs
new file mode 100644
index 0000000..ae3ee60
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/utilities.rs
@@ -0,0 +1,295 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#![allow(clippy::redundant_closure_call)]
+
+use syn::ext::IdentExt;
+
+pub trait IterHelpers: Iterator {
+    fn try_skip_map<F, T, E>(&mut self, f: F) -> Result<Vec<T>, E>
+    where
+        F: FnMut(&Self::Item) -> Result<Option<T>, E>;
+}
+
+impl<I> IterHelpers for I
+where
+    I: Iterator,
+{
+    fn try_skip_map<F, T, E>(&mut self, mut f: F) -> Result<Vec<T>, E>
+    where
+        F: FnMut(&Self::Item) -> Result<Option<T>, E>,
+    {
+        let mut out = Vec::new();
+        for item in self {
+            if let Some(x) = f(&item)? {
+                out.push(x);
+            }
+        }
+        Ok(out)
+    }
+}
+
+pub trait SynItemFnHelpers: SynAttributeHelpers {
+    fn exported_name(&self) -> Option<String>;
+}
+
+impl SynItemFnHelpers for syn::ItemFn {
+    fn exported_name(&self) -> Option<String> {
+        self.attrs
+            .attr_name_value_lookup("export_name")
+            .or_else(|| {
+                if self.is_no_mangle() {
+                    Some(self.sig.ident.unraw().to_string())
+                } else {
+                    None
+                }
+            })
+    }
+}
+
+impl SynItemFnHelpers for syn::ImplItemMethod {
+    fn exported_name(&self) -> Option<String> {
+        self.attrs
+            .attr_name_value_lookup("export_name")
+            .or_else(|| {
+                if self.is_no_mangle() {
+                    Some(self.sig.ident.unraw().to_string())
+                } else {
+                    None
+                }
+            })
+    }
+}
+
+/// Returns whether this attribute causes us to skip at item. This basically
+/// checks for `#[cfg(test)]`, `#[test]`, `/// cbindgen::ignore` and
+/// variations thereof.
+fn is_skip_item_attr(attr: &syn::Meta) -> bool {
+    match *attr {
+        syn::Meta::Path(ref path) => {
+            // TODO(emilio): It'd be great if rustc allowed us to use a syntax
+            // like `#[cbindgen::ignore]` or such.
+            path.is_ident("test")
+        }
+        syn::Meta::List(ref list) => {
+            if !list.path.is_ident("cfg") {
+                return false;
+            }
+            list.nested.iter().any(|nested| match *nested {
+                syn::NestedMeta::Meta(ref meta) => is_skip_item_attr(meta),
+                syn::NestedMeta::Lit(..) => false,
+            })
+        }
+        syn::Meta::NameValue(ref name_value) => {
+            if name_value.path.is_ident("doc") {
+                if let syn::Lit::Str(ref content) = name_value.lit {
+                    // FIXME(emilio): Maybe should use the general annotation
+                    // mechanism, but it seems overkill for this.
+                    if content.value().trim() == "cbindgen:ignore" {
+                        return true;
+                    }
+                }
+            }
+            false
+        }
+    }
+}
+
+pub trait SynAttributeHelpers {
+    /// Returns the list of attributes for an item.
+    fn attrs(&self) -> &[syn::Attribute];
+
+    /// Searches for attributes like `#[test]`.
+    /// Example:
+    /// - `item.has_attr_word("test")` => `#[test]`
+    fn has_attr_word(&self, name: &str) -> bool {
+        self.attrs()
+            .iter()
+            .filter_map(|x| x.parse_meta().ok())
+            .any(|attr| {
+                if let syn::Meta::Path(ref path) = attr {
+                    path.is_ident(name)
+                } else {
+                    false
+                }
+            })
+    }
+
+    fn is_no_mangle(&self) -> bool {
+        self.has_attr_word("no_mangle")
+    }
+
+    /// Sees whether we should skip parsing a given item.
+    fn should_skip_parsing(&self) -> bool {
+        for attr in self.attrs() {
+            let meta = match attr.parse_meta() {
+                Ok(attr) => attr,
+                Err(..) => return false,
+            };
+            if is_skip_item_attr(&meta) {
+                return true;
+            }
+        }
+
+        false
+    }
+
+    fn attr_name_value_lookup(&self, name: &str) -> Option<String> {
+        self.attrs()
+            .iter()
+            .filter_map(|attr| {
+                let attr = attr.parse_meta().ok()?;
+                if let syn::Meta::NameValue(syn::MetaNameValue {
+                    path,
+                    lit: syn::Lit::Str(lit),
+                    ..
+                }) = attr
+                {
+                    if path.is_ident(name) {
+                        return Some(lit.value());
+                    }
+                }
+                None
+            })
+            .next()
+    }
+
+    fn get_comment_lines(&self) -> Vec<String> {
+        let mut comment = Vec::new();
+
+        for attr in self.attrs() {
+            if attr.style == syn::AttrStyle::Outer {
+                if let Ok(syn::Meta::NameValue(syn::MetaNameValue {
+                    path,
+                    lit: syn::Lit::Str(content),
+                    ..
+                })) = attr.parse_meta()
+                {
+                    if path.is_ident("doc") {
+                        comment.extend(split_doc_attr(&content.value()));
+                    }
+                }
+            }
+        }
+
+        comment
+    }
+}
+
+macro_rules! syn_item_match_helper {
+    ($s:ident => has_attrs: |$i:ident| $a:block, otherwise: || $b:block) => {
+        match *$s {
+            syn::Item::Const(ref $i) => $a,
+            syn::Item::Enum(ref $i) => $a,
+            syn::Item::ExternCrate(ref $i) => $a,
+            syn::Item::Fn(ref $i) => $a,
+            syn::Item::ForeignMod(ref $i) => $a,
+            syn::Item::Impl(ref $i) => $a,
+            syn::Item::Macro(ref $i) => $a,
+            syn::Item::Macro2(ref $i) => $a,
+            syn::Item::Mod(ref $i) => $a,
+            syn::Item::Static(ref $i) => $a,
+            syn::Item::Struct(ref $i) => $a,
+            syn::Item::Trait(ref $i) => $a,
+            syn::Item::Type(ref $i) => $a,
+            syn::Item::Union(ref $i) => $a,
+            syn::Item::Use(ref $i) => $a,
+            syn::Item::TraitAlias(ref $i) => $a,
+            syn::Item::Verbatim(_) => $b,
+            _ => panic!("Unhandled syn::Item:  {:?}", $s),
+        }
+    };
+}
+
+impl SynAttributeHelpers for syn::Item {
+    fn attrs(&self) -> &[syn::Attribute] {
+        syn_item_match_helper!(self =>
+            has_attrs: |item| { &item.attrs },
+            otherwise: || { &[] }
+        )
+    }
+}
+
+macro_rules! impl_syn_item_helper {
+    ($t:ty) => {
+        impl SynAttributeHelpers for $t {
+            fn attrs(&self) -> &[syn::Attribute] {
+                &self.attrs
+            }
+        }
+    };
+}
+
+impl_syn_item_helper!(syn::ItemExternCrate);
+impl_syn_item_helper!(syn::ItemUse);
+impl_syn_item_helper!(syn::ItemStatic);
+impl_syn_item_helper!(syn::ItemConst);
+impl_syn_item_helper!(syn::ItemFn);
+impl_syn_item_helper!(syn::ImplItemMethod);
+impl_syn_item_helper!(syn::ItemMod);
+impl_syn_item_helper!(syn::ItemForeignMod);
+impl_syn_item_helper!(syn::ItemType);
+impl_syn_item_helper!(syn::ItemStruct);
+impl_syn_item_helper!(syn::ItemEnum);
+impl_syn_item_helper!(syn::ItemUnion);
+impl_syn_item_helper!(syn::ItemTrait);
+impl_syn_item_helper!(syn::ItemImpl);
+impl_syn_item_helper!(syn::ItemMacro);
+impl_syn_item_helper!(syn::ItemMacro2);
+impl_syn_item_helper!(syn::ItemTraitAlias);
+
+/// Helper function for accessing Abi information
+pub trait SynAbiHelpers {
+    fn is_c(&self) -> bool;
+    fn is_omitted(&self) -> bool;
+}
+
+impl SynAbiHelpers for Option<syn::Abi> {
+    fn is_c(&self) -> bool {
+        if let Some(ref abi) = *self {
+            if let Some(ref lit_string) = abi.name {
+                return lit_string.value() == "C";
+            }
+        }
+        false
+    }
+    fn is_omitted(&self) -> bool {
+        if let Some(ref abi) = *self {
+            abi.name.is_none()
+        } else {
+            false
+        }
+    }
+}
+
+impl SynAbiHelpers for syn::Abi {
+    fn is_c(&self) -> bool {
+        if let Some(ref lit_string) = self.name {
+            lit_string.value() == "C"
+        } else {
+            false
+        }
+    }
+    fn is_omitted(&self) -> bool {
+        self.name.is_none()
+    }
+}
+
+impl SynAttributeHelpers for [syn::Attribute] {
+    fn attrs(&self) -> &[syn::Attribute] {
+        self
+    }
+}
+
+fn split_doc_attr(input: &str) -> Vec<String> {
+    input
+        // Convert two newline (indicate "new paragraph") into two line break.
+        .replace("\n\n", "  \n  \n")
+        // Convert newline after two spaces (indicate "line break") into line break.
+        .split("  \n")
+        // Convert single newline (indicate hard-wrapped) into space.
+        .map(|s| s.replace('\n', " "))
+        .map(|s| s.trim_end().to_string())
+        .collect()
+}
diff --git a/cbindgen-0.24.5/src/bindgen/writer.rs b/cbindgen-0.24.5/src/bindgen/writer.rs
new file mode 100644
index 0000000..eed6917
--- /dev/null
+++ b/cbindgen-0.24.5/src/bindgen/writer.rs
@@ -0,0 +1,258 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::cmp;
+use std::io;
+use std::io::Write;
+
+use crate::bindgen::config::{Braces, Config, Language};
+use crate::bindgen::Bindings;
+
+/// A type of way to format a list.
+pub enum ListType<'a> {
+    /// Join each adjacent item with a str.
+    Join(&'a str),
+    /// End each item with a str.
+    Cap(&'a str),
+}
+
+/// A utility wrapper to write unbuffered data and correctly adjust positions.
+struct InnerWriter<'a, 'b: 'a, F: 'a + Write>(&'a mut SourceWriter<'b, F>);
+
+impl<'a, 'b, F: Write> Write for InnerWriter<'a, 'b, F> {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        let writer = &mut self.0;
+
+        if !writer.line_started {
+            for _ in 0..writer.spaces() {
+                write!(writer.out, " ").unwrap();
+            }
+            writer.line_started = true;
+            writer.line_length += writer.spaces();
+        }
+
+        let written = writer.out.write(buf)?;
+        writer.line_length += written;
+        writer.max_line_length = cmp::max(writer.max_line_length, writer.line_length);
+        Ok(written)
+    }
+
+    fn flush(&mut self) -> io::Result<()> {
+        self.0.out.flush()
+    }
+}
+
+/// A utility writer for generating code easier.
+pub struct SourceWriter<'a, F: Write> {
+    out: F,
+    bindings: &'a Bindings,
+    spaces: Vec<usize>,
+    line_started: bool,
+    line_length: usize,
+    line_number: usize,
+    max_line_length: usize,
+}
+
+pub type MeasureWriter<'a> = SourceWriter<'a, &'a mut Vec<u8>>;
+
+impl<'a, F: Write> SourceWriter<'a, F> {
+    pub fn new(out: F, bindings: &'a Bindings) -> Self {
+        SourceWriter {
+            out,
+            bindings,
+            spaces: vec![0],
+            line_started: false,
+            line_length: 0,
+            line_number: 1,
+            max_line_length: 0,
+        }
+    }
+
+    pub fn bindings(&self) -> &Bindings {
+        self.bindings
+    }
+
+    /// Takes a function that writes source and returns the maximum line length
+    /// written.
+    pub fn try_write<T>(&mut self, func: T, max_line_length: usize) -> bool
+    where
+        T: Fn(&mut MeasureWriter),
+    {
+        if self.line_length > max_line_length {
+            return false;
+        }
+
+        let mut buffer = Vec::new();
+        let line_length = {
+            let mut measurer = SourceWriter {
+                out: &mut buffer,
+                bindings: self.bindings,
+                spaces: self.spaces.clone(),
+                line_started: self.line_started,
+                line_length: self.line_length,
+                line_number: self.line_number,
+                max_line_length: self.line_length,
+            };
+
+            func(&mut measurer);
+
+            measurer.max_line_length
+        };
+
+        if line_length > max_line_length {
+            return false;
+        }
+        // We don't want the extra alignment, it's already accounted for by the
+        // measurer.
+        self.line_started = true;
+        InnerWriter(self).write_all(&buffer).unwrap();
+        true
+    }
+
+    fn spaces(&self) -> usize {
+        *self.spaces.last().unwrap()
+    }
+
+    pub fn push_set_spaces(&mut self, spaces: usize) {
+        self.spaces.push(spaces);
+    }
+
+    pub fn pop_set_spaces(&mut self) {
+        self.pop_tab()
+    }
+
+    pub fn line_length_for_align(&self) -> usize {
+        if self.line_started {
+            self.line_length
+        } else {
+            self.line_length + self.spaces()
+        }
+    }
+
+    pub fn push_tab(&mut self) {
+        let spaces = self.spaces() - (self.spaces() % self.bindings.config.tab_width)
+            + self.bindings.config.tab_width;
+        self.spaces.push(spaces);
+    }
+
+    pub fn pop_tab(&mut self) {
+        assert!(!self.spaces.is_empty());
+        self.spaces.pop();
+    }
+
+    pub fn new_line(&mut self) {
+        self.out
+            .write_all(self.bindings.config.line_endings.as_str().as_bytes())
+            .unwrap();
+        self.line_started = false;
+        self.line_length = 0;
+        self.line_number += 1;
+    }
+
+    pub fn new_line_if_not_start(&mut self) {
+        if self.line_number != 1 {
+            self.new_line();
+        }
+    }
+
+    pub fn open_brace(&mut self) {
+        match self.bindings.config.language {
+            Language::Cxx | Language::C => match self.bindings.config.braces {
+                Braces::SameLine => {
+                    self.write(" {");
+                    self.push_tab();
+                    self.new_line();
+                }
+                Braces::NextLine => {
+                    self.new_line();
+                    self.write("{");
+                    self.push_tab();
+                    self.new_line();
+                }
+            },
+            Language::Cython => {
+                self.write(":");
+                self.new_line();
+                self.push_tab();
+            }
+        }
+    }
+
+    pub fn close_brace(&mut self, semicolon: bool) {
+        self.pop_tab();
+        match self.bindings.config.language {
+            Language::Cxx | Language::C => {
+                self.new_line();
+                if semicolon {
+                    self.write("};");
+                } else {
+                    self.write("}");
+                }
+            }
+            Language::Cython => {}
+        }
+    }
+
+    pub fn write(&mut self, text: &'static str) {
+        write!(self, "{}", text);
+    }
+
+    pub fn write_raw_block(&mut self, block: &str) {
+        self.line_started = true;
+        write!(self, "{}", block);
+    }
+
+    pub fn write_fmt(&mut self, fmt: ::std::fmt::Arguments) {
+        InnerWriter(self).write_fmt(fmt).unwrap();
+    }
+
+    pub fn write_horizontal_source_list<S: Source>(
+        &mut self,
+        items: &[S],
+        list_type: ListType<'_>,
+    ) {
+        for (i, item) in items.iter().enumerate() {
+            item.write(&self.bindings.config, self);
+
+            match list_type {
+                ListType::Join(text) => {
+                    if i != items.len() - 1 {
+                        write!(self, "{}", text);
+                    }
+                }
+                ListType::Cap(text) => {
+                    write!(self, "{}", text);
+                }
+            }
+        }
+    }
+
+    pub fn write_vertical_source_list<S: Source>(&mut self, items: &[S], list_type: ListType<'_>) {
+        let align_length = self.line_length_for_align();
+        self.push_set_spaces(align_length);
+        for (i, item) in items.iter().enumerate() {
+            item.write(&self.bindings.config, self);
+
+            match list_type {
+                ListType::Join(text) => {
+                    if i != items.len() - 1 {
+                        write!(self, "{}", text);
+                    }
+                }
+                ListType::Cap(text) => {
+                    write!(self, "{}", text);
+                }
+            }
+
+            if i != items.len() - 1 {
+                self.new_line();
+            }
+        }
+        self.pop_tab();
+    }
+}
+
+pub trait Source {
+    fn write<F: Write>(&self, config: &Config, _: &mut SourceWriter<F>);
+}
diff --git a/cbindgen-0.24.5/src/lib.rs b/cbindgen-0.24.5/src/lib.rs
new file mode 100644
index 0000000..f98f4fc
--- /dev/null
+++ b/cbindgen-0.24.5/src/lib.rs
@@ -0,0 +1,41 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#[macro_use]
+extern crate log;
+extern crate proc_macro2;
+#[macro_use]
+extern crate serde;
+extern crate serde_json;
+#[macro_use]
+extern crate quote;
+#[macro_use]
+extern crate syn;
+extern crate toml;
+
+mod bindgen;
+
+pub use crate::bindgen::*;
+
+use std::path::Path;
+
+/// A utility function for build scripts to generate bindings for a crate, using
+/// a `cbindgen.toml` if it exists.
+pub fn generate<P: AsRef<Path>>(crate_dir: P) -> Result<Bindings, Error> {
+    let config = Config::from_root_or_default(crate_dir.as_ref());
+
+    generate_with_config(crate_dir, config)
+}
+
+/// A utility function for build scripts to generate bindings for a crate with a
+/// custom config.
+pub fn generate_with_config<P: AsRef<Path>>(
+    crate_dir: P,
+    config: Config,
+) -> Result<Bindings, Error> {
+    Builder::new()
+        .with_config(config)
+        .with_crate(crate_dir)
+        .generate()
+}
diff --git a/cbindgen-0.24.5/src/logging.rs b/cbindgen-0.24.5/src/logging.rs
new file mode 100644
index 0000000..3b698c8
--- /dev/null
+++ b/cbindgen-0.24.5/src/logging.rs
@@ -0,0 +1,105 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::io;
+use std::io::Write;
+
+use log::*;
+
+pub struct TraceLogger;
+pub struct WarnLogger;
+pub struct InfoLogger;
+pub struct ErrorLogger;
+
+impl TraceLogger {
+    pub fn init() -> Result<(), SetLoggerError> {
+        log::set_logger(&InfoLogger)?;
+        log::set_max_level(LevelFilter::Trace);
+        Ok(())
+    }
+}
+impl log::Log for TraceLogger {
+    fn enabled(&self, metadata: &Metadata) -> bool {
+        metadata.level() <= Level::Trace
+    }
+
+    fn log(&self, record: &Record) {
+        if self.enabled(record.metadata()) {
+            eprintln!("{}: {}", record.level(), record.args());
+        }
+    }
+
+    fn flush(&self) {
+        io::stderr().flush().unwrap();
+    }
+}
+
+impl WarnLogger {
+    pub fn init() -> Result<(), SetLoggerError> {
+        log::set_logger(&InfoLogger)?;
+        log::set_max_level(LevelFilter::Warn);
+        Ok(())
+    }
+}
+impl log::Log for WarnLogger {
+    fn enabled(&self, metadata: &Metadata) -> bool {
+        metadata.level() <= Level::Warn
+    }
+
+    fn log(&self, record: &Record) {
+        if self.enabled(record.metadata()) {
+            eprintln!("{}: {}", record.level(), record.args());
+        }
+    }
+
+    fn flush(&self) {
+        io::stderr().flush().unwrap();
+    }
+}
+
+impl ErrorLogger {
+    pub fn init() -> Result<(), SetLoggerError> {
+        log::set_logger(&InfoLogger)?;
+        log::set_max_level(LevelFilter::Error);
+        Ok(())
+    }
+}
+impl log::Log for ErrorLogger {
+    fn enabled(&self, metadata: &Metadata) -> bool {
+        metadata.level() <= Level::Error
+    }
+
+    fn log(&self, record: &Record) {
+        if self.enabled(record.metadata()) {
+            eprintln!("{}: {}", record.level(), record.args());
+        }
+    }
+
+    fn flush(&self) {
+        io::stderr().flush().unwrap();
+    }
+}
+
+impl InfoLogger {
+    pub fn init() -> Result<(), SetLoggerError> {
+        log::set_logger(&InfoLogger)?;
+        log::set_max_level(LevelFilter::Info);
+        Ok(())
+    }
+}
+impl log::Log for InfoLogger {
+    fn enabled(&self, metadata: &Metadata) -> bool {
+        metadata.level() <= Level::Info
+    }
+
+    fn log(&self, record: &Record) {
+        if self.enabled(record.metadata()) {
+            eprintln!("{}: {}", record.level(), record.args());
+        }
+    }
+
+    fn flush(&self) {
+        io::stderr().flush().unwrap();
+    }
+}
diff --git a/cbindgen-0.24.5/src/main.rs b/cbindgen-0.24.5/src/main.rs
new file mode 100644
index 0000000..812366f
--- /dev/null
+++ b/cbindgen-0.24.5/src/main.rs
@@ -0,0 +1,314 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::env;
+use std::io;
+use std::path::{Path, PathBuf};
+use std::str::FromStr;
+
+extern crate clap;
+#[macro_use]
+extern crate log;
+extern crate proc_macro2;
+#[macro_use]
+extern crate serde;
+extern crate serde_json;
+#[macro_use]
+extern crate quote;
+#[macro_use]
+extern crate syn;
+extern crate toml;
+
+use clap::{Arg, ArgMatches, Command};
+
+mod bindgen;
+mod logging;
+
+use crate::bindgen::{Bindings, Builder, Cargo, Config, Error, Profile, Style};
+
+fn apply_config_overrides(config: &mut Config, matches: &ArgMatches) {
+    // We allow specifying a language to override the config default. This is
+    // used by compile-tests.
+    if let Some(lang) = matches.value_of("lang") {
+        config.language = match lang.parse() {
+            Ok(lang) => lang,
+            Err(reason) => {
+                error!("{}", reason);
+                return;
+            }
+        }
+    }
+
+    if matches.is_present("cpp-compat") {
+        config.cpp_compat = true;
+    }
+
+    if matches.is_present("only-target-dependencies") {
+        config.only_target_dependencies = true;
+    }
+
+    if let Some(style) = matches.value_of("style") {
+        config.style = match style {
+            "Both" => Style::Both,
+            "both" => Style::Both,
+            "Tag" => Style::Tag,
+            "tag" => Style::Tag,
+            "Type" => Style::Type,
+            "type" => Style::Type,
+            _ => {
+                error!("Unknown style specified.");
+                return;
+            }
+        }
+    }
+
+    if let Some(profile) = matches.value_of("profile") {
+        config.parse.expand.profile = match Profile::from_str(profile) {
+            Ok(p) => p,
+            Err(e) => {
+                error!("{}", e);
+                return;
+            }
+        }
+    }
+
+    if matches.is_present("d") {
+        config.parse.parse_deps = true;
+    }
+}
+
+fn load_bindings(input: &Path, matches: &ArgMatches) -> Result<Bindings, Error> {
+    // If a file is specified then we load it as a single source
+    if !input.is_dir() {
+        // Load any config specified or search in the input directory
+        let mut config = match matches.value_of("config") {
+            Some(c) => Config::from_file(c).unwrap(),
+            None => Config::from_root_or_default(input),
+        };
+
+        apply_config_overrides(&mut config, matches);
+
+        return Builder::new()
+            .with_config(config)
+            .with_src(input)
+            .generate();
+    }
+
+    // We have to load a whole crate, so we use cargo to gather metadata
+    let lib = Cargo::load(
+        input,
+        matches.value_of("lockfile"),
+        matches.value_of("crate"),
+        true,
+        matches.is_present("clean"),
+        matches.is_present("only-target-dependencies"),
+        matches.value_of("metadata").map(Path::new),
+    )?;
+
+    // Load any config specified or search in the binding crate directory
+    let mut config = match matches.value_of("config") {
+        Some(c) => Config::from_file(c).unwrap(),
+        None => {
+            let binding_crate_dir = lib.find_crate_dir(&lib.binding_crate_ref());
+
+            if let Some(binding_crate_dir) = binding_crate_dir {
+                Config::from_root_or_default(binding_crate_dir)
+            } else {
+                // This shouldn't happen
+                Config::from_root_or_default(input)
+            }
+        }
+    };
+
+    apply_config_overrides(&mut config, matches);
+
+    Builder::new()
+        .with_config(config)
+        .with_cargo(lib)
+        .generate()
+}
+
+fn main() {
+    let matches = Command::new("cbindgen")
+        .version(bindgen::VERSION)
+        .about("Generate C bindings for a Rust library")
+        .arg(
+            Arg::new("v")
+                .short('v')
+                .multiple_occurrences(true)
+                .help("Enable verbose logging"),
+        )
+        .arg(
+            Arg::new("verify")
+                .long("verify")
+                .help("Generate bindings and compare it to the existing bindings file and error if they are different"),
+        )
+        .arg(
+            Arg::new("config")
+                .short('c')
+                .long("config")
+                .value_name("PATH")
+                .help("Specify path to a `cbindgen.toml` config to use"),
+        )
+        .arg(
+            Arg::new("lang")
+                .short('l')
+                .long("lang")
+                .value_name("LANGUAGE")
+                .help("Specify the language to output bindings in")
+                .possible_values(["c++", "C++", "c", "C", "cython", "Cython"]),
+        )
+        .arg(
+            Arg::new("cpp-compat")
+                .long("cpp-compat")
+                .help("Whether to add C++ compatibility to generated C bindings")
+        )
+        .arg(
+            Arg::new("only-target-dependencies")
+                .long("only-target-dependencies")
+                .help("Only fetch dependencies needed by the target platform. \
+                    The target platform defaults to the host platform; set TARGET to override.")
+        )
+        .arg(
+            Arg::new("style")
+                .short('s')
+                .long("style")
+                .value_name("STYLE")
+                .help("Specify the declaration style to use for bindings")
+                .possible_values(["Both", "both", "Tag", "tag", "Type", "type"]),
+        )
+        .arg(
+            Arg::new("d")
+                .short('d')
+                .long("parse-dependencies")
+                .help("Whether to parse dependencies when generating bindings"),
+        )
+        .arg(
+            Arg::new("clean")
+                .long("clean")
+                .help(
+                    "Whether to use a new temporary directory for expanding macros. \
+                    Affects performance, but might be required in certain build processes.")
+                .required(false)
+        )
+        .arg(
+            Arg::new("INPUT")
+                .help(
+                    "A crate directory or source file to generate bindings for. \
+                    In general this is the folder where the Cargo.toml file of \
+                    source Rust library resides.")
+                .required(false)
+                .index(1),
+        )
+        .arg(
+            Arg::new("crate")
+                .long("crate")
+                .value_name("CRATE_NAME")
+                .help(
+                    "If generating bindings for a crate, \
+                     the specific crate to generate bindings for",
+                )
+                .required(false),
+        )
+        .arg(
+            Arg::new("out")
+                .short('o')
+                .long("output")
+                .value_name("PATH")
+                .help("The file to output the bindings to")
+                .required(false),
+        )
+        .arg(
+            Arg::new("lockfile")
+                .long("lockfile")
+                .value_name("PATH")
+                .help(
+                    "Specify the path to the Cargo.lock file explicitly. If this \
+                    is not specified, the Cargo.lock file is searched for in the \
+                    same folder as the Cargo.toml file. This option is useful for \
+                    projects that use workspaces.")
+                .required(false),
+        )
+        .arg(
+            Arg::new("metadata")
+                .long("metadata")
+                .value_name("PATH")
+                .help(
+                    "Specify the path to the output of a `cargo metadata` \
+                     command that allows to get dependency information. \
+                     This is useful because cargo metadata may be the longest \
+                     part of cbindgen runtime, and you may want to share it \
+                     across cbindgen invocations. By default cbindgen will run \
+                     `cargo metadata --all-features --format-version 1 \
+                      --manifest-path <path/to/crate/Cargo.toml>"
+                )
+                .required(false),
+        )
+        .arg(
+            Arg::new("profile")
+                .long("profile")
+                .value_name("PROFILE")
+                .help(
+                    "Specify the profile to use when expanding macros. \
+                     Has no effect otherwise."
+                )
+                .possible_values(["Debug", "debug", "Release", "release"]),
+        )
+        .arg(
+            Arg::new("quiet")
+                .short('q')
+                .long("quiet")
+                .help("Report errors only (overrides verbosity options).")
+                .required(false),
+        )
+        .get_matches();
+
+    if !matches.is_present("out") && matches.is_present("verify") {
+        error!(
+            "Cannot verify bindings against `stdout`, please specify a file to compare against."
+        );
+        std::process::exit(2);
+    }
+
+    // Initialize logging
+    if matches.is_present("quiet") {
+        logging::ErrorLogger::init().unwrap();
+    } else {
+        match matches.occurrences_of("v") {
+            0 => logging::WarnLogger::init().unwrap(),
+            1 => logging::InfoLogger::init().unwrap(),
+            _ => logging::TraceLogger::init().unwrap(),
+        }
+    }
+
+    // Find the input directory
+    let input = match matches.value_of("INPUT") {
+        Some(input) => PathBuf::from(input),
+        None => env::current_dir().unwrap(),
+    };
+
+    let bindings = match load_bindings(&input, &matches) {
+        Ok(bindings) => bindings,
+        Err(msg) => {
+            error!("{}", msg);
+            error!("Couldn't generate bindings for {}.", input.display());
+            std::process::exit(1);
+        }
+    };
+
+    // Write the bindings file
+    match matches.value_of("out") {
+        Some(file) => {
+            let changed = bindings.write_to_file(file);
+
+            if matches.is_present("verify") && changed {
+                error!("Bindings changed: {}", file);
+                std::process::exit(2);
+            }
+        }
+        _ => {
+            bindings.write(io::stdout());
+        }
+    }
+}
diff --git a/cbindgen-0.24.5/template.toml b/cbindgen-0.24.5/template.toml
new file mode 100644
index 0000000..bc41429
--- /dev/null
+++ b/cbindgen-0.24.5/template.toml
@@ -0,0 +1,152 @@
+# This is a template cbindgen.toml file with all of the default values.
+# Some values are commented out because their absence is the real default.
+#
+# See https://github.com/eqrion/cbindgen/blob/master/docs.md#cbindgentoml
+# for detailed documentation of every option here.
+
+
+
+language = "C++"
+
+
+
+############## Options for Wrapping the Contents of the Header #################
+
+# header = "/* Text to put at the beginning of the generated file. Probably a license. */"
+# trailer = "/* Text to put at the end of the generated file */"
+# include_guard = "my_bindings_h"
+# pragma_once = true
+# autogen_warning = "/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */"
+include_version = false
+# namespace = "my_namespace"
+namespaces = []
+using_namespaces = []
+sys_includes = []
+includes = []
+no_includes = false
+after_includes = ""
+
+
+
+
+############################ Code Style Options ################################
+
+braces = "SameLine"
+line_length = 100
+tab_width = 2
+documentation = true
+documentation_style = "auto"
+documentation_length = "full"
+line_endings = "LF" # also "CR", "CRLF", "Native"
+
+
+
+
+############################# Codegen Options ##################################
+
+style = "both"
+sort_by = "Name" # default for `fn.sort_by` and `const.sort_by`
+usize_is_size_t = true
+
+
+
+[defines]
+# "target_os = freebsd" = "DEFINE_FREEBSD"
+# "feature = serde" = "DEFINE_SERDE"
+
+
+
+[export]
+include = []
+exclude = []
+# prefix = "CAPI_"
+item_types = []
+renaming_overrides_prefixing = false
+
+
+
+[export.rename]
+
+
+
+[export.body]
+
+
+[export.mangle]
+
+
+[fn]
+rename_args = "None"
+# must_use = "MUST_USE_FUNC"
+# no_return = "NO_RETURN"
+# prefix = "START_FUNC"
+# postfix = "END_FUNC"
+args = "auto"
+sort_by = "Name"
+
+
+
+
+[struct]
+rename_fields = "None"
+# must_use = "MUST_USE_STRUCT"
+derive_constructor = false
+derive_eq = false
+derive_neq = false
+derive_lt = false
+derive_lte = false
+derive_gt = false
+derive_gte = false
+
+
+
+
+[enum]
+rename_variants = "None"
+# must_use = "MUST_USE_ENUM"
+add_sentinel = false
+prefix_with_name = false
+derive_helper_methods = false
+derive_const_casts = false
+derive_mut_casts = false
+# cast_assert_name = "ASSERT"
+derive_tagged_enum_destructor = false
+derive_tagged_enum_copy_constructor = false
+enum_class = true
+private_default_tagged_enum_constructor = false
+
+
+
+
+[const]
+allow_static_const = true
+allow_constexpr = false
+sort_by = "Name"
+
+
+
+
+[macro_expansion]
+bitflags = false
+
+
+
+
+
+
+############## Options for How Your Rust library Should Be Parsed ##############
+
+[parse]
+parse_deps = false
+# include = []
+exclude = []
+clean = false
+extra_bindings = []
+
+
+
+[parse.expand]
+crates = []
+all_features = false
+default_features = true
+features = []
diff --git a/cbindgen-0.24.5/tests/expectations/alias.both.c b/cbindgen-0.24.5/tests/expectations/alias.both.c
new file mode 100644
index 0000000..1c537b5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.both.c
@@ -0,0 +1,37 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Status {
+  Ok,
+  Err,
+};
+typedef uint32_t Status;
+
+typedef struct Dep {
+  int32_t a;
+  float b;
+} Dep;
+
+typedef struct Foo_i32 {
+  int32_t a;
+  int32_t b;
+  struct Dep c;
+} Foo_i32;
+
+typedef struct Foo_i32 IntFoo;
+
+typedef struct Foo_f64 {
+  double a;
+  double b;
+  struct Dep c;
+} Foo_f64;
+
+typedef struct Foo_f64 DoubleFoo;
+
+typedef int32_t Unit;
+
+typedef Status SpecialStatus;
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
diff --git a/cbindgen-0.24.5/tests/expectations/alias.both.compat.c b/cbindgen-0.24.5/tests/expectations/alias.both.compat.c
new file mode 100644
index 0000000..da9afc7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.both.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Status
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  Ok,
+  Err,
+};
+#ifndef __cplusplus
+typedef uint32_t Status;
+#endif // __cplusplus
+
+typedef struct Dep {
+  int32_t a;
+  float b;
+} Dep;
+
+typedef struct Foo_i32 {
+  int32_t a;
+  int32_t b;
+  struct Dep c;
+} Foo_i32;
+
+typedef struct Foo_i32 IntFoo;
+
+typedef struct Foo_f64 {
+  double a;
+  double b;
+  struct Dep c;
+} Foo_f64;
+
+typedef struct Foo_f64 DoubleFoo;
+
+typedef int32_t Unit;
+
+typedef Status SpecialStatus;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/alias.c b/cbindgen-0.24.5/tests/expectations/alias.c
new file mode 100644
index 0000000..9047829
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.c
@@ -0,0 +1,37 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Status {
+  Ok,
+  Err,
+};
+typedef uint32_t Status;
+
+typedef struct {
+  int32_t a;
+  float b;
+} Dep;
+
+typedef struct {
+  int32_t a;
+  int32_t b;
+  Dep c;
+} Foo_i32;
+
+typedef Foo_i32 IntFoo;
+
+typedef struct {
+  double a;
+  double b;
+  Dep c;
+} Foo_f64;
+
+typedef Foo_f64 DoubleFoo;
+
+typedef int32_t Unit;
+
+typedef Status SpecialStatus;
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
diff --git a/cbindgen-0.24.5/tests/expectations/alias.compat.c b/cbindgen-0.24.5/tests/expectations/alias.compat.c
new file mode 100644
index 0000000..4b1372a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Status
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  Ok,
+  Err,
+};
+#ifndef __cplusplus
+typedef uint32_t Status;
+#endif // __cplusplus
+
+typedef struct {
+  int32_t a;
+  float b;
+} Dep;
+
+typedef struct {
+  int32_t a;
+  int32_t b;
+  Dep c;
+} Foo_i32;
+
+typedef Foo_i32 IntFoo;
+
+typedef struct {
+  double a;
+  double b;
+  Dep c;
+} Foo_f64;
+
+typedef Foo_f64 DoubleFoo;
+
+typedef int32_t Unit;
+
+typedef Status SpecialStatus;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/alias.cpp b/cbindgen-0.24.5/tests/expectations/alias.cpp
new file mode 100644
index 0000000..9433247
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.cpp
@@ -0,0 +1,36 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class Status : uint32_t {
+  Ok,
+  Err,
+};
+
+struct Dep {
+  int32_t a;
+  float b;
+};
+
+template<typename X>
+struct Foo {
+  X a;
+  X b;
+  Dep c;
+};
+
+using IntFoo = Foo<int32_t>;
+
+using DoubleFoo = Foo<double>;
+
+using Unit = int32_t;
+
+using SpecialStatus = Status;
+
+extern "C" {
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/alias.pyx b/cbindgen-0.24.5/tests/expectations/alias.pyx
new file mode 100644
index 0000000..7471fb0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.pyx
@@ -0,0 +1,36 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Ok,
+    Err,
+  ctypedef uint32_t Status;
+
+  ctypedef struct Dep:
+    int32_t a;
+    float b;
+
+  ctypedef struct Foo_i32:
+    int32_t a;
+    int32_t b;
+    Dep c;
+
+  ctypedef Foo_i32 IntFoo;
+
+  ctypedef struct Foo_f64:
+    double a;
+    double b;
+    Dep c;
+
+  ctypedef Foo_f64 DoubleFoo;
+
+  ctypedef int32_t Unit;
+
+  ctypedef Status SpecialStatus;
+
+  void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
diff --git a/cbindgen-0.24.5/tests/expectations/alias.tag.c b/cbindgen-0.24.5/tests/expectations/alias.tag.c
new file mode 100644
index 0000000..82f12dd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.tag.c
@@ -0,0 +1,37 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Status {
+  Ok,
+  Err,
+};
+typedef uint32_t Status;
+
+struct Dep {
+  int32_t a;
+  float b;
+};
+
+struct Foo_i32 {
+  int32_t a;
+  int32_t b;
+  struct Dep c;
+};
+
+typedef struct Foo_i32 IntFoo;
+
+struct Foo_f64 {
+  double a;
+  double b;
+  struct Dep c;
+};
+
+typedef struct Foo_f64 DoubleFoo;
+
+typedef int32_t Unit;
+
+typedef Status SpecialStatus;
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
diff --git a/cbindgen-0.24.5/tests/expectations/alias.tag.compat.c b/cbindgen-0.24.5/tests/expectations/alias.tag.compat.c
new file mode 100644
index 0000000..4cdb7ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.tag.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Status
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  Ok,
+  Err,
+};
+#ifndef __cplusplus
+typedef uint32_t Status;
+#endif // __cplusplus
+
+struct Dep {
+  int32_t a;
+  float b;
+};
+
+struct Foo_i32 {
+  int32_t a;
+  int32_t b;
+  struct Dep c;
+};
+
+typedef struct Foo_i32 IntFoo;
+
+struct Foo_f64 {
+  double a;
+  double b;
+  struct Dep c;
+};
+
+typedef struct Foo_f64 DoubleFoo;
+
+typedef int32_t Unit;
+
+typedef Status SpecialStatus;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/alias.tag.pyx b/cbindgen-0.24.5/tests/expectations/alias.tag.pyx
new file mode 100644
index 0000000..e6d8662
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/alias.tag.pyx
@@ -0,0 +1,36 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Ok,
+    Err,
+  ctypedef uint32_t Status;
+
+  cdef struct Dep:
+    int32_t a;
+    float b;
+
+  cdef struct Foo_i32:
+    int32_t a;
+    int32_t b;
+    Dep c;
+
+  ctypedef Foo_i32 IntFoo;
+
+  cdef struct Foo_f64:
+    double a;
+    double b;
+    Dep c;
+
+  ctypedef Foo_f64 DoubleFoo;
+
+  ctypedef int32_t Unit;
+
+  ctypedef Status SpecialStatus;
+
+  void root(IntFoo x, DoubleFoo y, Unit z, SpecialStatus w);
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.both.c b/cbindgen-0.24.5/tests/expectations/annotation.both.c
new file mode 100644
index 0000000..17c4fd7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.both.c
@@ -0,0 +1,65 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C {
+  X = 2,
+  Y,
+};
+typedef uint32_t C;
+
+typedef struct A {
+  int32_t m0;
+} A;
+
+typedef struct B {
+  int32_t x;
+  float y;
+} B;
+
+enum F_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t F_Tag;
+
+typedef struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag {
+  Hello,
+  There,
+  Everyone,
+};
+typedef uint8_t H_Tag;
+
+typedef struct There_Body {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+void root(struct A x, struct B y, C z, union F f, struct H h);
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.both.compat.c b/cbindgen-0.24.5/tests/expectations/annotation.both.compat.c
new file mode 100644
index 0000000..2de2059
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.both.compat.c
@@ -0,0 +1,91 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  X = 2,
+  Y,
+};
+#ifndef __cplusplus
+typedef uint32_t C;
+#endif // __cplusplus
+
+typedef struct A {
+  int32_t m0;
+} A;
+
+typedef struct B {
+  int32_t x;
+  float y;
+} B;
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+typedef struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Hello,
+  There,
+  Everyone,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+typedef struct There_Body {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A x, struct B y, C z, union F f, struct H h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.c b/cbindgen-0.24.5/tests/expectations/annotation.c
new file mode 100644
index 0000000..9d72830
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.c
@@ -0,0 +1,65 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C {
+  X = 2,
+  Y,
+};
+typedef uint32_t C;
+
+typedef struct {
+  int32_t m0;
+} A;
+
+typedef struct {
+  int32_t x;
+  float y;
+} B;
+
+enum F_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t F_Tag;
+
+typedef struct {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag {
+  Hello,
+  There,
+  Everyone,
+};
+typedef uint8_t H_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+void root(A x, B y, C z, F f, H h);
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.compat.c b/cbindgen-0.24.5/tests/expectations/annotation.compat.c
new file mode 100644
index 0000000..27d36fa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.compat.c
@@ -0,0 +1,91 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  X = 2,
+  Y,
+};
+#ifndef __cplusplus
+typedef uint32_t C;
+#endif // __cplusplus
+
+typedef struct {
+  int32_t m0;
+} A;
+
+typedef struct {
+  int32_t x;
+  float y;
+} B;
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Hello,
+  There,
+  Everyone,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A x, B y, C z, F f, H h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.cpp b/cbindgen-0.24.5/tests/expectations/annotation.cpp
new file mode 100644
index 0000000..90bf2d4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.cpp
@@ -0,0 +1,152 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class C : uint32_t {
+  X = 2,
+  Y,
+};
+
+struct A {
+  int32_t m0;
+
+  A(int32_t const& m0)
+    : m0(m0)
+  {}
+
+  bool operator<(const A& other) const {
+    return m0 < other.m0;
+  }
+  bool operator<=(const A& other) const {
+    return m0 <= other.m0;
+  }
+};
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+union F {
+  enum class Tag : uint8_t {
+    Foo,
+    Bar,
+    Baz,
+  };
+
+  struct Foo_Body {
+    Tag tag;
+    int16_t _0;
+  };
+
+  struct Bar_Body {
+    Tag tag;
+    uint8_t x;
+    int16_t y;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Foo_Body foo;
+  Bar_Body bar;
+
+  static F Foo(const int16_t &_0) {
+    F result;
+    ::new (&result.foo._0) (int16_t)(_0);
+    result.tag = Tag::Foo;
+    return result;
+  }
+
+  bool IsFoo() const {
+    return tag == Tag::Foo;
+  }
+
+  static F Bar(const uint8_t &x,
+               const int16_t &y) {
+    F result;
+    ::new (&result.bar.x) (uint8_t)(x);
+    ::new (&result.bar.y) (int16_t)(y);
+    result.tag = Tag::Bar;
+    return result;
+  }
+
+  bool IsBar() const {
+    return tag == Tag::Bar;
+  }
+
+  static F Baz() {
+    F result;
+    result.tag = Tag::Baz;
+    return result;
+  }
+
+  bool IsBaz() const {
+    return tag == Tag::Baz;
+  }
+};
+
+struct H {
+  enum class Tag : uint8_t {
+    Hello,
+    There,
+    Everyone,
+  };
+
+  struct Hello_Body {
+    int16_t _0;
+  };
+
+  struct There_Body {
+    uint8_t x;
+    int16_t y;
+  };
+
+  Tag tag;
+  union {
+    Hello_Body hello;
+    There_Body there;
+  };
+
+  static H Hello(const int16_t &_0) {
+    H result;
+    ::new (&result.hello._0) (int16_t)(_0);
+    result.tag = Tag::Hello;
+    return result;
+  }
+
+  bool IsHello() const {
+    return tag == Tag::Hello;
+  }
+
+  static H There(const uint8_t &x,
+                 const int16_t &y) {
+    H result;
+    ::new (&result.there.x) (uint8_t)(x);
+    ::new (&result.there.y) (int16_t)(y);
+    result.tag = Tag::There;
+    return result;
+  }
+
+  bool IsThere() const {
+    return tag == Tag::There;
+  }
+
+  static H Everyone() {
+    H result;
+    result.tag = Tag::Everyone;
+    return result;
+  }
+
+  bool IsEveryone() const {
+    return tag == Tag::Everyone;
+  }
+};
+
+extern "C" {
+
+void root(A x, B y, C z, F f, H h);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.pyx b/cbindgen-0.24.5/tests/expectations/annotation.pyx
new file mode 100644
index 0000000..8aa9b54
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.pyx
@@ -0,0 +1,52 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    X # = 2,
+    Y,
+  ctypedef uint32_t C;
+
+  ctypedef struct A:
+    int32_t m0;
+
+  ctypedef struct B:
+    int32_t x;
+    float y;
+
+  cdef enum:
+    Foo,
+    Bar,
+    Baz,
+  ctypedef uint8_t F_Tag;
+
+  ctypedef struct Bar_Body:
+    F_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  ctypedef union F:
+    F_Tag tag;
+    int16_t foo;
+    Bar_Body bar;
+
+  cdef enum:
+    Hello,
+    There,
+    Everyone,
+  ctypedef uint8_t H_Tag;
+
+  ctypedef struct There_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct H:
+    H_Tag tag;
+    int16_t hello;
+    There_Body there;
+
+  void root(A x, B y, C z, F f, H h);
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.tag.c b/cbindgen-0.24.5/tests/expectations/annotation.tag.c
new file mode 100644
index 0000000..826c41a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.tag.c
@@ -0,0 +1,65 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C {
+  X = 2,
+  Y,
+};
+typedef uint32_t C;
+
+struct A {
+  int32_t m0;
+};
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+enum F_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t F_Tag;
+
+struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  struct Bar_Body bar;
+};
+
+enum H_Tag {
+  Hello,
+  There,
+  Everyone,
+};
+typedef uint8_t H_Tag;
+
+struct There_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    struct There_Body there;
+  };
+};
+
+void root(struct A x, struct B y, C z, union F f, struct H h);
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.tag.compat.c b/cbindgen-0.24.5/tests/expectations/annotation.tag.compat.c
new file mode 100644
index 0000000..a23c97a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.tag.compat.c
@@ -0,0 +1,91 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  X = 2,
+  Y,
+};
+#ifndef __cplusplus
+typedef uint32_t C;
+#endif // __cplusplus
+
+struct A {
+  int32_t m0;
+};
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  struct Bar_Body bar;
+};
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Hello,
+  There,
+  Everyone,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+struct There_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    struct There_Body there;
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A x, struct B y, C z, union F f, struct H h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/annotation.tag.pyx b/cbindgen-0.24.5/tests/expectations/annotation.tag.pyx
new file mode 100644
index 0000000..4f0b46a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/annotation.tag.pyx
@@ -0,0 +1,52 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    X # = 2,
+    Y,
+  ctypedef uint32_t C;
+
+  cdef struct A:
+    int32_t m0;
+
+  cdef struct B:
+    int32_t x;
+    float y;
+
+  cdef enum:
+    Foo,
+    Bar,
+    Baz,
+  ctypedef uint8_t F_Tag;
+
+  cdef struct Bar_Body:
+    F_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  cdef union F:
+    F_Tag tag;
+    int16_t foo;
+    Bar_Body bar;
+
+  cdef enum:
+    Hello,
+    There,
+    Everyone,
+  ctypedef uint8_t H_Tag;
+
+  cdef struct There_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct H:
+    H_Tag tag;
+    int16_t hello;
+    There_Body there;
+
+  void root(A x, B y, C z, F f, H h);
diff --git a/cbindgen-0.24.5/tests/expectations/array.both.c b/cbindgen-0.24.5/tests/expectations/array.both.c
new file mode 100644
index 0000000..cb81308
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.both.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum Foo_Tag {
+  A,
+} Foo_Tag;
+
+typedef struct Foo {
+  Foo_Tag tag;
+  union {
+    struct {
+      float a[20];
+    };
+  };
+} Foo;
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/array.both.compat.c b/cbindgen-0.24.5/tests/expectations/array.both.compat.c
new file mode 100644
index 0000000..d3c7308
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.both.compat.c
@@ -0,0 +1,27 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum Foo_Tag {
+  A,
+} Foo_Tag;
+
+typedef struct Foo {
+  Foo_Tag tag;
+  union {
+    struct {
+      float a[20];
+    };
+  };
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/array.c b/cbindgen-0.24.5/tests/expectations/array.c
new file mode 100644
index 0000000..dcf5ba5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  A,
+} Foo_Tag;
+
+typedef struct {
+  Foo_Tag tag;
+  union {
+    struct {
+      float a[20];
+    };
+  };
+} Foo;
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/array.compat.c b/cbindgen-0.24.5/tests/expectations/array.compat.c
new file mode 100644
index 0000000..d5d7661
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.compat.c
@@ -0,0 +1,27 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  A,
+} Foo_Tag;
+
+typedef struct {
+  Foo_Tag tag;
+  union {
+    struct {
+      float a[20];
+    };
+  };
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/array.cpp b/cbindgen-0.24.5/tests/expectations/array.cpp
new file mode 100644
index 0000000..1a57519
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.cpp
@@ -0,0 +1,39 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+  enum class Tag {
+    A,
+  };
+
+  struct A_Body {
+    float _0[20];
+  };
+
+  Tag tag;
+  union {
+    A_Body a;
+  };
+
+  static Foo A(const float (&_0)[20]) {
+    Foo result;
+    for (int i = 0; i < 20; i++) {
+      ::new (&result.a._0[i]) (float)(_0[i]);
+    }
+    result.tag = Tag::A;
+    return result;
+  }
+
+  bool IsA() const {
+    return tag == Tag::A;
+  }
+};
+
+extern "C" {
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/array.pyx b/cbindgen-0.24.5/tests/expectations/array.pyx
new file mode 100644
index 0000000..d0a8c23
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef enum Foo_Tag:
+    A,
+
+  ctypedef struct Foo:
+    Foo_Tag tag;
+    float a[20];
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/array.tag.c b/cbindgen-0.24.5/tests/expectations/array.tag.c
new file mode 100644
index 0000000..df4fd24
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.tag.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Foo_Tag {
+  A,
+};
+
+struct Foo {
+  enum Foo_Tag tag;
+  union {
+    struct {
+      float a[20];
+    };
+  };
+};
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/array.tag.compat.c b/cbindgen-0.24.5/tests/expectations/array.tag.compat.c
new file mode 100644
index 0000000..ea11fbf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.tag.compat.c
@@ -0,0 +1,27 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Foo_Tag {
+  A,
+};
+
+struct Foo {
+  enum Foo_Tag tag;
+  union {
+    struct {
+      float a[20];
+    };
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/array.tag.pyx b/cbindgen-0.24.5/tests/expectations/array.tag.pyx
new file mode 100644
index 0000000..47e75f5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/array.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum Foo_Tag:
+    A,
+
+  cdef struct Foo:
+    Foo_Tag tag;
+    float a[20];
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.both.c b/cbindgen-0.24.5/tests/expectations/asserted_cast.both.c
new file mode 100644
index 0000000..1cb6854
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.both.c
@@ -0,0 +1,78 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct I I;
+
+enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+typedef uint8_t H_Tag;
+
+typedef struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum J_Tag {
+  J_Foo,
+  J_Bar,
+  J_Baz,
+};
+typedef uint8_t J_Tag;
+
+typedef struct J_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} J_Bar_Body;
+
+typedef struct J {
+  J_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    J_Bar_Body bar;
+  };
+} J;
+
+enum K_Tag {
+  K_Foo,
+  K_Bar,
+  K_Baz,
+};
+typedef uint8_t K_Tag;
+
+typedef struct K_Bar_Body {
+  K_Tag tag;
+  uint8_t x;
+  int16_t y;
+} K_Bar_Body;
+
+typedef union K {
+  K_Tag tag;
+  struct {
+    K_Tag foo_tag;
+    int16_t foo;
+  };
+  K_Bar_Body bar;
+} K;
+
+void foo(struct H h, struct I i, struct J j, union K k);
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.both.compat.c b/cbindgen-0.24.5/tests/expectations/asserted_cast.both.compat.c
new file mode 100644
index 0000000..4eabaf3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.both.compat.c
@@ -0,0 +1,104 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct I I;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+typedef struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum J_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  J_Foo,
+  J_Bar,
+  J_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t J_Tag;
+#endif // __cplusplus
+
+typedef struct J_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} J_Bar_Body;
+
+typedef struct J {
+  J_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    J_Bar_Body bar;
+  };
+} J;
+
+enum K_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  K_Foo,
+  K_Bar,
+  K_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t K_Tag;
+#endif // __cplusplus
+
+typedef struct K_Bar_Body {
+  K_Tag tag;
+  uint8_t x;
+  int16_t y;
+} K_Bar_Body;
+
+typedef union K {
+  K_Tag tag;
+  struct {
+    K_Tag foo_tag;
+    int16_t foo;
+  };
+  K_Bar_Body bar;
+} K;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(struct H h, struct I i, struct J j, union K k);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.c b/cbindgen-0.24.5/tests/expectations/asserted_cast.c
new file mode 100644
index 0000000..5dad522
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.c
@@ -0,0 +1,78 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct I I;
+
+enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+typedef uint8_t H_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum J_Tag {
+  J_Foo,
+  J_Bar,
+  J_Baz,
+};
+typedef uint8_t J_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} J_Bar_Body;
+
+typedef struct {
+  J_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    J_Bar_Body bar;
+  };
+} J;
+
+enum K_Tag {
+  K_Foo,
+  K_Bar,
+  K_Baz,
+};
+typedef uint8_t K_Tag;
+
+typedef struct {
+  K_Tag tag;
+  uint8_t x;
+  int16_t y;
+} K_Bar_Body;
+
+typedef union {
+  K_Tag tag;
+  struct {
+    K_Tag foo_tag;
+    int16_t foo;
+  };
+  K_Bar_Body bar;
+} K;
+
+void foo(H h, I i, J j, K k);
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.compat.c b/cbindgen-0.24.5/tests/expectations/asserted_cast.compat.c
new file mode 100644
index 0000000..5dee704
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.compat.c
@@ -0,0 +1,104 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct I I;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum J_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  J_Foo,
+  J_Bar,
+  J_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t J_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} J_Bar_Body;
+
+typedef struct {
+  J_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    J_Bar_Body bar;
+  };
+} J;
+
+enum K_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  K_Foo,
+  K_Bar,
+  K_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t K_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  K_Tag tag;
+  uint8_t x;
+  int16_t y;
+} K_Bar_Body;
+
+typedef union {
+  K_Tag tag;
+  struct {
+    K_Tag foo_tag;
+    int16_t foo;
+  };
+  K_Bar_Body bar;
+} K;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(H h, I i, J j, K k);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.cpp b/cbindgen-0.24.5/tests/expectations/asserted_cast.cpp
new file mode 100644
index 0000000..8e0517e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.cpp
@@ -0,0 +1,250 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct I;
+
+struct H {
+  enum class Tag : uint8_t {
+    H_Foo,
+    H_Bar,
+    H_Baz,
+  };
+
+  struct H_Foo_Body {
+    int16_t _0;
+  };
+
+  struct H_Bar_Body {
+    uint8_t x;
+    int16_t y;
+  };
+
+  Tag tag;
+  union {
+    H_Foo_Body foo;
+    H_Bar_Body bar;
+  };
+
+  static H H_Foo(const int16_t &_0) {
+    H result;
+    ::new (&result.foo._0) (int16_t)(_0);
+    result.tag = Tag::H_Foo;
+    return result;
+  }
+
+  bool IsH_Foo() const {
+    return tag == Tag::H_Foo;
+  }
+
+  const int16_t& AsH_Foo() const {
+    MY_ASSERT(IsH_Foo());
+    return foo._0;
+  }
+
+  MY_ATTRS int16_t& AsH_Foo() {
+    MY_ASSERT(IsH_Foo());
+    return foo._0;
+  }
+
+  static H H_Bar(const uint8_t &x,
+                 const int16_t &y) {
+    H result;
+    ::new (&result.bar.x) (uint8_t)(x);
+    ::new (&result.bar.y) (int16_t)(y);
+    result.tag = Tag::H_Bar;
+    return result;
+  }
+
+  bool IsH_Bar() const {
+    return tag == Tag::H_Bar;
+  }
+
+  MY_ATTRS const H_Bar_Body& AsH_Bar() const {
+    MY_ASSERT(IsH_Bar());
+    return bar;
+  }
+
+  H_Bar_Body& AsH_Bar() {
+    MY_ASSERT(IsH_Bar());
+    return bar;
+  }
+
+  static H H_Baz() {
+    H result;
+    result.tag = Tag::H_Baz;
+    return result;
+  }
+
+  MY_ATTRS bool IsH_Baz() const {
+    return tag == Tag::H_Baz;
+  }
+};
+
+struct J {
+  enum class Tag : uint8_t {
+    J_Foo,
+    J_Bar,
+    J_Baz,
+  };
+
+  struct J_Foo_Body {
+    int16_t _0;
+  };
+
+  struct J_Bar_Body {
+    uint8_t x;
+    int16_t y;
+  };
+
+  Tag tag;
+  union {
+    J_Foo_Body foo;
+    J_Bar_Body bar;
+  };
+
+  static J J_Foo(const int16_t &_0) {
+    J result;
+    ::new (&result.foo._0) (int16_t)(_0);
+    result.tag = Tag::J_Foo;
+    return result;
+  }
+
+  bool IsJ_Foo() const {
+    return tag == Tag::J_Foo;
+  }
+
+  const int16_t& AsJ_Foo() const {
+    MY_ASSERT(IsJ_Foo());
+    return foo._0;
+  }
+
+  int16_t& AsJ_Foo() {
+    MY_ASSERT(IsJ_Foo());
+    return foo._0;
+  }
+
+  static J J_Bar(const uint8_t &x,
+                 const int16_t &y) {
+    J result;
+    ::new (&result.bar.x) (uint8_t)(x);
+    ::new (&result.bar.y) (int16_t)(y);
+    result.tag = Tag::J_Bar;
+    return result;
+  }
+
+  bool IsJ_Bar() const {
+    return tag == Tag::J_Bar;
+  }
+
+  const J_Bar_Body& AsJ_Bar() const {
+    MY_ASSERT(IsJ_Bar());
+    return bar;
+  }
+
+  J_Bar_Body& AsJ_Bar() {
+    MY_ASSERT(IsJ_Bar());
+    return bar;
+  }
+
+  static J J_Baz() {
+    J result;
+    result.tag = Tag::J_Baz;
+    return result;
+  }
+
+  bool IsJ_Baz() const {
+    return tag == Tag::J_Baz;
+  }
+};
+
+union K {
+  enum class Tag : uint8_t {
+    K_Foo,
+    K_Bar,
+    K_Baz,
+  };
+
+  struct K_Foo_Body {
+    Tag tag;
+    int16_t _0;
+  };
+
+  struct K_Bar_Body {
+    Tag tag;
+    uint8_t x;
+    int16_t y;
+  };
+
+  struct {
+    Tag tag;
+  };
+  K_Foo_Body foo;
+  K_Bar_Body bar;
+
+  static K K_Foo(const int16_t &_0) {
+    K result;
+    ::new (&result.foo._0) (int16_t)(_0);
+    result.tag = Tag::K_Foo;
+    return result;
+  }
+
+  bool IsK_Foo() const {
+    return tag == Tag::K_Foo;
+  }
+
+  const int16_t& AsK_Foo() const {
+    MY_ASSERT(IsK_Foo());
+    return foo._0;
+  }
+
+  int16_t& AsK_Foo() {
+    MY_ASSERT(IsK_Foo());
+    return foo._0;
+  }
+
+  static K K_Bar(const uint8_t &x,
+                 const int16_t &y) {
+    K result;
+    ::new (&result.bar.x) (uint8_t)(x);
+    ::new (&result.bar.y) (int16_t)(y);
+    result.tag = Tag::K_Bar;
+    return result;
+  }
+
+  bool IsK_Bar() const {
+    return tag == Tag::K_Bar;
+  }
+
+  const K_Bar_Body& AsK_Bar() const {
+    MY_ASSERT(IsK_Bar());
+    return bar;
+  }
+
+  K_Bar_Body& AsK_Bar() {
+    MY_ASSERT(IsK_Bar());
+    return bar;
+  }
+
+  static K K_Baz() {
+    K result;
+    result.tag = Tag::K_Baz;
+    return result;
+  }
+
+  bool IsK_Baz() const {
+    return tag == Tag::K_Baz;
+  }
+};
+
+extern "C" {
+
+void foo(H h, I i, J j, K k);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.pyx b/cbindgen-0.24.5/tests/expectations/asserted_cast.pyx
new file mode 100644
index 0000000..126635c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.pyx
@@ -0,0 +1,62 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct I:
+    pass
+
+  cdef enum:
+    H_Foo,
+    H_Bar,
+    H_Baz,
+  ctypedef uint8_t H_Tag;
+
+  ctypedef struct H_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct H:
+    H_Tag tag;
+    int16_t foo;
+    H_Bar_Body bar;
+
+  cdef enum:
+    J_Foo,
+    J_Bar,
+    J_Baz,
+  ctypedef uint8_t J_Tag;
+
+  ctypedef struct J_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct J:
+    J_Tag tag;
+    int16_t foo;
+    J_Bar_Body bar;
+
+  cdef enum:
+    K_Foo,
+    K_Bar,
+    K_Baz,
+  ctypedef uint8_t K_Tag;
+
+  ctypedef struct K_Bar_Body:
+    K_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  ctypedef union K:
+    K_Tag tag;
+    int16_t foo;
+    K_Bar_Body bar;
+
+  void foo(H h, I i, J j, K k);
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.c b/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.c
new file mode 100644
index 0000000..f953fbe
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.c
@@ -0,0 +1,78 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct I;
+
+enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+typedef uint8_t H_Tag;
+
+struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct H_Bar_Body bar;
+  };
+};
+
+enum J_Tag {
+  J_Foo,
+  J_Bar,
+  J_Baz,
+};
+typedef uint8_t J_Tag;
+
+struct J_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct J {
+  J_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct J_Bar_Body bar;
+  };
+};
+
+enum K_Tag {
+  K_Foo,
+  K_Bar,
+  K_Baz,
+};
+typedef uint8_t K_Tag;
+
+struct K_Bar_Body {
+  K_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union K {
+  K_Tag tag;
+  struct {
+    K_Tag foo_tag;
+    int16_t foo;
+  };
+  struct K_Bar_Body bar;
+};
+
+void foo(struct H h, struct I i, struct J j, union K k);
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.compat.c b/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.compat.c
new file mode 100644
index 0000000..2e89b46
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.compat.c
@@ -0,0 +1,104 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct I;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct H_Bar_Body bar;
+  };
+};
+
+enum J_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  J_Foo,
+  J_Bar,
+  J_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t J_Tag;
+#endif // __cplusplus
+
+struct J_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct J {
+  J_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct J_Bar_Body bar;
+  };
+};
+
+enum K_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  K_Foo,
+  K_Bar,
+  K_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t K_Tag;
+#endif // __cplusplus
+
+struct K_Bar_Body {
+  K_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union K {
+  K_Tag tag;
+  struct {
+    K_Tag foo_tag;
+    int16_t foo;
+  };
+  struct K_Bar_Body bar;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(struct H h, struct I i, struct J j, union K k);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.pyx b/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.pyx
new file mode 100644
index 0000000..bf6dec5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/asserted_cast.tag.pyx
@@ -0,0 +1,62 @@
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct I:
+    pass
+
+  cdef enum:
+    H_Foo,
+    H_Bar,
+    H_Baz,
+  ctypedef uint8_t H_Tag;
+
+  cdef struct H_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct H:
+    H_Tag tag;
+    int16_t foo;
+    H_Bar_Body bar;
+
+  cdef enum:
+    J_Foo,
+    J_Bar,
+    J_Baz,
+  ctypedef uint8_t J_Tag;
+
+  cdef struct J_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct J:
+    J_Tag tag;
+    int16_t foo;
+    J_Bar_Body bar;
+
+  cdef enum:
+    K_Foo,
+    K_Bar,
+    K_Baz,
+  ctypedef uint8_t K_Tag;
+
+  cdef struct K_Bar_Body:
+    K_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  cdef union K:
+    K_Tag tag;
+    int16_t foo;
+    K_Bar_Body bar;
+
+  void foo(H h, I i, J j, K k);
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.compat.c b/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.compat.c
new file mode 100644
index 0000000..25faf66
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.compat.c
@@ -0,0 +1,6 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define Foo_FOO 42
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.cpp b/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.cpp
new file mode 100644
index 0000000..f031e27
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.cpp
@@ -0,0 +1,7 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint32_t Foo_FOO = 42;
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.pyx b/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.pyx
new file mode 100644
index 0000000..f78c616
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_const_conflict.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint32_t Foo_FOO # = 42
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.both.c b/cbindgen-0.24.5/tests/expectations/assoc_constant.both.c
new file mode 100644
index 0000000..1aebaff
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.both.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+#define Foo_GA 10
+#define Foo_ZO 3.14
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.both.compat.c b/cbindgen-0.24.5/tests/expectations/assoc_constant.both.compat.c
new file mode 100644
index 0000000..3edd13e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+#define Foo_GA 10
+#define Foo_ZO 3.14
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.c b/cbindgen-0.24.5/tests/expectations/assoc_constant.c
new file mode 100644
index 0000000..7f319d7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+#define Foo_GA 10
+#define Foo_ZO 3.14
+
+void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.compat.c b/cbindgen-0.24.5/tests/expectations/assoc_constant.compat.c
new file mode 100644
index 0000000..092e0d4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+#define Foo_GA 10
+#define Foo_ZO 3.14
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.cpp b/cbindgen-0.24.5/tests/expectations/assoc_constant.cpp
new file mode 100644
index 0000000..07a0dbd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+
+};
+constexpr static const int32_t Foo_GA = 10;
+constexpr static const float Foo_ZO = 3.14;
+
+extern "C" {
+
+void root(Foo x);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.pyx b/cbindgen-0.24.5/tests/expectations/assoc_constant.pyx
new file mode 100644
index 0000000..51da63e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    pass
+  const int32_t Foo_GA # = 10
+  const float Foo_ZO # = 3.14
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.c b/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.c
new file mode 100644
index 0000000..600cb48
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+#define Foo_GA 10
+#define Foo_ZO 3.14
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.compat.c b/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.compat.c
new file mode 100644
index 0000000..afba694
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+#define Foo_GA 10
+#define Foo_ZO 3.14
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.pyx b/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.pyx
new file mode 100644
index 0000000..a0aed8a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/assoc_constant.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    pass
+  const int32_t Foo_GA # = 10
+  const float Foo_ZO # = 3.14
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/associated_constant_panic.compat.c b/cbindgen-0.24.5/tests/expectations/associated_constant_panic.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_constant_panic.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/associated_constant_panic.cpp b/cbindgen-0.24.5/tests/expectations/associated_constant_panic.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_constant_panic.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/associated_constant_panic.pyx b/cbindgen-0.24.5/tests/expectations/associated_constant_panic.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_constant_panic.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.both.c b/cbindgen-0.24.5/tests/expectations/associated_in_body.both.c
new file mode 100644
index 0000000..c06a066
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.both.c
@@ -0,0 +1,59 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct StyleAlignFlags {
+  uint8_t bits;
+} StyleAlignFlags;
+/**
+ * 'auto'
+ */
+#define StyleAlignFlags_AUTO (StyleAlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define StyleAlignFlags_NORMAL (StyleAlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define StyleAlignFlags_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define StyleAlignFlags_END (StyleAlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define StyleAlignFlags_ALIAS (StyleAlignFlags){ .bits = (uint8_t)(StyleAlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+/**
+ * An arbitrary identifier for a native (OS compositor) surface
+ */
+typedef struct StyleNativeSurfaceId {
+  uint64_t _0;
+} StyleNativeSurfaceId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeSurfaceId_DEBUG_OVERLAY (StyleNativeSurfaceId){ ._0 = UINT64_MAX }
+
+typedef struct StyleNativeTileId {
+  struct StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+} StyleNativeTileId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeTileId_DEBUG_OVERLAY (StyleNativeTileId){ .surface_id = StyleNativeSurfaceId_DEBUG_OVERLAY, .x = 0, .y = 0 }
+
+void root(struct StyleAlignFlags flags, struct StyleNativeTileId tile);
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.both.compat.c b/cbindgen-0.24.5/tests/expectations/associated_in_body.both.compat.c
new file mode 100644
index 0000000..926d7d3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.both.compat.c
@@ -0,0 +1,67 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct StyleAlignFlags {
+  uint8_t bits;
+} StyleAlignFlags;
+/**
+ * 'auto'
+ */
+#define StyleAlignFlags_AUTO (StyleAlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define StyleAlignFlags_NORMAL (StyleAlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define StyleAlignFlags_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define StyleAlignFlags_END (StyleAlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define StyleAlignFlags_ALIAS (StyleAlignFlags){ .bits = (uint8_t)(StyleAlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+/**
+ * An arbitrary identifier for a native (OS compositor) surface
+ */
+typedef struct StyleNativeSurfaceId {
+  uint64_t _0;
+} StyleNativeSurfaceId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeSurfaceId_DEBUG_OVERLAY (StyleNativeSurfaceId){ ._0 = UINT64_MAX }
+
+typedef struct StyleNativeTileId {
+  struct StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+} StyleNativeTileId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeTileId_DEBUG_OVERLAY (StyleNativeTileId){ .surface_id = StyleNativeSurfaceId_DEBUG_OVERLAY, .x = 0, .y = 0 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct StyleAlignFlags flags, struct StyleNativeTileId tile);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.c b/cbindgen-0.24.5/tests/expectations/associated_in_body.c
new file mode 100644
index 0000000..e41971a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.c
@@ -0,0 +1,59 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct {
+  uint8_t bits;
+} StyleAlignFlags;
+/**
+ * 'auto'
+ */
+#define StyleAlignFlags_AUTO (StyleAlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define StyleAlignFlags_NORMAL (StyleAlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define StyleAlignFlags_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define StyleAlignFlags_END (StyleAlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define StyleAlignFlags_ALIAS (StyleAlignFlags){ .bits = (uint8_t)(StyleAlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+/**
+ * An arbitrary identifier for a native (OS compositor) surface
+ */
+typedef struct {
+  uint64_t _0;
+} StyleNativeSurfaceId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeSurfaceId_DEBUG_OVERLAY (StyleNativeSurfaceId){ ._0 = UINT64_MAX }
+
+typedef struct {
+  StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+} StyleNativeTileId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeTileId_DEBUG_OVERLAY (StyleNativeTileId){ .surface_id = StyleNativeSurfaceId_DEBUG_OVERLAY, .x = 0, .y = 0 }
+
+void root(StyleAlignFlags flags, StyleNativeTileId tile);
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.compat.c b/cbindgen-0.24.5/tests/expectations/associated_in_body.compat.c
new file mode 100644
index 0000000..a7d61ab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.compat.c
@@ -0,0 +1,67 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct {
+  uint8_t bits;
+} StyleAlignFlags;
+/**
+ * 'auto'
+ */
+#define StyleAlignFlags_AUTO (StyleAlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define StyleAlignFlags_NORMAL (StyleAlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define StyleAlignFlags_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define StyleAlignFlags_END (StyleAlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define StyleAlignFlags_ALIAS (StyleAlignFlags){ .bits = (uint8_t)(StyleAlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+/**
+ * An arbitrary identifier for a native (OS compositor) surface
+ */
+typedef struct {
+  uint64_t _0;
+} StyleNativeSurfaceId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeSurfaceId_DEBUG_OVERLAY (StyleNativeSurfaceId){ ._0 = UINT64_MAX }
+
+typedef struct {
+  StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+} StyleNativeTileId;
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeTileId_DEBUG_OVERLAY (StyleNativeTileId){ .surface_id = StyleNativeSurfaceId_DEBUG_OVERLAY, .x = 0, .y = 0 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(StyleAlignFlags flags, StyleNativeTileId tile);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.cpp b/cbindgen-0.24.5/tests/expectations/associated_in_body.cpp
new file mode 100644
index 0000000..e93a63f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.cpp
@@ -0,0 +1,84 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+/// Constants shared by multiple CSS Box Alignment properties
+///
+/// These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+struct StyleAlignFlags {
+  uint8_t bits;
+
+  constexpr explicit operator bool() const {
+    return !!bits;
+  }
+  constexpr StyleAlignFlags operator~() const {
+    return StyleAlignFlags { static_cast<decltype(bits)>(~bits) };
+  }
+  constexpr StyleAlignFlags operator|(const StyleAlignFlags& other) const {
+    return StyleAlignFlags { static_cast<decltype(bits)>(this->bits | other.bits) };
+  }
+  StyleAlignFlags& operator|=(const StyleAlignFlags& other) {
+    *this = (*this | other);
+    return *this;
+  }
+  constexpr StyleAlignFlags operator&(const StyleAlignFlags& other) const {
+    return StyleAlignFlags { static_cast<decltype(bits)>(this->bits & other.bits) };
+  }
+  StyleAlignFlags& operator&=(const StyleAlignFlags& other) {
+    *this = (*this & other);
+    return *this;
+  }
+  constexpr StyleAlignFlags operator^(const StyleAlignFlags& other) const {
+    return StyleAlignFlags { static_cast<decltype(bits)>(this->bits ^ other.bits) };
+  }
+  StyleAlignFlags& operator^=(const StyleAlignFlags& other) {
+    *this = (*this ^ other);
+    return *this;
+  }
+  static const StyleAlignFlags AUTO;
+  static const StyleAlignFlags NORMAL;
+  static const StyleAlignFlags START;
+  static const StyleAlignFlags END;
+  static const StyleAlignFlags ALIAS;
+  static const StyleAlignFlags FLEX_START;
+  static const StyleAlignFlags MIXED;
+  static const StyleAlignFlags MIXED_SELF;
+};
+/// 'auto'
+constexpr inline const StyleAlignFlags StyleAlignFlags::AUTO = StyleAlignFlags{ /* .bits = */ (uint8_t)0 };
+/// 'normal'
+constexpr inline const StyleAlignFlags StyleAlignFlags::NORMAL = StyleAlignFlags{ /* .bits = */ (uint8_t)1 };
+/// 'start'
+constexpr inline const StyleAlignFlags StyleAlignFlags::START = StyleAlignFlags{ /* .bits = */ (uint8_t)(1 << 1) };
+/// 'end'
+constexpr inline const StyleAlignFlags StyleAlignFlags::END = StyleAlignFlags{ /* .bits = */ (uint8_t)(1 << 2) };
+constexpr inline const StyleAlignFlags StyleAlignFlags::ALIAS = StyleAlignFlags{ /* .bits = */ (uint8_t)(StyleAlignFlags::END).bits };
+/// 'flex-start'
+constexpr inline const StyleAlignFlags StyleAlignFlags::FLEX_START = StyleAlignFlags{ /* .bits = */ (uint8_t)(1 << 3) };
+constexpr inline const StyleAlignFlags StyleAlignFlags::MIXED = StyleAlignFlags{ /* .bits = */ (uint8_t)(((1 << 4) | (StyleAlignFlags::FLEX_START).bits) | (StyleAlignFlags::END).bits) };
+constexpr inline const StyleAlignFlags StyleAlignFlags::MIXED_SELF = StyleAlignFlags{ /* .bits = */ (uint8_t)(((1 << 5) | (StyleAlignFlags::FLEX_START).bits) | (StyleAlignFlags::END).bits) };
+
+/// An arbitrary identifier for a native (OS compositor) surface
+struct StyleNativeSurfaceId {
+  uint64_t _0;
+  static const StyleNativeSurfaceId DEBUG_OVERLAY;
+};
+/// A special id for the native surface that is used for debug / profiler overlays.
+constexpr inline const StyleNativeSurfaceId StyleNativeSurfaceId::DEBUG_OVERLAY = StyleNativeSurfaceId{ /* ._0 = */ UINT64_MAX };
+
+struct StyleNativeTileId {
+  StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+  static const StyleNativeTileId DEBUG_OVERLAY;
+};
+/// A special id for the native surface that is used for debug / profiler overlays.
+constexpr inline const StyleNativeTileId StyleNativeTileId::DEBUG_OVERLAY = StyleNativeTileId{ /* .surface_id = */ StyleNativeSurfaceId::DEBUG_OVERLAY, /* .x = */ 0, /* .y = */ 0 };
+
+extern "C" {
+
+void root(StyleAlignFlags flags, StyleNativeTileId tile);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.pyx b/cbindgen-0.24.5/tests/expectations/associated_in_body.pyx
new file mode 100644
index 0000000..f6b20bc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.pyx
@@ -0,0 +1,41 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # Constants shared by multiple CSS Box Alignment properties
+  #
+  # These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+  ctypedef struct StyleAlignFlags:
+    uint8_t bits;
+  # 'auto'
+  const StyleAlignFlags StyleAlignFlags_AUTO # = <StyleAlignFlags>{ <uint8_t>0 }
+  # 'normal'
+  const StyleAlignFlags StyleAlignFlags_NORMAL # = <StyleAlignFlags>{ <uint8_t>1 }
+  # 'start'
+  const StyleAlignFlags StyleAlignFlags_START # = <StyleAlignFlags>{ <uint8_t>(1 << 1) }
+  # 'end'
+  const StyleAlignFlags StyleAlignFlags_END # = <StyleAlignFlags>{ <uint8_t>(1 << 2) }
+  const StyleAlignFlags StyleAlignFlags_ALIAS # = <StyleAlignFlags>{ <uint8_t>(StyleAlignFlags_END).bits }
+  # 'flex-start'
+  const StyleAlignFlags StyleAlignFlags_FLEX_START # = <StyleAlignFlags>{ <uint8_t>(1 << 3) }
+  const StyleAlignFlags StyleAlignFlags_MIXED # = <StyleAlignFlags>{ <uint8_t>(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+  const StyleAlignFlags StyleAlignFlags_MIXED_SELF # = <StyleAlignFlags>{ <uint8_t>(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+  # An arbitrary identifier for a native (OS compositor) surface
+  ctypedef struct StyleNativeSurfaceId:
+    uint64_t _0;
+  # A special id for the native surface that is used for debug / profiler overlays.
+  const StyleNativeSurfaceId StyleNativeSurfaceId_DEBUG_OVERLAY # = <StyleNativeSurfaceId>{ UINT64_MAX }
+
+  ctypedef struct StyleNativeTileId:
+    StyleNativeSurfaceId surface_id;
+    int32_t x;
+    int32_t y;
+  # A special id for the native surface that is used for debug / profiler overlays.
+  const StyleNativeTileId StyleNativeTileId_DEBUG_OVERLAY # = <StyleNativeTileId>{ StyleNativeSurfaceId_DEBUG_OVERLAY, 0, 0 }
+
+  void root(StyleAlignFlags flags, StyleNativeTileId tile);
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.c b/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.c
new file mode 100644
index 0000000..f0bc16f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.c
@@ -0,0 +1,59 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+struct StyleAlignFlags {
+  uint8_t bits;
+};
+/**
+ * 'auto'
+ */
+#define StyleAlignFlags_AUTO (StyleAlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define StyleAlignFlags_NORMAL (StyleAlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define StyleAlignFlags_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define StyleAlignFlags_END (StyleAlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define StyleAlignFlags_ALIAS (StyleAlignFlags){ .bits = (uint8_t)(StyleAlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+/**
+ * An arbitrary identifier for a native (OS compositor) surface
+ */
+struct StyleNativeSurfaceId {
+  uint64_t _0;
+};
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeSurfaceId_DEBUG_OVERLAY (StyleNativeSurfaceId){ ._0 = UINT64_MAX }
+
+struct StyleNativeTileId {
+  struct StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+};
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeTileId_DEBUG_OVERLAY (StyleNativeTileId){ .surface_id = StyleNativeSurfaceId_DEBUG_OVERLAY, .x = 0, .y = 0 }
+
+void root(struct StyleAlignFlags flags, struct StyleNativeTileId tile);
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.compat.c b/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.compat.c
new file mode 100644
index 0000000..901dd6e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.compat.c
@@ -0,0 +1,67 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+struct StyleAlignFlags {
+  uint8_t bits;
+};
+/**
+ * 'auto'
+ */
+#define StyleAlignFlags_AUTO (StyleAlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define StyleAlignFlags_NORMAL (StyleAlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define StyleAlignFlags_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define StyleAlignFlags_END (StyleAlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define StyleAlignFlags_ALIAS (StyleAlignFlags){ .bits = (uint8_t)(StyleAlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+/**
+ * An arbitrary identifier for a native (OS compositor) surface
+ */
+struct StyleNativeSurfaceId {
+  uint64_t _0;
+};
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeSurfaceId_DEBUG_OVERLAY (StyleNativeSurfaceId){ ._0 = UINT64_MAX }
+
+struct StyleNativeTileId {
+  struct StyleNativeSurfaceId surface_id;
+  int32_t x;
+  int32_t y;
+};
+/**
+ * A special id for the native surface that is used for debug / profiler overlays.
+ */
+#define StyleNativeTileId_DEBUG_OVERLAY (StyleNativeTileId){ .surface_id = StyleNativeSurfaceId_DEBUG_OVERLAY, .x = 0, .y = 0 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct StyleAlignFlags flags, struct StyleNativeTileId tile);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.pyx b/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.pyx
new file mode 100644
index 0000000..86697bd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/associated_in_body.tag.pyx
@@ -0,0 +1,41 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # Constants shared by multiple CSS Box Alignment properties
+  #
+  # These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+  cdef struct StyleAlignFlags:
+    uint8_t bits;
+  # 'auto'
+  const StyleAlignFlags StyleAlignFlags_AUTO # = <StyleAlignFlags>{ <uint8_t>0 }
+  # 'normal'
+  const StyleAlignFlags StyleAlignFlags_NORMAL # = <StyleAlignFlags>{ <uint8_t>1 }
+  # 'start'
+  const StyleAlignFlags StyleAlignFlags_START # = <StyleAlignFlags>{ <uint8_t>(1 << 1) }
+  # 'end'
+  const StyleAlignFlags StyleAlignFlags_END # = <StyleAlignFlags>{ <uint8_t>(1 << 2) }
+  const StyleAlignFlags StyleAlignFlags_ALIAS # = <StyleAlignFlags>{ <uint8_t>(StyleAlignFlags_END).bits }
+  # 'flex-start'
+  const StyleAlignFlags StyleAlignFlags_FLEX_START # = <StyleAlignFlags>{ <uint8_t>(1 << 3) }
+  const StyleAlignFlags StyleAlignFlags_MIXED # = <StyleAlignFlags>{ <uint8_t>(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+  const StyleAlignFlags StyleAlignFlags_MIXED_SELF # = <StyleAlignFlags>{ <uint8_t>(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
+
+  # An arbitrary identifier for a native (OS compositor) surface
+  cdef struct StyleNativeSurfaceId:
+    uint64_t _0;
+  # A special id for the native surface that is used for debug / profiler overlays.
+  const StyleNativeSurfaceId StyleNativeSurfaceId_DEBUG_OVERLAY # = <StyleNativeSurfaceId>{ UINT64_MAX }
+
+  cdef struct StyleNativeTileId:
+    StyleNativeSurfaceId surface_id;
+    int32_t x;
+    int32_t y;
+  # A special id for the native surface that is used for debug / profiler overlays.
+  const StyleNativeTileId StyleNativeTileId_DEBUG_OVERLAY # = <StyleNativeTileId>{ StyleNativeSurfaceId_DEBUG_OVERLAY, 0, 0 }
+
+  void root(StyleAlignFlags flags, StyleNativeTileId tile);
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.both.c b/cbindgen-0.24.5/tests/expectations/bitfield.both.c
new file mode 100644
index 0000000..7505f46
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct HasBitfields {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+} HasBitfields;
+
+void root(const struct HasBitfields*);
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.both.compat.c b/cbindgen-0.24.5/tests/expectations/bitfield.both.compat.c
new file mode 100644
index 0000000..b4ad797
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct HasBitfields {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+} HasBitfields;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct HasBitfields*);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.c b/cbindgen-0.24.5/tests/expectations/bitfield.c
new file mode 100644
index 0000000..d54fa5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+} HasBitfields;
+
+void root(const HasBitfields*);
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.compat.c b/cbindgen-0.24.5/tests/expectations/bitfield.compat.c
new file mode 100644
index 0000000..aa906fa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+} HasBitfields;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const HasBitfields*);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.cpp b/cbindgen-0.24.5/tests/expectations/bitfield.cpp
new file mode 100644
index 0000000..3deb53f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct HasBitfields {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+};
+
+extern "C" {
+
+void root(const HasBitfields*);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.pyx b/cbindgen-0.24.5/tests/expectations/bitfield.pyx
new file mode 100644
index 0000000..721b890
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct HasBitfields:
+    uint64_t foo;
+    uint64_t bar;
+
+  void root(const HasBitfields*);
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.tag.c b/cbindgen-0.24.5/tests/expectations/bitfield.tag.c
new file mode 100644
index 0000000..db327af
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct HasBitfields {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+};
+
+void root(const struct HasBitfields*);
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.tag.compat.c b/cbindgen-0.24.5/tests/expectations/bitfield.tag.compat.c
new file mode 100644
index 0000000..6aa8aed
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct HasBitfields {
+  uint64_t foo: 8;
+  uint64_t bar: 56;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct HasBitfields*);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/bitfield.tag.pyx b/cbindgen-0.24.5/tests/expectations/bitfield.tag.pyx
new file mode 100644
index 0000000..d4cb32f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitfield.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct HasBitfields:
+    uint64_t foo;
+    uint64_t bar;
+
+  void root(const HasBitfields*);
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.both.c b/cbindgen-0.24.5/tests/expectations/bitflags.both.c
new file mode 100644
index 0000000..b5cb6a7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.both.c
@@ -0,0 +1,55 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct AlignFlags {
+  uint8_t bits;
+} AlignFlags;
+/**
+ * 'auto'
+ */
+#define AlignFlags_AUTO (AlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define AlignFlags_NORMAL (AlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define AlignFlags_START (AlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define AlignFlags_END (AlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define AlignFlags_ALIAS (AlignFlags){ .bits = (uint8_t)(AlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define AlignFlags_FLEX_START (AlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define AlignFlags_MIXED (AlignFlags){ .bits = (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+#define AlignFlags_MIXED_SELF (AlignFlags){ .bits = (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+typedef struct DebugFlags {
+  uint32_t bits;
+} DebugFlags;
+/**
+ * Flag with the topmost bit set of the u32
+ */
+#define DebugFlags_BIGGEST_ALLOWED (DebugFlags){ .bits = (uint32_t)(1 << 31) }
+
+typedef struct LargeFlags {
+  uint64_t bits;
+} LargeFlags;
+/**
+ * Flag with a very large shift that usually would be narrowed.
+ */
+#define LargeFlags_LARGE_SHIFT (LargeFlags){ .bits = (uint64_t)(1ull << 44) }
+#define LargeFlags_INVERTED (LargeFlags){ .bits = (uint64_t)~(LargeFlags_LARGE_SHIFT).bits }
+
+void root(struct AlignFlags flags, struct DebugFlags bigger_flags, struct LargeFlags largest_flags);
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.both.compat.c b/cbindgen-0.24.5/tests/expectations/bitflags.both.compat.c
new file mode 100644
index 0000000..3572662
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.both.compat.c
@@ -0,0 +1,63 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct AlignFlags {
+  uint8_t bits;
+} AlignFlags;
+/**
+ * 'auto'
+ */
+#define AlignFlags_AUTO (AlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define AlignFlags_NORMAL (AlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define AlignFlags_START (AlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define AlignFlags_END (AlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define AlignFlags_ALIAS (AlignFlags){ .bits = (uint8_t)(AlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define AlignFlags_FLEX_START (AlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define AlignFlags_MIXED (AlignFlags){ .bits = (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+#define AlignFlags_MIXED_SELF (AlignFlags){ .bits = (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+typedef struct DebugFlags {
+  uint32_t bits;
+} DebugFlags;
+/**
+ * Flag with the topmost bit set of the u32
+ */
+#define DebugFlags_BIGGEST_ALLOWED (DebugFlags){ .bits = (uint32_t)(1 << 31) }
+
+typedef struct LargeFlags {
+  uint64_t bits;
+} LargeFlags;
+/**
+ * Flag with a very large shift that usually would be narrowed.
+ */
+#define LargeFlags_LARGE_SHIFT (LargeFlags){ .bits = (uint64_t)(1ull << 44) }
+#define LargeFlags_INVERTED (LargeFlags){ .bits = (uint64_t)~(LargeFlags_LARGE_SHIFT).bits }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct AlignFlags flags, struct DebugFlags bigger_flags, struct LargeFlags largest_flags);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.c b/cbindgen-0.24.5/tests/expectations/bitflags.c
new file mode 100644
index 0000000..9af76af
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.c
@@ -0,0 +1,55 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct {
+  uint8_t bits;
+} AlignFlags;
+/**
+ * 'auto'
+ */
+#define AlignFlags_AUTO (AlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define AlignFlags_NORMAL (AlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define AlignFlags_START (AlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define AlignFlags_END (AlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define AlignFlags_ALIAS (AlignFlags){ .bits = (uint8_t)(AlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define AlignFlags_FLEX_START (AlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define AlignFlags_MIXED (AlignFlags){ .bits = (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+#define AlignFlags_MIXED_SELF (AlignFlags){ .bits = (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+typedef struct {
+  uint32_t bits;
+} DebugFlags;
+/**
+ * Flag with the topmost bit set of the u32
+ */
+#define DebugFlags_BIGGEST_ALLOWED (DebugFlags){ .bits = (uint32_t)(1 << 31) }
+
+typedef struct {
+  uint64_t bits;
+} LargeFlags;
+/**
+ * Flag with a very large shift that usually would be narrowed.
+ */
+#define LargeFlags_LARGE_SHIFT (LargeFlags){ .bits = (uint64_t)(1ull << 44) }
+#define LargeFlags_INVERTED (LargeFlags){ .bits = (uint64_t)~(LargeFlags_LARGE_SHIFT).bits }
+
+void root(AlignFlags flags, DebugFlags bigger_flags, LargeFlags largest_flags);
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.compat.c b/cbindgen-0.24.5/tests/expectations/bitflags.compat.c
new file mode 100644
index 0000000..863de08
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.compat.c
@@ -0,0 +1,63 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+typedef struct {
+  uint8_t bits;
+} AlignFlags;
+/**
+ * 'auto'
+ */
+#define AlignFlags_AUTO (AlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define AlignFlags_NORMAL (AlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define AlignFlags_START (AlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define AlignFlags_END (AlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define AlignFlags_ALIAS (AlignFlags){ .bits = (uint8_t)(AlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define AlignFlags_FLEX_START (AlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define AlignFlags_MIXED (AlignFlags){ .bits = (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+#define AlignFlags_MIXED_SELF (AlignFlags){ .bits = (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+typedef struct {
+  uint32_t bits;
+} DebugFlags;
+/**
+ * Flag with the topmost bit set of the u32
+ */
+#define DebugFlags_BIGGEST_ALLOWED (DebugFlags){ .bits = (uint32_t)(1 << 31) }
+
+typedef struct {
+  uint64_t bits;
+} LargeFlags;
+/**
+ * Flag with a very large shift that usually would be narrowed.
+ */
+#define LargeFlags_LARGE_SHIFT (LargeFlags){ .bits = (uint64_t)(1ull << 44) }
+#define LargeFlags_INVERTED (LargeFlags){ .bits = (uint64_t)~(LargeFlags_LARGE_SHIFT).bits }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(AlignFlags flags, DebugFlags bigger_flags, LargeFlags largest_flags);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.cpp b/cbindgen-0.24.5/tests/expectations/bitflags.cpp
new file mode 100644
index 0000000..6ed4736
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.cpp
@@ -0,0 +1,128 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+/// Constants shared by multiple CSS Box Alignment properties
+///
+/// These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+struct AlignFlags {
+  uint8_t bits;
+
+  constexpr explicit operator bool() const {
+    return !!bits;
+  }
+  constexpr AlignFlags operator~() const {
+    return AlignFlags { static_cast<decltype(bits)>(~bits) };
+  }
+  constexpr AlignFlags operator|(const AlignFlags& other) const {
+    return AlignFlags { static_cast<decltype(bits)>(this->bits | other.bits) };
+  }
+  AlignFlags& operator|=(const AlignFlags& other) {
+    *this = (*this | other);
+    return *this;
+  }
+  constexpr AlignFlags operator&(const AlignFlags& other) const {
+    return AlignFlags { static_cast<decltype(bits)>(this->bits & other.bits) };
+  }
+  AlignFlags& operator&=(const AlignFlags& other) {
+    *this = (*this & other);
+    return *this;
+  }
+  constexpr AlignFlags operator^(const AlignFlags& other) const {
+    return AlignFlags { static_cast<decltype(bits)>(this->bits ^ other.bits) };
+  }
+  AlignFlags& operator^=(const AlignFlags& other) {
+    *this = (*this ^ other);
+    return *this;
+  }
+};
+/// 'auto'
+constexpr static const AlignFlags AlignFlags_AUTO = AlignFlags{ /* .bits = */ (uint8_t)0 };
+/// 'normal'
+constexpr static const AlignFlags AlignFlags_NORMAL = AlignFlags{ /* .bits = */ (uint8_t)1 };
+/// 'start'
+constexpr static const AlignFlags AlignFlags_START = AlignFlags{ /* .bits = */ (uint8_t)(1 << 1) };
+/// 'end'
+constexpr static const AlignFlags AlignFlags_END = AlignFlags{ /* .bits = */ (uint8_t)(1 << 2) };
+constexpr static const AlignFlags AlignFlags_ALIAS = AlignFlags{ /* .bits = */ (uint8_t)(AlignFlags_END).bits };
+/// 'flex-start'
+constexpr static const AlignFlags AlignFlags_FLEX_START = AlignFlags{ /* .bits = */ (uint8_t)(1 << 3) };
+constexpr static const AlignFlags AlignFlags_MIXED = AlignFlags{ /* .bits = */ (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) };
+constexpr static const AlignFlags AlignFlags_MIXED_SELF = AlignFlags{ /* .bits = */ (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) };
+
+struct DebugFlags {
+  uint32_t bits;
+
+  constexpr explicit operator bool() const {
+    return !!bits;
+  }
+  constexpr DebugFlags operator~() const {
+    return DebugFlags { static_cast<decltype(bits)>(~bits) };
+  }
+  constexpr DebugFlags operator|(const DebugFlags& other) const {
+    return DebugFlags { static_cast<decltype(bits)>(this->bits | other.bits) };
+  }
+  DebugFlags& operator|=(const DebugFlags& other) {
+    *this = (*this | other);
+    return *this;
+  }
+  constexpr DebugFlags operator&(const DebugFlags& other) const {
+    return DebugFlags { static_cast<decltype(bits)>(this->bits & other.bits) };
+  }
+  DebugFlags& operator&=(const DebugFlags& other) {
+    *this = (*this & other);
+    return *this;
+  }
+  constexpr DebugFlags operator^(const DebugFlags& other) const {
+    return DebugFlags { static_cast<decltype(bits)>(this->bits ^ other.bits) };
+  }
+  DebugFlags& operator^=(const DebugFlags& other) {
+    *this = (*this ^ other);
+    return *this;
+  }
+};
+/// Flag with the topmost bit set of the u32
+constexpr static const DebugFlags DebugFlags_BIGGEST_ALLOWED = DebugFlags{ /* .bits = */ (uint32_t)(1 << 31) };
+
+struct LargeFlags {
+  uint64_t bits;
+
+  constexpr explicit operator bool() const {
+    return !!bits;
+  }
+  constexpr LargeFlags operator~() const {
+    return LargeFlags { static_cast<decltype(bits)>(~bits) };
+  }
+  constexpr LargeFlags operator|(const LargeFlags& other) const {
+    return LargeFlags { static_cast<decltype(bits)>(this->bits | other.bits) };
+  }
+  LargeFlags& operator|=(const LargeFlags& other) {
+    *this = (*this | other);
+    return *this;
+  }
+  constexpr LargeFlags operator&(const LargeFlags& other) const {
+    return LargeFlags { static_cast<decltype(bits)>(this->bits & other.bits) };
+  }
+  LargeFlags& operator&=(const LargeFlags& other) {
+    *this = (*this & other);
+    return *this;
+  }
+  constexpr LargeFlags operator^(const LargeFlags& other) const {
+    return LargeFlags { static_cast<decltype(bits)>(this->bits ^ other.bits) };
+  }
+  LargeFlags& operator^=(const LargeFlags& other) {
+    *this = (*this ^ other);
+    return *this;
+  }
+};
+/// Flag with a very large shift that usually would be narrowed.
+constexpr static const LargeFlags LargeFlags_LARGE_SHIFT = LargeFlags{ /* .bits = */ (uint64_t)(1ull << 44) };
+constexpr static const LargeFlags LargeFlags_INVERTED = LargeFlags{ /* .bits = */ (uint64_t)~(LargeFlags_LARGE_SHIFT).bits };
+
+extern "C" {
+
+void root(AlignFlags flags, DebugFlags bigger_flags, LargeFlags largest_flags);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.pyx b/cbindgen-0.24.5/tests/expectations/bitflags.pyx
new file mode 100644
index 0000000..e3d1040
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.pyx
@@ -0,0 +1,39 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # Constants shared by multiple CSS Box Alignment properties
+  #
+  # These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+  ctypedef struct AlignFlags:
+    uint8_t bits;
+  # 'auto'
+  const AlignFlags AlignFlags_AUTO # = <AlignFlags>{ <uint8_t>0 }
+  # 'normal'
+  const AlignFlags AlignFlags_NORMAL # = <AlignFlags>{ <uint8_t>1 }
+  # 'start'
+  const AlignFlags AlignFlags_START # = <AlignFlags>{ <uint8_t>(1 << 1) }
+  # 'end'
+  const AlignFlags AlignFlags_END # = <AlignFlags>{ <uint8_t>(1 << 2) }
+  const AlignFlags AlignFlags_ALIAS # = <AlignFlags>{ <uint8_t>(AlignFlags_END).bits }
+  # 'flex-start'
+  const AlignFlags AlignFlags_FLEX_START # = <AlignFlags>{ <uint8_t>(1 << 3) }
+  const AlignFlags AlignFlags_MIXED # = <AlignFlags>{ <uint8_t>(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+  const AlignFlags AlignFlags_MIXED_SELF # = <AlignFlags>{ <uint8_t>(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+  ctypedef struct DebugFlags:
+    uint32_t bits;
+  # Flag with the topmost bit set of the u32
+  const DebugFlags DebugFlags_BIGGEST_ALLOWED # = <DebugFlags>{ <uint32_t>(1 << 31) }
+
+  ctypedef struct LargeFlags:
+    uint64_t bits;
+  # Flag with a very large shift that usually would be narrowed.
+  const LargeFlags LargeFlags_LARGE_SHIFT # = <LargeFlags>{ <uint64_t>(1ull << 44) }
+  const LargeFlags LargeFlags_INVERTED # = <LargeFlags>{ <uint64_t>~(LargeFlags_LARGE_SHIFT).bits }
+
+  void root(AlignFlags flags, DebugFlags bigger_flags, LargeFlags largest_flags);
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.tag.c b/cbindgen-0.24.5/tests/expectations/bitflags.tag.c
new file mode 100644
index 0000000..c4be368
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.tag.c
@@ -0,0 +1,55 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+struct AlignFlags {
+  uint8_t bits;
+};
+/**
+ * 'auto'
+ */
+#define AlignFlags_AUTO (AlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define AlignFlags_NORMAL (AlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define AlignFlags_START (AlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define AlignFlags_END (AlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define AlignFlags_ALIAS (AlignFlags){ .bits = (uint8_t)(AlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define AlignFlags_FLEX_START (AlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define AlignFlags_MIXED (AlignFlags){ .bits = (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+#define AlignFlags_MIXED_SELF (AlignFlags){ .bits = (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+struct DebugFlags {
+  uint32_t bits;
+};
+/**
+ * Flag with the topmost bit set of the u32
+ */
+#define DebugFlags_BIGGEST_ALLOWED (DebugFlags){ .bits = (uint32_t)(1 << 31) }
+
+struct LargeFlags {
+  uint64_t bits;
+};
+/**
+ * Flag with a very large shift that usually would be narrowed.
+ */
+#define LargeFlags_LARGE_SHIFT (LargeFlags){ .bits = (uint64_t)(1ull << 44) }
+#define LargeFlags_INVERTED (LargeFlags){ .bits = (uint64_t)~(LargeFlags_LARGE_SHIFT).bits }
+
+void root(struct AlignFlags flags, struct DebugFlags bigger_flags, struct LargeFlags largest_flags);
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.tag.compat.c b/cbindgen-0.24.5/tests/expectations/bitflags.tag.compat.c
new file mode 100644
index 0000000..d12ba40
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.tag.compat.c
@@ -0,0 +1,63 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * Constants shared by multiple CSS Box Alignment properties
+ *
+ * These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+ */
+struct AlignFlags {
+  uint8_t bits;
+};
+/**
+ * 'auto'
+ */
+#define AlignFlags_AUTO (AlignFlags){ .bits = (uint8_t)0 }
+/**
+ * 'normal'
+ */
+#define AlignFlags_NORMAL (AlignFlags){ .bits = (uint8_t)1 }
+/**
+ * 'start'
+ */
+#define AlignFlags_START (AlignFlags){ .bits = (uint8_t)(1 << 1) }
+/**
+ * 'end'
+ */
+#define AlignFlags_END (AlignFlags){ .bits = (uint8_t)(1 << 2) }
+#define AlignFlags_ALIAS (AlignFlags){ .bits = (uint8_t)(AlignFlags_END).bits }
+/**
+ * 'flex-start'
+ */
+#define AlignFlags_FLEX_START (AlignFlags){ .bits = (uint8_t)(1 << 3) }
+#define AlignFlags_MIXED (AlignFlags){ .bits = (uint8_t)(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+#define AlignFlags_MIXED_SELF (AlignFlags){ .bits = (uint8_t)(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+struct DebugFlags {
+  uint32_t bits;
+};
+/**
+ * Flag with the topmost bit set of the u32
+ */
+#define DebugFlags_BIGGEST_ALLOWED (DebugFlags){ .bits = (uint32_t)(1 << 31) }
+
+struct LargeFlags {
+  uint64_t bits;
+};
+/**
+ * Flag with a very large shift that usually would be narrowed.
+ */
+#define LargeFlags_LARGE_SHIFT (LargeFlags){ .bits = (uint64_t)(1ull << 44) }
+#define LargeFlags_INVERTED (LargeFlags){ .bits = (uint64_t)~(LargeFlags_LARGE_SHIFT).bits }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct AlignFlags flags, struct DebugFlags bigger_flags, struct LargeFlags largest_flags);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/bitflags.tag.pyx b/cbindgen-0.24.5/tests/expectations/bitflags.tag.pyx
new file mode 100644
index 0000000..d5f2df6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/bitflags.tag.pyx
@@ -0,0 +1,39 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # Constants shared by multiple CSS Box Alignment properties
+  #
+  # These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+  cdef struct AlignFlags:
+    uint8_t bits;
+  # 'auto'
+  const AlignFlags AlignFlags_AUTO # = <AlignFlags>{ <uint8_t>0 }
+  # 'normal'
+  const AlignFlags AlignFlags_NORMAL # = <AlignFlags>{ <uint8_t>1 }
+  # 'start'
+  const AlignFlags AlignFlags_START # = <AlignFlags>{ <uint8_t>(1 << 1) }
+  # 'end'
+  const AlignFlags AlignFlags_END # = <AlignFlags>{ <uint8_t>(1 << 2) }
+  const AlignFlags AlignFlags_ALIAS # = <AlignFlags>{ <uint8_t>(AlignFlags_END).bits }
+  # 'flex-start'
+  const AlignFlags AlignFlags_FLEX_START # = <AlignFlags>{ <uint8_t>(1 << 3) }
+  const AlignFlags AlignFlags_MIXED # = <AlignFlags>{ <uint8_t>(((1 << 4) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+  const AlignFlags AlignFlags_MIXED_SELF # = <AlignFlags>{ <uint8_t>(((1 << 5) | (AlignFlags_FLEX_START).bits) | (AlignFlags_END).bits) }
+
+  cdef struct DebugFlags:
+    uint32_t bits;
+  # Flag with the topmost bit set of the u32
+  const DebugFlags DebugFlags_BIGGEST_ALLOWED # = <DebugFlags>{ <uint32_t>(1 << 31) }
+
+  cdef struct LargeFlags:
+    uint64_t bits;
+  # Flag with a very large shift that usually would be narrowed.
+  const LargeFlags LargeFlags_LARGE_SHIFT # = <LargeFlags>{ <uint64_t>(1ull << 44) }
+  const LargeFlags LargeFlags_INVERTED # = <LargeFlags>{ <uint64_t>~(LargeFlags_LARGE_SHIFT).bits }
+
+  void root(AlignFlags flags, DebugFlags bigger_flags, LargeFlags largest_flags);
diff --git a/cbindgen-0.24.5/tests/expectations/body.both.c b/cbindgen-0.24.5/tests/expectations/body.both.c
new file mode 100644
index 0000000..54368e5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.both.c
@@ -0,0 +1,93 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum MyCLikeEnum {
+  Foo1,
+  Bar1,
+  Baz1,
+} MyCLikeEnum;
+
+typedef enum MyCLikeEnum_Prepended {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+} MyCLikeEnum_Prepended;
+
+typedef struct MyFancyStruct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+} MyFancyStruct;
+
+typedef enum MyFancyEnum_Tag {
+  Foo,
+  Bar,
+  Baz,
+} MyFancyEnum_Tag;
+
+typedef struct MyFancyEnum {
+  MyFancyEnum_Tag tag;
+  union {
+    struct {
+      int32_t bar;
+    };
+    struct {
+      int32_t baz;
+    };
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+} MyFancyEnum;
+
+typedef union MyUnion {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+} MyUnion;
+
+typedef struct MyFancyStruct_Prepended {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+} MyFancyStruct_Prepended;
+
+typedef enum MyFancyEnum_Prepended_Tag {
+  Foo_Prepended,
+  Bar_Prepended,
+  Baz_Prepended,
+} MyFancyEnum_Prepended_Tag;
+
+typedef struct MyFancyEnum_Prepended {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  MyFancyEnum_Prepended_Tag tag;
+  union {
+    struct {
+      int32_t bar_prepended;
+    };
+    struct {
+      int32_t baz_prepended;
+    };
+  };
+} MyFancyEnum_Prepended;
+
+typedef union MyUnion_Prepended {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+} MyUnion_Prepended;
+
+void root(struct MyFancyStruct s,
+          struct MyFancyEnum e,
+          enum MyCLikeEnum c,
+          union MyUnion u,
+          struct MyFancyStruct_Prepended sp,
+          struct MyFancyEnum_Prepended ep,
+          enum MyCLikeEnum_Prepended cp,
+          union MyUnion_Prepended up);
diff --git a/cbindgen-0.24.5/tests/expectations/body.both.compat.c b/cbindgen-0.24.5/tests/expectations/body.both.compat.c
new file mode 100644
index 0000000..f5381ff
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.both.compat.c
@@ -0,0 +1,101 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum MyCLikeEnum {
+  Foo1,
+  Bar1,
+  Baz1,
+} MyCLikeEnum;
+
+typedef enum MyCLikeEnum_Prepended {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+} MyCLikeEnum_Prepended;
+
+typedef struct MyFancyStruct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+} MyFancyStruct;
+
+typedef enum MyFancyEnum_Tag {
+  Foo,
+  Bar,
+  Baz,
+} MyFancyEnum_Tag;
+
+typedef struct MyFancyEnum {
+  MyFancyEnum_Tag tag;
+  union {
+    struct {
+      int32_t bar;
+    };
+    struct {
+      int32_t baz;
+    };
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+} MyFancyEnum;
+
+typedef union MyUnion {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+} MyUnion;
+
+typedef struct MyFancyStruct_Prepended {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+} MyFancyStruct_Prepended;
+
+typedef enum MyFancyEnum_Prepended_Tag {
+  Foo_Prepended,
+  Bar_Prepended,
+  Baz_Prepended,
+} MyFancyEnum_Prepended_Tag;
+
+typedef struct MyFancyEnum_Prepended {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  MyFancyEnum_Prepended_Tag tag;
+  union {
+    struct {
+      int32_t bar_prepended;
+    };
+    struct {
+      int32_t baz_prepended;
+    };
+  };
+} MyFancyEnum_Prepended;
+
+typedef union MyUnion_Prepended {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+} MyUnion_Prepended;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct MyFancyStruct s,
+          struct MyFancyEnum e,
+          enum MyCLikeEnum c,
+          union MyUnion u,
+          struct MyFancyStruct_Prepended sp,
+          struct MyFancyEnum_Prepended ep,
+          enum MyCLikeEnum_Prepended cp,
+          union MyUnion_Prepended up);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/body.c b/cbindgen-0.24.5/tests/expectations/body.c
new file mode 100644
index 0000000..8e5e530
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.c
@@ -0,0 +1,93 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  Foo1,
+  Bar1,
+  Baz1,
+} MyCLikeEnum;
+
+typedef enum {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+} MyCLikeEnum_Prepended;
+
+typedef struct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+} MyFancyStruct;
+
+typedef enum {
+  Foo,
+  Bar,
+  Baz,
+} MyFancyEnum_Tag;
+
+typedef struct {
+  MyFancyEnum_Tag tag;
+  union {
+    struct {
+      int32_t bar;
+    };
+    struct {
+      int32_t baz;
+    };
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+} MyFancyEnum;
+
+typedef union {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+} MyUnion;
+
+typedef struct {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+} MyFancyStruct_Prepended;
+
+typedef enum {
+  Foo_Prepended,
+  Bar_Prepended,
+  Baz_Prepended,
+} MyFancyEnum_Prepended_Tag;
+
+typedef struct {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  MyFancyEnum_Prepended_Tag tag;
+  union {
+    struct {
+      int32_t bar_prepended;
+    };
+    struct {
+      int32_t baz_prepended;
+    };
+  };
+} MyFancyEnum_Prepended;
+
+typedef union {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+} MyUnion_Prepended;
+
+void root(MyFancyStruct s,
+          MyFancyEnum e,
+          MyCLikeEnum c,
+          MyUnion u,
+          MyFancyStruct_Prepended sp,
+          MyFancyEnum_Prepended ep,
+          MyCLikeEnum_Prepended cp,
+          MyUnion_Prepended up);
diff --git a/cbindgen-0.24.5/tests/expectations/body.compat.c b/cbindgen-0.24.5/tests/expectations/body.compat.c
new file mode 100644
index 0000000..c92d27a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.compat.c
@@ -0,0 +1,101 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  Foo1,
+  Bar1,
+  Baz1,
+} MyCLikeEnum;
+
+typedef enum {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+} MyCLikeEnum_Prepended;
+
+typedef struct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+} MyFancyStruct;
+
+typedef enum {
+  Foo,
+  Bar,
+  Baz,
+} MyFancyEnum_Tag;
+
+typedef struct {
+  MyFancyEnum_Tag tag;
+  union {
+    struct {
+      int32_t bar;
+    };
+    struct {
+      int32_t baz;
+    };
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+} MyFancyEnum;
+
+typedef union {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+} MyUnion;
+
+typedef struct {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+} MyFancyStruct_Prepended;
+
+typedef enum {
+  Foo_Prepended,
+  Bar_Prepended,
+  Baz_Prepended,
+} MyFancyEnum_Prepended_Tag;
+
+typedef struct {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  MyFancyEnum_Prepended_Tag tag;
+  union {
+    struct {
+      int32_t bar_prepended;
+    };
+    struct {
+      int32_t baz_prepended;
+    };
+  };
+} MyFancyEnum_Prepended;
+
+typedef union {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+} MyUnion_Prepended;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(MyFancyStruct s,
+          MyFancyEnum e,
+          MyCLikeEnum c,
+          MyUnion u,
+          MyFancyStruct_Prepended sp,
+          MyFancyEnum_Prepended ep,
+          MyCLikeEnum_Prepended cp,
+          MyUnion_Prepended up);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/body.cpp b/cbindgen-0.24.5/tests/expectations/body.cpp
new file mode 100644
index 0000000..c982576
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.cpp
@@ -0,0 +1,106 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class MyCLikeEnum {
+  Foo1,
+  Bar1,
+  Baz1,
+};
+
+enum class MyCLikeEnum_Prepended {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+};
+
+struct MyFancyStruct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+};
+
+struct MyFancyEnum {
+  enum class Tag {
+    Foo,
+    Bar,
+    Baz,
+  };
+
+  struct Bar_Body {
+    int32_t _0;
+  };
+
+  struct Baz_Body {
+    int32_t _0;
+  };
+
+  Tag tag;
+  union {
+    Bar_Body bar;
+    Baz_Body baz;
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+};
+
+union MyUnion {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+};
+
+struct MyFancyStruct_Prepended {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+};
+
+struct MyFancyEnum_Prepended {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  enum class Tag {
+    Foo_Prepended,
+    Bar_Prepended,
+    Baz_Prepended,
+  };
+
+  struct Bar_Prepended_Body {
+    int32_t _0;
+  };
+
+  struct Baz_Prepended_Body {
+    int32_t _0;
+  };
+
+  Tag tag;
+  union {
+    Bar_Prepended_Body bar_prepended;
+    Baz_Prepended_Body baz_prepended;
+  };
+};
+
+union MyUnion_Prepended {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+};
+
+extern "C" {
+
+void root(MyFancyStruct s,
+          MyFancyEnum e,
+          MyCLikeEnum c,
+          MyUnion u,
+          MyFancyStruct_Prepended sp,
+          MyFancyEnum_Prepended ep,
+          MyCLikeEnum_Prepended cp,
+          MyUnion_Prepended up);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/body.pyx b/cbindgen-0.24.5/tests/expectations/body.pyx
new file mode 100644
index 0000000..6ea366f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.pyx
@@ -0,0 +1,74 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef enum MyCLikeEnum:
+    Foo1,
+    Bar1,
+    Baz1,
+
+  ctypedef enum MyCLikeEnum_Prepended:
+    Foo1_Prepended,
+    Bar1_Prepended,
+    Baz1_Prepended,
+
+  ctypedef struct MyFancyStruct:
+    int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+
+  ctypedef enum MyFancyEnum_Tag:
+    Foo,
+    Bar,
+    Baz,
+
+  ctypedef struct MyFancyEnum:
+    MyFancyEnum_Tag tag;
+    int32_t bar;
+    int32_t baz;
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+
+  ctypedef union MyUnion:
+    float f;
+    uint32_t u;
+  int32_t extra_member;
+
+  ctypedef struct MyFancyStruct_Prepended:
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+    int32_t i;
+
+  ctypedef enum MyFancyEnum_Prepended_Tag:
+    Foo_Prepended,
+    Bar_Prepended,
+    Baz_Prepended,
+
+  ctypedef struct MyFancyEnum_Prepended:
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+    MyFancyEnum_Prepended_Tag tag;
+    int32_t bar_prepended;
+    int32_t baz_prepended;
+
+  ctypedef union MyUnion_Prepended:
+    int32_t extra_member;
+    float f;
+    uint32_t u;
+
+  void root(MyFancyStruct s,
+            MyFancyEnum e,
+            MyCLikeEnum c,
+            MyUnion u,
+            MyFancyStruct_Prepended sp,
+            MyFancyEnum_Prepended ep,
+            MyCLikeEnum_Prepended cp,
+            MyUnion_Prepended up);
diff --git a/cbindgen-0.24.5/tests/expectations/body.tag.c b/cbindgen-0.24.5/tests/expectations/body.tag.c
new file mode 100644
index 0000000..41c134b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.tag.c
@@ -0,0 +1,93 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MyCLikeEnum {
+  Foo1,
+  Bar1,
+  Baz1,
+};
+
+enum MyCLikeEnum_Prepended {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+};
+
+struct MyFancyStruct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+};
+
+enum MyFancyEnum_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+
+struct MyFancyEnum {
+  enum MyFancyEnum_Tag tag;
+  union {
+    struct {
+      int32_t bar;
+    };
+    struct {
+      int32_t baz;
+    };
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+};
+
+union MyUnion {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+};
+
+struct MyFancyStruct_Prepended {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+};
+
+enum MyFancyEnum_Prepended_Tag {
+  Foo_Prepended,
+  Bar_Prepended,
+  Baz_Prepended,
+};
+
+struct MyFancyEnum_Prepended {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  enum MyFancyEnum_Prepended_Tag tag;
+  union {
+    struct {
+      int32_t bar_prepended;
+    };
+    struct {
+      int32_t baz_prepended;
+    };
+  };
+};
+
+union MyUnion_Prepended {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+};
+
+void root(struct MyFancyStruct s,
+          struct MyFancyEnum e,
+          enum MyCLikeEnum c,
+          union MyUnion u,
+          struct MyFancyStruct_Prepended sp,
+          struct MyFancyEnum_Prepended ep,
+          enum MyCLikeEnum_Prepended cp,
+          union MyUnion_Prepended up);
diff --git a/cbindgen-0.24.5/tests/expectations/body.tag.compat.c b/cbindgen-0.24.5/tests/expectations/body.tag.compat.c
new file mode 100644
index 0000000..77c8277
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.tag.compat.c
@@ -0,0 +1,101 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MyCLikeEnum {
+  Foo1,
+  Bar1,
+  Baz1,
+};
+
+enum MyCLikeEnum_Prepended {
+  Foo1_Prepended,
+  Bar1_Prepended,
+  Baz1_Prepended,
+};
+
+struct MyFancyStruct {
+  int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+};
+
+enum MyFancyEnum_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+
+struct MyFancyEnum {
+  enum MyFancyEnum_Tag tag;
+  union {
+    struct {
+      int32_t bar;
+    };
+    struct {
+      int32_t baz;
+    };
+  };
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+};
+
+union MyUnion {
+  float f;
+  uint32_t u;
+  int32_t extra_member;
+};
+
+struct MyFancyStruct_Prepended {
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+  int32_t i;
+};
+
+enum MyFancyEnum_Prepended_Tag {
+  Foo_Prepended,
+  Bar_Prepended,
+  Baz_Prepended,
+};
+
+struct MyFancyEnum_Prepended {
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+  enum MyFancyEnum_Prepended_Tag tag;
+  union {
+    struct {
+      int32_t bar_prepended;
+    };
+    struct {
+      int32_t baz_prepended;
+    };
+  };
+};
+
+union MyUnion_Prepended {
+    int32_t extra_member;
+  float f;
+  uint32_t u;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct MyFancyStruct s,
+          struct MyFancyEnum e,
+          enum MyCLikeEnum c,
+          union MyUnion u,
+          struct MyFancyStruct_Prepended sp,
+          struct MyFancyEnum_Prepended ep,
+          enum MyCLikeEnum_Prepended cp,
+          union MyUnion_Prepended up);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/body.tag.pyx b/cbindgen-0.24.5/tests/expectations/body.tag.pyx
new file mode 100644
index 0000000..15a63a4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/body.tag.pyx
@@ -0,0 +1,74 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum MyCLikeEnum:
+    Foo1,
+    Bar1,
+    Baz1,
+
+  cdef enum MyCLikeEnum_Prepended:
+    Foo1_Prepended,
+    Bar1_Prepended,
+    Baz1_Prepended,
+
+  cdef struct MyFancyStruct:
+    int32_t i;
+#ifdef __cplusplus
+    inline void foo();
+#endif
+
+  cdef enum MyFancyEnum_Tag:
+    Foo,
+    Bar,
+    Baz,
+
+  cdef struct MyFancyEnum:
+    MyFancyEnum_Tag tag;
+    int32_t bar;
+    int32_t baz;
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+
+  cdef union MyUnion:
+    float f;
+    uint32_t u;
+  int32_t extra_member;
+
+  cdef struct MyFancyStruct_Prepended:
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+    int32_t i;
+
+  cdef enum MyFancyEnum_Prepended_Tag:
+    Foo_Prepended,
+    Bar_Prepended,
+    Baz_Prepended,
+
+  cdef struct MyFancyEnum_Prepended:
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+    MyFancyEnum_Prepended_Tag tag;
+    int32_t bar_prepended;
+    int32_t baz_prepended;
+
+  cdef union MyUnion_Prepended:
+    int32_t extra_member;
+    float f;
+    uint32_t u;
+
+  void root(MyFancyStruct s,
+            MyFancyEnum e,
+            MyCLikeEnum c,
+            MyUnion u,
+            MyFancyStruct_Prepended sp,
+            MyFancyEnum_Prepended ep,
+            MyCLikeEnum_Prepended cp,
+            MyUnion_Prepended up);
diff --git a/cbindgen-0.24.5/tests/expectations/box.both.c b/cbindgen-0.24.5/tests/expectations/box.both.c
new file mode 100644
index 0000000..3a9f76a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.both.c
@@ -0,0 +1,32 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_____i32 NotReprC_____i32;
+
+typedef struct NotReprC_____i32 Foo;
+
+typedef struct MyStruct {
+  int32_t *number;
+} MyStruct;
+
+void root(const Foo *a, const struct MyStruct *with_box);
+
+void drop_box(int32_t *x);
+
+void drop_box_opt(int32_t *x);
diff --git a/cbindgen-0.24.5/tests/expectations/box.both.compat.c b/cbindgen-0.24.5/tests/expectations/box.both.compat.c
new file mode 100644
index 0000000..3177970
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.both.compat.c
@@ -0,0 +1,40 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_____i32 NotReprC_____i32;
+
+typedef struct NotReprC_____i32 Foo;
+
+typedef struct MyStruct {
+  int32_t *number;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_box);
+
+void drop_box(int32_t *x);
+
+void drop_box_opt(int32_t *x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/box.c b/cbindgen-0.24.5/tests/expectations/box.c
new file mode 100644
index 0000000..384632b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.c
@@ -0,0 +1,32 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_____i32 NotReprC_____i32;
+
+typedef NotReprC_____i32 Foo;
+
+typedef struct {
+  int32_t *number;
+} MyStruct;
+
+void root(const Foo *a, const MyStruct *with_box);
+
+void drop_box(int32_t *x);
+
+void drop_box_opt(int32_t *x);
diff --git a/cbindgen-0.24.5/tests/expectations/box.compat.c b/cbindgen-0.24.5/tests/expectations/box.compat.c
new file mode 100644
index 0000000..cc05edf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.compat.c
@@ -0,0 +1,40 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_____i32 NotReprC_____i32;
+
+typedef NotReprC_____i32 Foo;
+
+typedef struct {
+  int32_t *number;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const MyStruct *with_box);
+
+void drop_box(int32_t *x);
+
+void drop_box_opt(int32_t *x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/box.cpp b/cbindgen-0.24.5/tests/expectations/box.cpp
new file mode 100644
index 0000000..423c987
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.cpp
@@ -0,0 +1,41 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct NotReprC;
+
+template<typename T = void>
+struct Option;
+
+using Foo = NotReprC<Box<int32_t>>;
+
+struct MyStruct {
+  Box<int32_t> number;
+};
+
+extern "C" {
+
+void root(const Foo *a, const MyStruct *with_box);
+
+void drop_box(Box<int32_t> x);
+
+void drop_box_opt(Option<Box<int32_t>> x);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/box.pyx b/cbindgen-0.24.5/tests/expectations/box.pyx
new file mode 100644
index 0000000..366dafe
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.pyx
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct NotReprC_____i32:
+    pass
+
+  ctypedef NotReprC_____i32 Foo;
+
+  ctypedef struct MyStruct:
+    int32_t *number;
+
+  void root(const Foo *a, const MyStruct *with_box);
+
+  void drop_box(int32_t *x);
+
+  void drop_box_opt(int32_t *x);
diff --git a/cbindgen-0.24.5/tests/expectations/box.tag.c b/cbindgen-0.24.5/tests/expectations/box.tag.c
new file mode 100644
index 0000000..da0eb4a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.tag.c
@@ -0,0 +1,32 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC_____i32;
+
+typedef struct NotReprC_____i32 Foo;
+
+struct MyStruct {
+  int32_t *number;
+};
+
+void root(const Foo *a, const struct MyStruct *with_box);
+
+void drop_box(int32_t *x);
+
+void drop_box_opt(int32_t *x);
diff --git a/cbindgen-0.24.5/tests/expectations/box.tag.compat.c b/cbindgen-0.24.5/tests/expectations/box.tag.compat.c
new file mode 100644
index 0000000..a61e3a2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.tag.compat.c
@@ -0,0 +1,40 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC_____i32;
+
+typedef struct NotReprC_____i32 Foo;
+
+struct MyStruct {
+  int32_t *number;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_box);
+
+void drop_box(int32_t *x);
+
+void drop_box_opt(int32_t *x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/box.tag.pyx b/cbindgen-0.24.5/tests/expectations/box.tag.pyx
new file mode 100644
index 0000000..e50f19e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/box.tag.pyx
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct NotReprC_____i32:
+    pass
+
+  ctypedef NotReprC_____i32 Foo;
+
+  cdef struct MyStruct:
+    int32_t *number;
+
+  void root(const Foo *a, const MyStruct *with_box);
+
+  void drop_box(int32_t *x);
+
+  void drop_box_opt(int32_t *x);
diff --git a/cbindgen-0.24.5/tests/expectations/cdecl.c b/cbindgen-0.24.5/tests/expectations/cdecl.c
new file mode 100644
index 0000000..e3bf087
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cdecl.c
@@ -0,0 +1,38 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef void (*A)(void);
+
+typedef void (*B)(void);
+
+typedef bool (*C)(int32_t, int32_t);
+
+typedef bool (*(*D)(int32_t))(float);
+
+typedef const int32_t (*(*E)(void))[16];
+
+typedef const int32_t *F;
+
+typedef const int32_t *const *G;
+
+typedef int32_t *const *H;
+
+typedef const int32_t (*I)[16];
+
+typedef double (**J)(float);
+
+typedef int32_t K[16];
+
+typedef const int32_t *L[16];
+
+typedef bool (*M[16])(int32_t, int32_t);
+
+typedef void (*N[16])(int32_t, int32_t);
+
+typedef void (*P)(int32_t named1st, bool, bool named3rd, int32_t _);
+
+void (*O(void))(void);
+
+void root(A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, P p);
diff --git a/cbindgen-0.24.5/tests/expectations/cdecl.compat.c b/cbindgen-0.24.5/tests/expectations/cdecl.compat.c
new file mode 100644
index 0000000..1d1d11e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cdecl.compat.c
@@ -0,0 +1,46 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef void (*A)(void);
+
+typedef void (*B)(void);
+
+typedef bool (*C)(int32_t, int32_t);
+
+typedef bool (*(*D)(int32_t))(float);
+
+typedef const int32_t (*(*E)(void))[16];
+
+typedef const int32_t *F;
+
+typedef const int32_t *const *G;
+
+typedef int32_t *const *H;
+
+typedef const int32_t (*I)[16];
+
+typedef double (**J)(float);
+
+typedef int32_t K[16];
+
+typedef const int32_t *L[16];
+
+typedef bool (*M[16])(int32_t, int32_t);
+
+typedef void (*N[16])(int32_t, int32_t);
+
+typedef void (*P)(int32_t named1st, bool, bool named3rd, int32_t _);
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void (*O(void))(void);
+
+void root(A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, P p);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cdecl.cpp b/cbindgen-0.24.5/tests/expectations/cdecl.cpp
new file mode 100644
index 0000000..4545fe3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cdecl.cpp
@@ -0,0 +1,43 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+using A = void(*)();
+
+using B = void(*)();
+
+using C = bool(*)(int32_t, int32_t);
+
+using D = bool(*(*)(int32_t))(float);
+
+using E = const int32_t(*(*)())[16];
+
+using F = const int32_t*;
+
+using G = const int32_t*const *;
+
+using H = int32_t*const *;
+
+using I = const int32_t(*)[16];
+
+using J = double(**)(float);
+
+using K = int32_t[16];
+
+using L = const int32_t*[16];
+
+using M = bool(*[16])(int32_t, int32_t);
+
+using N = void(*[16])(int32_t, int32_t);
+
+using P = void(*)(int32_t named1st, bool, bool named3rd, int32_t _);
+
+extern "C" {
+
+void (*O())();
+
+void root(A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, P p);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/cdecl.pyx b/cbindgen-0.24.5/tests/expectations/cdecl.pyx
new file mode 100644
index 0000000..8edeb2e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cdecl.pyx
@@ -0,0 +1,41 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef void (*A)();
+
+  ctypedef void (*B)();
+
+  ctypedef bool (*C)(int32_t, int32_t);
+
+  ctypedef bool (*(*D)(int32_t))(float);
+
+  ctypedef const int32_t (*(*E)())[16];
+
+  ctypedef const int32_t *F;
+
+  ctypedef const int32_t *const *G;
+
+  ctypedef int32_t *const *H;
+
+  ctypedef const int32_t (*I)[16];
+
+  ctypedef double (**J)(float);
+
+  ctypedef int32_t K[16];
+
+  ctypedef const int32_t *L[16];
+
+  ctypedef bool (*M[16])(int32_t, int32_t);
+
+  ctypedef void (*N[16])(int32_t, int32_t);
+
+  ctypedef void (*P)(int32_t named1st, bool, bool named3rd, int32_t _);
+
+  void (*O())();
+
+  void root(A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, P p);
diff --git a/cbindgen-0.24.5/tests/expectations/cell.both.c b/cbindgen-0.24.5/tests/expectations/cell.both.c
new file mode 100644
index 0000000..4447422
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_RefCell_i32 NotReprC_RefCell_i32;
+
+typedef struct NotReprC_RefCell_i32 Foo;
+
+typedef struct MyStruct {
+  int32_t number;
+} MyStruct;
+
+void root(const Foo *a, const struct MyStruct *with_cell);
diff --git a/cbindgen-0.24.5/tests/expectations/cell.both.compat.c b/cbindgen-0.24.5/tests/expectations/cell.both.compat.c
new file mode 100644
index 0000000..2516695
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.both.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_RefCell_i32 NotReprC_RefCell_i32;
+
+typedef struct NotReprC_RefCell_i32 Foo;
+
+typedef struct MyStruct {
+  int32_t number;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_cell);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cell.c b/cbindgen-0.24.5/tests/expectations/cell.c
new file mode 100644
index 0000000..a3ac531
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_RefCell_i32 NotReprC_RefCell_i32;
+
+typedef NotReprC_RefCell_i32 Foo;
+
+typedef struct {
+  int32_t number;
+} MyStruct;
+
+void root(const Foo *a, const MyStruct *with_cell);
diff --git a/cbindgen-0.24.5/tests/expectations/cell.compat.c b/cbindgen-0.24.5/tests/expectations/cell.compat.c
new file mode 100644
index 0000000..f2fbb8b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_RefCell_i32 NotReprC_RefCell_i32;
+
+typedef NotReprC_RefCell_i32 Foo;
+
+typedef struct {
+  int32_t number;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const MyStruct *with_cell);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cell.cpp b/cbindgen-0.24.5/tests/expectations/cell.cpp
new file mode 100644
index 0000000..e2462fb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct NotReprC;
+
+template<typename T = void>
+struct RefCell;
+
+using Foo = NotReprC<RefCell<int32_t>>;
+
+struct MyStruct {
+  int32_t number;
+};
+
+extern "C" {
+
+void root(const Foo *a, const MyStruct *with_cell);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/cell.pyx b/cbindgen-0.24.5/tests/expectations/cell.pyx
new file mode 100644
index 0000000..4637419
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct NotReprC_RefCell_i32:
+    pass
+
+  ctypedef NotReprC_RefCell_i32 Foo;
+
+  ctypedef struct MyStruct:
+    int32_t number;
+
+  void root(const Foo *a, const MyStruct *with_cell);
diff --git a/cbindgen-0.24.5/tests/expectations/cell.tag.c b/cbindgen-0.24.5/tests/expectations/cell.tag.c
new file mode 100644
index 0000000..0e39870
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC_RefCell_i32;
+
+typedef struct NotReprC_RefCell_i32 Foo;
+
+struct MyStruct {
+  int32_t number;
+};
+
+void root(const Foo *a, const struct MyStruct *with_cell);
diff --git a/cbindgen-0.24.5/tests/expectations/cell.tag.compat.c b/cbindgen-0.24.5/tests/expectations/cell.tag.compat.c
new file mode 100644
index 0000000..9e73b0d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.tag.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC_RefCell_i32;
+
+typedef struct NotReprC_RefCell_i32 Foo;
+
+struct MyStruct {
+  int32_t number;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_cell);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cell.tag.pyx b/cbindgen-0.24.5/tests/expectations/cell.tag.pyx
new file mode 100644
index 0000000..a4682b0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cell.tag.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct NotReprC_RefCell_i32:
+    pass
+
+  ctypedef NotReprC_RefCell_i32 Foo;
+
+  cdef struct MyStruct:
+    int32_t number;
+
+  void root(const Foo *a, const MyStruct *with_cell);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.both.c b/cbindgen-0.24.5/tests/expectations/cfg.both.c
new file mode 100644
index 0000000..120a1ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.both.c
@@ -0,0 +1,89 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum BarType {
+  A,
+  B,
+  C,
+};
+typedef uint32_t BarType;
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum FooType {
+  A,
+  B,
+  C,
+};
+typedef uint32_t FooType;
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+typedef struct FooHandle {
+  FooType ty;
+  int32_t x;
+  float y;
+} FooHandle;
+#endif
+
+enum C_Tag {
+  C1,
+  C2,
+#if defined(PLATFORM_WIN)
+  C3,
+#endif
+#if defined(PLATFORM_UNIX)
+  C5,
+#endif
+};
+typedef uint8_t C_Tag;
+
+#if defined(PLATFORM_UNIX)
+typedef struct C5_Body {
+  C_Tag tag;
+  int32_t int_;
+} C5_Body;
+#endif
+
+typedef union C {
+  C_Tag tag;
+#if defined(PLATFORM_UNIX)
+  C5_Body c5;
+#endif
+} C;
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+typedef struct BarHandle {
+  BarType ty;
+  int32_t x;
+  float y;
+} BarHandle;
+#endif
+
+typedef struct ConditionalField {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+} ConditionalField;
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(struct FooHandle a, union C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(struct BarHandle a, union C c);
+#endif
+
+void cond(struct ConditionalField a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.both.compat.c b/cbindgen-0.24.5/tests/expectations/cfg.both.compat.c
new file mode 100644
index 0000000..998e5bd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.both.compat.c
@@ -0,0 +1,115 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum BarType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+  C,
+};
+#ifndef __cplusplus
+typedef uint32_t BarType;
+#endif // __cplusplus
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum FooType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+  C,
+};
+#ifndef __cplusplus
+typedef uint32_t FooType;
+#endif // __cplusplus
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+typedef struct FooHandle {
+  FooType ty;
+  int32_t x;
+  float y;
+} FooHandle;
+#endif
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  C1,
+  C2,
+#if defined(PLATFORM_WIN)
+  C3,
+#endif
+#if defined(PLATFORM_UNIX)
+  C5,
+#endif
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+#if defined(PLATFORM_UNIX)
+typedef struct C5_Body {
+  C_Tag tag;
+  int32_t int_;
+} C5_Body;
+#endif
+
+typedef union C {
+  C_Tag tag;
+#if defined(PLATFORM_UNIX)
+  C5_Body c5;
+#endif
+} C;
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+typedef struct BarHandle {
+  BarType ty;
+  int32_t x;
+  float y;
+} BarHandle;
+#endif
+
+typedef struct ConditionalField {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+} ConditionalField;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(struct FooHandle a, union C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(struct BarHandle a, union C c);
+#endif
+
+void cond(struct ConditionalField a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.c b/cbindgen-0.24.5/tests/expectations/cfg.c
new file mode 100644
index 0000000..0194bb1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.c
@@ -0,0 +1,89 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum BarType {
+  A,
+  B,
+  C,
+};
+typedef uint32_t BarType;
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum FooType {
+  A,
+  B,
+  C,
+};
+typedef uint32_t FooType;
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+typedef struct {
+  FooType ty;
+  int32_t x;
+  float y;
+} FooHandle;
+#endif
+
+enum C_Tag {
+  C1,
+  C2,
+#if defined(PLATFORM_WIN)
+  C3,
+#endif
+#if defined(PLATFORM_UNIX)
+  C5,
+#endif
+};
+typedef uint8_t C_Tag;
+
+#if defined(PLATFORM_UNIX)
+typedef struct {
+  C_Tag tag;
+  int32_t int_;
+} C5_Body;
+#endif
+
+typedef union {
+  C_Tag tag;
+#if defined(PLATFORM_UNIX)
+  C5_Body c5;
+#endif
+} C;
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+typedef struct {
+  BarType ty;
+  int32_t x;
+  float y;
+} BarHandle;
+#endif
+
+typedef struct {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+} ConditionalField;
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(FooHandle a, C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(BarHandle a, C c);
+#endif
+
+void cond(ConditionalField a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.compat.c b/cbindgen-0.24.5/tests/expectations/cfg.compat.c
new file mode 100644
index 0000000..2092e0a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.compat.c
@@ -0,0 +1,115 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum BarType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+  C,
+};
+#ifndef __cplusplus
+typedef uint32_t BarType;
+#endif // __cplusplus
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum FooType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+  C,
+};
+#ifndef __cplusplus
+typedef uint32_t FooType;
+#endif // __cplusplus
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+typedef struct {
+  FooType ty;
+  int32_t x;
+  float y;
+} FooHandle;
+#endif
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  C1,
+  C2,
+#if defined(PLATFORM_WIN)
+  C3,
+#endif
+#if defined(PLATFORM_UNIX)
+  C5,
+#endif
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+#if defined(PLATFORM_UNIX)
+typedef struct {
+  C_Tag tag;
+  int32_t int_;
+} C5_Body;
+#endif
+
+typedef union {
+  C_Tag tag;
+#if defined(PLATFORM_UNIX)
+  C5_Body c5;
+#endif
+} C;
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+typedef struct {
+  BarType ty;
+  int32_t x;
+  float y;
+} BarHandle;
+#endif
+
+typedef struct {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+} ConditionalField;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(FooHandle a, C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(BarHandle a, C c);
+#endif
+
+void cond(ConditionalField a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.cpp b/cbindgen-0.24.5/tests/expectations/cfg.cpp
new file mode 100644
index 0000000..24937cf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.cpp
@@ -0,0 +1,217 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum class BarType : uint32_t {
+  A,
+  B,
+  C,
+};
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum class FooType : uint32_t {
+  A,
+  B,
+  C,
+};
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+struct FooHandle {
+  FooType ty;
+  int32_t x;
+  float y;
+
+  bool operator==(const FooHandle& other) const {
+    return ty == other.ty &&
+           x == other.x &&
+           y == other.y;
+  }
+  bool operator!=(const FooHandle& other) const {
+    return ty != other.ty ||
+           x != other.x ||
+           y != other.y;
+  }
+};
+#endif
+
+union C {
+  enum class Tag : uint8_t {
+    C1,
+    C2,
+#if defined(PLATFORM_WIN)
+    C3,
+#endif
+#if defined(PLATFORM_UNIX)
+    C5,
+#endif
+  };
+
+#if defined(PLATFORM_UNIX)
+  struct C5_Body {
+    Tag tag;
+    int32_t int_;
+
+    bool operator==(const C5_Body& other) const {
+      return int_ == other.int_;
+    }
+    bool operator!=(const C5_Body& other) const {
+      return int_ != other.int_;
+    }
+  };
+#endif
+
+  struct {
+    Tag tag;
+  };
+#if defined(PLATFORM_UNIX)
+  C5_Body c5;
+#endif
+
+  static C C1() {
+    C result;
+    result.tag = Tag::C1;
+    return result;
+  }
+
+  bool IsC1() const {
+    return tag == Tag::C1;
+  }
+
+  static C C2() {
+    C result;
+    result.tag = Tag::C2;
+    return result;
+  }
+
+  bool IsC2() const {
+    return tag == Tag::C2;
+  }
+
+#if defined(PLATFORM_WIN)
+  static C C3() {
+    C result;
+    result.tag = Tag::C3;
+    return result;
+  }
+
+  bool IsC3() const {
+    return tag == Tag::C3;
+  }
+#endif
+
+#if defined(PLATFORM_UNIX)
+  static C C5(const int32_t &int_) {
+    C result;
+    ::new (&result.c5.int_) (int32_t)(int_);
+    result.tag = Tag::C5;
+    return result;
+  }
+
+  bool IsC5() const {
+    return tag == Tag::C5;
+  }
+#endif
+
+  bool operator==(const C& other) const {
+    if (tag != other.tag) {
+      return false;
+    }
+    switch (tag) {
+#if defined(PLATFORM_UNIX)
+      case Tag::C5: return c5 == other.c5;
+#endif
+      default: break;
+    }
+    return true;
+  }
+
+  bool operator!=(const C& other) const {
+    return !(*this == other);
+  }
+
+  private:
+  C() {
+
+  }
+  public:
+
+
+  ~C() {
+    switch (tag) {
+#if defined(PLATFORM_UNIX)
+      case Tag::C5: c5.~C5_Body(); break;
+#endif
+      default: break;
+    }
+  }
+
+  C(const C& other)
+   : tag(other.tag) {
+    switch (tag) {
+#if defined(PLATFORM_UNIX)
+      case Tag::C5: ::new (&c5) (C5_Body)(other.c5); break;
+#endif
+      default: break;
+    }
+  }
+  C& operator=(const C& other) {
+    if (this != &other) {
+      this->~C();
+      new (this) C(other);
+    }
+    return *this;
+  }
+};
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+struct BarHandle {
+  BarType ty;
+  int32_t x;
+  float y;
+
+  bool operator==(const BarHandle& other) const {
+    return ty == other.ty &&
+           x == other.x &&
+           y == other.y;
+  }
+  bool operator!=(const BarHandle& other) const {
+    return ty != other.ty ||
+           x != other.x ||
+           y != other.y;
+  }
+};
+#endif
+
+struct ConditionalField {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+};
+
+extern "C" {
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(FooHandle a, C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(BarHandle a, C c);
+#endif
+
+void cond(ConditionalField a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.pyx b/cbindgen-0.24.5/tests/expectations/cfg.pyx
new file mode 100644
index 0000000..c4da233
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.pyx
@@ -0,0 +1,67 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  IF (PLATFORM_WIN or M_32):
+    cdef enum:
+      A,
+      B,
+      C,
+    ctypedef uint32_t BarType;
+
+  IF (PLATFORM_UNIX and X11):
+    cdef enum:
+      A,
+      B,
+      C,
+    ctypedef uint32_t FooType;
+
+  IF (PLATFORM_UNIX and X11):
+    ctypedef struct FooHandle:
+      FooType ty;
+      int32_t x;
+      float y;
+
+  cdef enum:
+    C1,
+    C2,
+    C3,
+    C5,
+  ctypedef uint8_t C_Tag;
+
+  ctypedef struct C5_Body:
+    C_Tag tag;
+    int32_t int_;
+
+  ctypedef union C:
+    C_Tag tag;
+    C5_Body c5;
+
+  IF (PLATFORM_WIN or M_32):
+    ctypedef struct BarHandle:
+      BarType ty;
+      int32_t x;
+      float y;
+
+  ctypedef struct ConditionalField:
+    int32_t field;
+
+  IF (PLATFORM_UNIX and X11):
+    void root(FooHandle a, C c);
+
+  IF (PLATFORM_WIN or M_32):
+    void root(BarHandle a, C c);
+
+  void cond(ConditionalField a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.tag.c b/cbindgen-0.24.5/tests/expectations/cfg.tag.c
new file mode 100644
index 0000000..8935265
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.tag.c
@@ -0,0 +1,89 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum BarType {
+  A,
+  B,
+  C,
+};
+typedef uint32_t BarType;
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum FooType {
+  A,
+  B,
+  C,
+};
+typedef uint32_t FooType;
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+struct FooHandle {
+  FooType ty;
+  int32_t x;
+  float y;
+};
+#endif
+
+enum C_Tag {
+  C1,
+  C2,
+#if defined(PLATFORM_WIN)
+  C3,
+#endif
+#if defined(PLATFORM_UNIX)
+  C5,
+#endif
+};
+typedef uint8_t C_Tag;
+
+#if defined(PLATFORM_UNIX)
+struct C5_Body {
+  C_Tag tag;
+  int32_t int_;
+};
+#endif
+
+union C {
+  C_Tag tag;
+#if defined(PLATFORM_UNIX)
+  struct C5_Body c5;
+#endif
+};
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+struct BarHandle {
+  BarType ty;
+  int32_t x;
+  float y;
+};
+#endif
+
+struct ConditionalField {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+};
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(struct FooHandle a, union C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(struct BarHandle a, union C c);
+#endif
+
+void cond(struct ConditionalField a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.tag.compat.c b/cbindgen-0.24.5/tests/expectations/cfg.tag.compat.c
new file mode 100644
index 0000000..ceaebc7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.tag.compat.c
@@ -0,0 +1,115 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+enum BarType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+  C,
+};
+#ifndef __cplusplus
+typedef uint32_t BarType;
+#endif // __cplusplus
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+enum FooType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+  C,
+};
+#ifndef __cplusplus
+typedef uint32_t FooType;
+#endif // __cplusplus
+#endif
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+struct FooHandle {
+  FooType ty;
+  int32_t x;
+  float y;
+};
+#endif
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  C1,
+  C2,
+#if defined(PLATFORM_WIN)
+  C3,
+#endif
+#if defined(PLATFORM_UNIX)
+  C5,
+#endif
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+#if defined(PLATFORM_UNIX)
+struct C5_Body {
+  C_Tag tag;
+  int32_t int_;
+};
+#endif
+
+union C {
+  C_Tag tag;
+#if defined(PLATFORM_UNIX)
+  struct C5_Body c5;
+#endif
+};
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+struct BarHandle {
+  BarType ty;
+  int32_t x;
+  float y;
+};
+#endif
+
+struct ConditionalField {
+#if defined(X11)
+  int32_t field
+#endif
+  ;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#if (defined(PLATFORM_UNIX) && defined(X11))
+void root(struct FooHandle a, union C c);
+#endif
+
+#if (defined(PLATFORM_WIN) || defined(M_32))
+void root(struct BarHandle a, union C c);
+#endif
+
+void cond(struct ConditionalField a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cfg.tag.pyx b/cbindgen-0.24.5/tests/expectations/cfg.tag.pyx
new file mode 100644
index 0000000..3c1b871
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg.tag.pyx
@@ -0,0 +1,67 @@
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  IF (PLATFORM_WIN or M_32):
+    cdef enum:
+      A,
+      B,
+      C,
+    ctypedef uint32_t BarType;
+
+  IF (PLATFORM_UNIX and X11):
+    cdef enum:
+      A,
+      B,
+      C,
+    ctypedef uint32_t FooType;
+
+  IF (PLATFORM_UNIX and X11):
+    cdef struct FooHandle:
+      FooType ty;
+      int32_t x;
+      float y;
+
+  cdef enum:
+    C1,
+    C2,
+    C3,
+    C5,
+  ctypedef uint8_t C_Tag;
+
+  cdef struct C5_Body:
+    C_Tag tag;
+    int32_t int_;
+
+  cdef union C:
+    C_Tag tag;
+    C5_Body c5;
+
+  IF (PLATFORM_WIN or M_32):
+    cdef struct BarHandle:
+      BarType ty;
+      int32_t x;
+      float y;
+
+  cdef struct ConditionalField:
+    int32_t field;
+
+  IF (PLATFORM_UNIX and X11):
+    void root(FooHandle a, C c);
+
+  IF (PLATFORM_WIN or M_32):
+    void root(BarHandle a, C c);
+
+  void cond(ConditionalField a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.both.c b/cbindgen-0.24.5/tests/expectations/cfg_2.both.c
new file mode 100644
index 0000000..693eb95
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.both.c
@@ -0,0 +1,42 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(NOT_DEFINED)
+#define DEFAULT_X 8
+#endif
+
+#if defined(DEFINED)
+#define DEFAULT_X 42
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+typedef struct Foo {
+  int32_t x;
+} Foo;
+#endif
+
+#if defined(NOT_DEFINED)
+typedef struct Bar {
+  struct Foo y;
+} Bar;
+#endif
+
+#if defined(DEFINED)
+typedef struct Bar {
+  struct Foo z;
+} Bar;
+#endif
+
+typedef struct Root {
+  struct Bar w;
+} Root;
+
+void root(struct Root a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.both.compat.c b/cbindgen-0.24.5/tests/expectations/cfg_2.both.compat.c
new file mode 100644
index 0000000..ffb1f1b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.both.compat.c
@@ -0,0 +1,50 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(NOT_DEFINED)
+#define DEFAULT_X 8
+#endif
+
+#if defined(DEFINED)
+#define DEFAULT_X 42
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+typedef struct Foo {
+  int32_t x;
+} Foo;
+#endif
+
+#if defined(NOT_DEFINED)
+typedef struct Bar {
+  struct Foo y;
+} Bar;
+#endif
+
+#if defined(DEFINED)
+typedef struct Bar {
+  struct Foo z;
+} Bar;
+#endif
+
+typedef struct Root {
+  struct Bar w;
+} Root;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Root a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.c b/cbindgen-0.24.5/tests/expectations/cfg_2.c
new file mode 100644
index 0000000..d63ec5f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.c
@@ -0,0 +1,42 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(NOT_DEFINED)
+#define DEFAULT_X 8
+#endif
+
+#if defined(DEFINED)
+#define DEFAULT_X 42
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+typedef struct {
+  int32_t x;
+} Foo;
+#endif
+
+#if defined(NOT_DEFINED)
+typedef struct {
+  Foo y;
+} Bar;
+#endif
+
+#if defined(DEFINED)
+typedef struct {
+  Foo z;
+} Bar;
+#endif
+
+typedef struct {
+  Bar w;
+} Root;
+
+void root(Root a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.compat.c b/cbindgen-0.24.5/tests/expectations/cfg_2.compat.c
new file mode 100644
index 0000000..6a0047a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.compat.c
@@ -0,0 +1,50 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(NOT_DEFINED)
+#define DEFAULT_X 8
+#endif
+
+#if defined(DEFINED)
+#define DEFAULT_X 42
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+typedef struct {
+  int32_t x;
+} Foo;
+#endif
+
+#if defined(NOT_DEFINED)
+typedef struct {
+  Foo y;
+} Bar;
+#endif
+
+#if defined(DEFINED)
+typedef struct {
+  Foo z;
+} Bar;
+#endif
+
+typedef struct {
+  Bar w;
+} Root;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Root a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.cpp b/cbindgen-0.24.5/tests/expectations/cfg_2.cpp
new file mode 100644
index 0000000..40aee48
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.cpp
@@ -0,0 +1,47 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+#if defined(NOT_DEFINED)
+constexpr static const int32_t DEFAULT_X = 8;
+#endif
+
+#if defined(DEFINED)
+constexpr static const int32_t DEFAULT_X = 42;
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+struct Foo {
+  int32_t x;
+};
+#endif
+
+#if defined(NOT_DEFINED)
+struct Bar {
+  Foo y;
+};
+#endif
+
+#if defined(DEFINED)
+struct Bar {
+  Foo z;
+};
+#endif
+
+struct Root {
+  Bar w;
+};
+
+extern "C" {
+
+void root(Root a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.pyx b/cbindgen-0.24.5/tests/expectations/cfg_2.pyx
new file mode 100644
index 0000000..92eb668
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.pyx
@@ -0,0 +1,36 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  IF NOT_DEFINED:
+    const int32_t DEFAULT_X # = 8
+
+  IF DEFINED:
+    const int32_t DEFAULT_X # = 42
+
+  IF (NOT_DEFINED or DEFINED):
+    ctypedef struct Foo:
+      int32_t x;
+
+  IF NOT_DEFINED:
+    ctypedef struct Bar:
+      Foo y;
+
+  IF DEFINED:
+    ctypedef struct Bar:
+      Foo z;
+
+  ctypedef struct Root:
+    Bar w;
+
+  void root(Root a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.tag.c b/cbindgen-0.24.5/tests/expectations/cfg_2.tag.c
new file mode 100644
index 0000000..6230738
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.tag.c
@@ -0,0 +1,42 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(NOT_DEFINED)
+#define DEFAULT_X 8
+#endif
+
+#if defined(DEFINED)
+#define DEFAULT_X 42
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+struct Foo {
+  int32_t x;
+};
+#endif
+
+#if defined(NOT_DEFINED)
+struct Bar {
+  struct Foo y;
+};
+#endif
+
+#if defined(DEFINED)
+struct Bar {
+  struct Foo z;
+};
+#endif
+
+struct Root {
+  struct Bar w;
+};
+
+void root(struct Root a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.tag.compat.c b/cbindgen-0.24.5/tests/expectations/cfg_2.tag.compat.c
new file mode 100644
index 0000000..62a258d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.tag.compat.c
@@ -0,0 +1,50 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(NOT_DEFINED)
+#define DEFAULT_X 8
+#endif
+
+#if defined(DEFINED)
+#define DEFAULT_X 42
+#endif
+
+#if (defined(NOT_DEFINED) || defined(DEFINED))
+struct Foo {
+  int32_t x;
+};
+#endif
+
+#if defined(NOT_DEFINED)
+struct Bar {
+  struct Foo y;
+};
+#endif
+
+#if defined(DEFINED)
+struct Bar {
+  struct Foo z;
+};
+#endif
+
+struct Root {
+  struct Bar w;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Root a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_2.tag.pyx b/cbindgen-0.24.5/tests/expectations/cfg_2.tag.pyx
new file mode 100644
index 0000000..ea8db1e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_2.tag.pyx
@@ -0,0 +1,36 @@
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  IF NOT_DEFINED:
+    const int32_t DEFAULT_X # = 8
+
+  IF DEFINED:
+    const int32_t DEFAULT_X # = 42
+
+  IF (NOT_DEFINED or DEFINED):
+    cdef struct Foo:
+      int32_t x;
+
+  IF NOT_DEFINED:
+    cdef struct Bar:
+      Foo y;
+
+  IF DEFINED:
+    cdef struct Bar:
+      Foo z;
+
+  cdef struct Root:
+    Bar w;
+
+  void root(Root a);
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_field.compat.c b/cbindgen-0.24.5/tests/expectations/cfg_field.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_field.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_field.cpp b/cbindgen-0.24.5/tests/expectations/cfg_field.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_field.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/cfg_field.pyx b/cbindgen-0.24.5/tests/expectations/cfg_field.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cfg_field.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/char.both.c b/cbindgen-0.24.5/tests/expectations/char.both.c
new file mode 100644
index 0000000..f06ab88
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.both.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  uint32_t a;
+} Foo;
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/char.both.compat.c b/cbindgen-0.24.5/tests/expectations/char.both.compat.c
new file mode 100644
index 0000000..bb69e53
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.both.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  uint32_t a;
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/char.c b/cbindgen-0.24.5/tests/expectations/char.c
new file mode 100644
index 0000000..e0f9310
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t a;
+} Foo;
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/char.compat.c b/cbindgen-0.24.5/tests/expectations/char.compat.c
new file mode 100644
index 0000000..59253a6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t a;
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/char.cpp b/cbindgen-0.24.5/tests/expectations/char.cpp
new file mode 100644
index 0000000..b801989
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+  uint32_t a;
+};
+
+extern "C" {
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/char.pyx b/cbindgen-0.24.5/tests/expectations/char.pyx
new file mode 100644
index 0000000..bcafe98
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    uint32_t a;
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/char.tag.c b/cbindgen-0.24.5/tests/expectations/char.tag.c
new file mode 100644
index 0000000..1d709fe
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.tag.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  uint32_t a;
+};
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/char.tag.compat.c b/cbindgen-0.24.5/tests/expectations/char.tag.compat.c
new file mode 100644
index 0000000..b1574c5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.tag.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  uint32_t a;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/char.tag.pyx b/cbindgen-0.24.5/tests/expectations/char.tag.pyx
new file mode 100644
index 0000000..9e854ed
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/char.tag.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    uint32_t a;
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/const_conflict.compat.c b/cbindgen-0.24.5/tests/expectations/const_conflict.compat.c
new file mode 100644
index 0000000..25faf66
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_conflict.compat.c
@@ -0,0 +1,6 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define Foo_FOO 42
diff --git a/cbindgen-0.24.5/tests/expectations/const_conflict.cpp b/cbindgen-0.24.5/tests/expectations/const_conflict.cpp
new file mode 100644
index 0000000..f031e27
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_conflict.cpp
@@ -0,0 +1,7 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint32_t Foo_FOO = 42;
diff --git a/cbindgen-0.24.5/tests/expectations/const_conflict.pyx b/cbindgen-0.24.5/tests/expectations/const_conflict.pyx
new file mode 100644
index 0000000..f78c616
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_conflict.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint32_t Foo_FOO # = 42
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.both.c b/cbindgen-0.24.5/tests/expectations/const_generics.both.c
new file mode 100644
index 0000000..78399bc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.both.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define TITLE_SIZE 80
+
+typedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+typedef int8_t CArrayString_40[40];
+
+typedef struct Book {
+  CArrayString_TITLE_SIZE title;
+  CArrayString_40 author;
+} Book;
+
+void root(struct Book *a);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics.both.compat.c
new file mode 100644
index 0000000..3274454
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.both.compat.c
@@ -0,0 +1,25 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define TITLE_SIZE 80
+
+typedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+typedef int8_t CArrayString_40[40];
+
+typedef struct Book {
+  CArrayString_TITLE_SIZE title;
+  CArrayString_40 author;
+} Book;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Book *a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.c b/cbindgen-0.24.5/tests/expectations/const_generics.c
new file mode 100644
index 0000000..eeea09a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define TITLE_SIZE 80
+
+typedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+typedef int8_t CArrayString_40[40];
+
+typedef struct {
+  CArrayString_TITLE_SIZE title;
+  CArrayString_40 author;
+} Book;
+
+void root(Book *a);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics.compat.c
new file mode 100644
index 0000000..40ded76
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.compat.c
@@ -0,0 +1,25 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define TITLE_SIZE 80
+
+typedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+typedef int8_t CArrayString_40[40];
+
+typedef struct {
+  CArrayString_TITLE_SIZE title;
+  CArrayString_40 author;
+} Book;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Book *a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.cpp b/cbindgen-0.24.5/tests/expectations/const_generics.cpp
new file mode 100644
index 0000000..e5157e6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uintptr_t TITLE_SIZE = 80;
+
+template<uintptr_t CAP>
+using CArrayString = int8_t[CAP];
+
+struct Book {
+  CArrayString<TITLE_SIZE> title;
+  CArrayString<40> author;
+};
+
+extern "C" {
+
+void root(Book *a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.pyx b/cbindgen-0.24.5/tests/expectations/const_generics.pyx
new file mode 100644
index 0000000..8739186
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.pyx
@@ -0,0 +1,19 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uintptr_t TITLE_SIZE # = 80
+
+  ctypedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+  ctypedef int8_t CArrayString_40[40];
+
+  ctypedef struct Book:
+    CArrayString_TITLE_SIZE title;
+    CArrayString_40 author;
+
+  void root(Book *a);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics.tag.c
new file mode 100644
index 0000000..09e4766
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.tag.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define TITLE_SIZE 80
+
+typedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+typedef int8_t CArrayString_40[40];
+
+struct Book {
+  CArrayString_TITLE_SIZE title;
+  CArrayString_40 author;
+};
+
+void root(struct Book *a);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics.tag.compat.c
new file mode 100644
index 0000000..f764e5b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.tag.compat.c
@@ -0,0 +1,25 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define TITLE_SIZE 80
+
+typedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+typedef int8_t CArrayString_40[40];
+
+struct Book {
+  CArrayString_TITLE_SIZE title;
+  CArrayString_40 author;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Book *a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics.tag.pyx
new file mode 100644
index 0000000..f2c9d7a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics.tag.pyx
@@ -0,0 +1,19 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uintptr_t TITLE_SIZE # = 80
+
+  ctypedef int8_t CArrayString_TITLE_SIZE[TITLE_SIZE];
+
+  ctypedef int8_t CArrayString_40[40];
+
+  cdef struct Book:
+    CArrayString_TITLE_SIZE title;
+    CArrayString_40 author;
+
+  void root(Book *a);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.both.c b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.both.c
new file mode 100644
index 0000000..e3cc9a0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct ArrayVec_____u8__100 {
+  uint8_t *xs[100];
+  uint32_t len;
+} ArrayVec_____u8__100;
+
+int32_t push(struct ArrayVec_____u8__100 *v, uint8_t *elem);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.both.compat.c
new file mode 100644
index 0000000..3c382ba
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct ArrayVec_____u8__100 {
+  uint8_t *xs[100];
+  uint32_t len;
+} ArrayVec_____u8__100;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+int32_t push(struct ArrayVec_____u8__100 *v, uint8_t *elem);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.c b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.c
new file mode 100644
index 0000000..f7deb75
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t *xs[100];
+  uint32_t len;
+} ArrayVec_____u8__100;
+
+int32_t push(ArrayVec_____u8__100 *v, uint8_t *elem);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.compat.c
new file mode 100644
index 0000000..3ed7a89
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t *xs[100];
+  uint32_t len;
+} ArrayVec_____u8__100;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+int32_t push(ArrayVec_____u8__100 *v, uint8_t *elem);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.cpp b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.cpp
new file mode 100644
index 0000000..5e63c74
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T, uintptr_t CAP>
+struct ArrayVec {
+  T xs[CAP];
+  uint32_t len;
+};
+
+extern "C" {
+
+int32_t push(ArrayVec<uint8_t*, 100> *v, uint8_t *elem);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.pyx
new file mode 100644
index 0000000..7e80d25
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct ArrayVec_____u8__100:
+    uint8_t *xs[100];
+    uint32_t len;
+
+  int32_t push(ArrayVec_____u8__100 *v, uint8_t *elem);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.c
new file mode 100644
index 0000000..1f45bab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct ArrayVec_____u8__100 {
+  uint8_t *xs[100];
+  uint32_t len;
+};
+
+int32_t push(struct ArrayVec_____u8__100 *v, uint8_t *elem);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.compat.c
new file mode 100644
index 0000000..cf45ebc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct ArrayVec_____u8__100 {
+  uint8_t *xs[100];
+  uint32_t len;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+int32_t push(struct ArrayVec_____u8__100 *v, uint8_t *elem);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.pyx
new file mode 100644
index 0000000..0b62990
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_arrayvec.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct ArrayVec_____u8__100:
+    uint8_t *xs[100];
+    uint32_t len;
+
+  int32_t push(ArrayVec_____u8__100 *v, uint8_t *elem);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.both.c b/cbindgen-0.24.5/tests/expectations/const_generics_bool.both.c
new file mode 100644
index 0000000..c693f41
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.both.c
@@ -0,0 +1,36 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef const char *Str;
+
+typedef struct HashTable_Str__c_char__false {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  char *vals;
+} HashTable_Str__c_char__false;
+
+typedef struct HashTable_Str__c_char__false MySet;
+
+typedef void (*SetCallback)(Str key);
+
+typedef struct HashTable_Str__u64__true {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  uint64_t *vals;
+} HashTable_Str__u64__true;
+
+typedef void (*MapCallback)(Str key, uint64_t val);
+
+MySet *new_set(void);
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+struct HashTable_Str__u64__true *new_map(void);
+
+void map_for_each(const struct HashTable_Str__u64__true *map, MapCallback callback);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_bool.both.compat.c
new file mode 100644
index 0000000..ad87976
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.both.compat.c
@@ -0,0 +1,44 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef const char *Str;
+
+typedef struct HashTable_Str__c_char__false {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  char *vals;
+} HashTable_Str__c_char__false;
+
+typedef struct HashTable_Str__c_char__false MySet;
+
+typedef void (*SetCallback)(Str key);
+
+typedef struct HashTable_Str__u64__true {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  uint64_t *vals;
+} HashTable_Str__u64__true;
+
+typedef void (*MapCallback)(Str key, uint64_t val);
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+MySet *new_set(void);
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+struct HashTable_Str__u64__true *new_map(void);
+
+void map_for_each(const struct HashTable_Str__u64__true *map, MapCallback callback);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.c b/cbindgen-0.24.5/tests/expectations/const_generics_bool.c
new file mode 100644
index 0000000..3ed168d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.c
@@ -0,0 +1,36 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef const char *Str;
+
+typedef struct {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  char *vals;
+} HashTable_Str__c_char__false;
+
+typedef HashTable_Str__c_char__false MySet;
+
+typedef void (*SetCallback)(Str key);
+
+typedef struct {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  uint64_t *vals;
+} HashTable_Str__u64__true;
+
+typedef void (*MapCallback)(Str key, uint64_t val);
+
+MySet *new_set(void);
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+HashTable_Str__u64__true *new_map(void);
+
+void map_for_each(const HashTable_Str__u64__true *map, MapCallback callback);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_bool.compat.c
new file mode 100644
index 0000000..304c38d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.compat.c
@@ -0,0 +1,44 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef const char *Str;
+
+typedef struct {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  char *vals;
+} HashTable_Str__c_char__false;
+
+typedef HashTable_Str__c_char__false MySet;
+
+typedef void (*SetCallback)(Str key);
+
+typedef struct {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  uint64_t *vals;
+} HashTable_Str__u64__true;
+
+typedef void (*MapCallback)(Str key, uint64_t val);
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+MySet *new_set(void);
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+HashTable_Str__u64__true *new_map(void);
+
+void map_for_each(const HashTable_Str__u64__true *map, MapCallback callback);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.cpp b/cbindgen-0.24.5/tests/expectations/const_generics_bool.cpp
new file mode 100644
index 0000000..f2ee08b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.cpp
@@ -0,0 +1,37 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct MaybeUninit;
+
+using Str = const char*;
+
+template<typename K, typename V, bool IS_MAP>
+struct HashTable {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  MaybeUninit<K> *keys;
+  MaybeUninit<V> *vals;
+};
+
+using MySet = HashTable<Str, char, false>;
+
+using SetCallback = void(*)(Str key);
+
+using MapCallback = void(*)(Str key, uint64_t val);
+
+extern "C" {
+
+MySet *new_set();
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+HashTable<Str, uint64_t, true> *new_map();
+
+void map_for_each(const HashTable<Str, uint64_t, true> *map, MapCallback callback);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_bool.pyx
new file mode 100644
index 0000000..a219992
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.pyx
@@ -0,0 +1,37 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef const char *Str;
+
+  ctypedef struct HashTable_Str__c_char__false:
+    uintptr_t num_buckets;
+    uintptr_t capacity;
+    uint8_t *occupied;
+    Str *keys;
+    char *vals;
+
+  ctypedef HashTable_Str__c_char__false MySet;
+
+  ctypedef void (*SetCallback)(Str key);
+
+  ctypedef struct HashTable_Str__u64__true:
+    uintptr_t num_buckets;
+    uintptr_t capacity;
+    uint8_t *occupied;
+    Str *keys;
+    uint64_t *vals;
+
+  ctypedef void (*MapCallback)(Str key, uint64_t val);
+
+  MySet *new_set();
+
+  void set_for_each(const MySet *set, SetCallback callback);
+
+  HashTable_Str__u64__true *new_map();
+
+  void map_for_each(const HashTable_Str__u64__true *map, MapCallback callback);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.c
new file mode 100644
index 0000000..8cb1df0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.c
@@ -0,0 +1,36 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef const char *Str;
+
+struct HashTable_Str__c_char__false {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  char *vals;
+};
+
+typedef struct HashTable_Str__c_char__false MySet;
+
+typedef void (*SetCallback)(Str key);
+
+struct HashTable_Str__u64__true {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  uint64_t *vals;
+};
+
+typedef void (*MapCallback)(Str key, uint64_t val);
+
+MySet *new_set(void);
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+struct HashTable_Str__u64__true *new_map(void);
+
+void map_for_each(const struct HashTable_Str__u64__true *map, MapCallback callback);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.compat.c
new file mode 100644
index 0000000..4b12798
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.compat.c
@@ -0,0 +1,44 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef const char *Str;
+
+struct HashTable_Str__c_char__false {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  char *vals;
+};
+
+typedef struct HashTable_Str__c_char__false MySet;
+
+typedef void (*SetCallback)(Str key);
+
+struct HashTable_Str__u64__true {
+  uintptr_t num_buckets;
+  uintptr_t capacity;
+  uint8_t *occupied;
+  Str *keys;
+  uint64_t *vals;
+};
+
+typedef void (*MapCallback)(Str key, uint64_t val);
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+MySet *new_set(void);
+
+void set_for_each(const MySet *set, SetCallback callback);
+
+struct HashTable_Str__u64__true *new_map(void);
+
+void map_for_each(const struct HashTable_Str__u64__true *map, MapCallback callback);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.pyx
new file mode 100644
index 0000000..54cf04a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_bool.tag.pyx
@@ -0,0 +1,37 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef const char *Str;
+
+  cdef struct HashTable_Str__c_char__false:
+    uintptr_t num_buckets;
+    uintptr_t capacity;
+    uint8_t *occupied;
+    Str *keys;
+    char *vals;
+
+  ctypedef HashTable_Str__c_char__false MySet;
+
+  ctypedef void (*SetCallback)(Str key);
+
+  cdef struct HashTable_Str__u64__true:
+    uintptr_t num_buckets;
+    uintptr_t capacity;
+    uint8_t *occupied;
+    Str *keys;
+    uint64_t *vals;
+
+  ctypedef void (*MapCallback)(Str key, uint64_t val);
+
+  MySet *new_set();
+
+  void set_for_each(const MySet *set, SetCallback callback);
+
+  HashTable_Str__u64__true *new_map();
+
+  void map_for_each(const HashTable_Str__u64__true *map, MapCallback callback);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.both.c b/cbindgen-0.24.5/tests/expectations/const_generics_byte.both.c
new file mode 100644
index 0000000..ccfcebc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.both.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Parser_40__41 {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_40__41;
+
+typedef struct Parser_123__125 {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_123__125;
+
+void init_parens_parser(struct Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(struct Parser_40__41 *p);
+
+void init_braces_parser(struct Parser_123__125 *p, uint8_t *buf, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_byte.both.compat.c
new file mode 100644
index 0000000..4d15803
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.both.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Parser_40__41 {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_40__41;
+
+typedef struct Parser_123__125 {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_123__125;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void init_parens_parser(struct Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(struct Parser_40__41 *p);
+
+void init_braces_parser(struct Parser_123__125 *p, uint8_t *buf, uintptr_t len);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.c b/cbindgen-0.24.5/tests/expectations/const_generics_byte.c
new file mode 100644
index 0000000..fc5d5ef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_40__41;
+
+typedef struct {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_123__125;
+
+void init_parens_parser(Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(Parser_40__41 *p);
+
+void init_braces_parser(Parser_123__125 *p, uint8_t *buf, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_byte.compat.c
new file mode 100644
index 0000000..6cf6102
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_40__41;
+
+typedef struct {
+  uint8_t *buf;
+  uintptr_t len;
+} Parser_123__125;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void init_parens_parser(Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(Parser_40__41 *p);
+
+void init_braces_parser(Parser_123__125 *p, uint8_t *buf, uintptr_t len);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.cpp b/cbindgen-0.24.5/tests/expectations/const_generics_byte.cpp
new file mode 100644
index 0000000..118dc98
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<uint8_t OPEN, uint8_t CLOSE>
+struct Parser {
+  uint8_t *buf;
+  uintptr_t len;
+};
+
+extern "C" {
+
+void init_parens_parser(Parser<40, 41> *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(Parser<40, 41> *p);
+
+void init_braces_parser(Parser<123, 125> *p, uint8_t *buf, uintptr_t len);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_byte.pyx
new file mode 100644
index 0000000..a6099f2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Parser_40__41:
+    uint8_t *buf;
+    uintptr_t len;
+
+  ctypedef struct Parser_123__125:
+    uint8_t *buf;
+    uintptr_t len;
+
+  void init_parens_parser(Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+  void destroy_parens_parser(Parser_40__41 *p);
+
+  void init_braces_parser(Parser_123__125 *p, uint8_t *buf, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.c
new file mode 100644
index 0000000..4d2d5f8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Parser_40__41 {
+  uint8_t *buf;
+  uintptr_t len;
+};
+
+struct Parser_123__125 {
+  uint8_t *buf;
+  uintptr_t len;
+};
+
+void init_parens_parser(struct Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(struct Parser_40__41 *p);
+
+void init_braces_parser(struct Parser_123__125 *p, uint8_t *buf, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.compat.c
new file mode 100644
index 0000000..85172fd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Parser_40__41 {
+  uint8_t *buf;
+  uintptr_t len;
+};
+
+struct Parser_123__125 {
+  uint8_t *buf;
+  uintptr_t len;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void init_parens_parser(struct Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+void destroy_parens_parser(struct Parser_40__41 *p);
+
+void init_braces_parser(struct Parser_123__125 *p, uint8_t *buf, uintptr_t len);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.pyx
new file mode 100644
index 0000000..6b91ced
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_byte.tag.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Parser_40__41:
+    uint8_t *buf;
+    uintptr_t len;
+
+  cdef struct Parser_123__125:
+    uint8_t *buf;
+    uintptr_t len;
+
+  void init_parens_parser(Parser_40__41 *p, uint8_t *buf, uintptr_t len);
+
+  void destroy_parens_parser(Parser_40__41 *p);
+
+  void init_braces_parser(Parser_123__125 *p, uint8_t *buf, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.both.c b/cbindgen-0.24.5/tests/expectations/const_generics_char.both.c
new file mode 100644
index 0000000..4cd9041
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.both.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct TakeUntil_0 {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+} TakeUntil_0;
+
+struct TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_char.both.compat.c
new file mode 100644
index 0000000..65f152e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct TakeUntil_0 {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+} TakeUntil_0;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.c b/cbindgen-0.24.5/tests/expectations/const_generics_char.c
new file mode 100644
index 0000000..fb50a01
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+} TakeUntil_0;
+
+TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_char.compat.c
new file mode 100644
index 0000000..7ea7ba0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+} TakeUntil_0;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.cpp b/cbindgen-0.24.5/tests/expectations/const_generics_char.cpp
new file mode 100644
index 0000000..22376cc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.cpp
@@ -0,0 +1,18 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<uint32_t V>
+struct TakeUntil {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+};
+
+extern "C" {
+
+TakeUntil<0> until_nul(const uint8_t *start, uintptr_t len);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_char.pyx
new file mode 100644
index 0000000..4e3bfe8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct TakeUntil_0:
+    const uint8_t *start;
+    uintptr_t len;
+    uintptr_t point;
+
+  TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.c
new file mode 100644
index 0000000..a6cb5ff
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct TakeUntil_0 {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+};
+
+struct TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.compat.c
new file mode 100644
index 0000000..71c01fb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct TakeUntil_0 {
+  const uint8_t *start;
+  uintptr_t len;
+  uintptr_t point;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.pyx
new file mode 100644
index 0000000..eaaa95f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_char.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct TakeUntil_0:
+    const uint8_t *start;
+    uintptr_t len;
+    uintptr_t point;
+
+  TakeUntil_0 until_nul(const uint8_t *start, uintptr_t len);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.both.c b/cbindgen-0.24.5/tests/expectations/const_generics_constant.both.c
new file mode 100644
index 0000000..42a9924
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.both.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FONT_WEIGHT_FRACTION_BITS 6
+
+typedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS {
+  uint16_t value;
+} FixedPoint_FONT_WEIGHT_FRACTION_BITS;
+
+typedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+typedef struct FontWeight {
+  FontWeightFixedPoint _0;
+} FontWeight;
+#define FontWeight_NORMAL (FontWeight){ ._0 = (FontWeightFixedPoint){ .value = (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+void root(struct FontWeight w);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_constant.both.compat.c
new file mode 100644
index 0000000..ce880ae
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.both.compat.c
@@ -0,0 +1,27 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FONT_WEIGHT_FRACTION_BITS 6
+
+typedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS {
+  uint16_t value;
+} FixedPoint_FONT_WEIGHT_FRACTION_BITS;
+
+typedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+typedef struct FontWeight {
+  FontWeightFixedPoint _0;
+} FontWeight;
+#define FontWeight_NORMAL (FontWeight){ ._0 = (FontWeightFixedPoint){ .value = (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct FontWeight w);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.c b/cbindgen-0.24.5/tests/expectations/const_generics_constant.c
new file mode 100644
index 0000000..dd24940
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FONT_WEIGHT_FRACTION_BITS 6
+
+typedef struct {
+  uint16_t value;
+} FixedPoint_FONT_WEIGHT_FRACTION_BITS;
+
+typedef FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+typedef struct {
+  FontWeightFixedPoint _0;
+} FontWeight;
+#define FontWeight_NORMAL (FontWeight){ ._0 = (FontWeightFixedPoint){ .value = (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+void root(FontWeight w);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_constant.compat.c
new file mode 100644
index 0000000..14ebfa2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.compat.c
@@ -0,0 +1,27 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FONT_WEIGHT_FRACTION_BITS 6
+
+typedef struct {
+  uint16_t value;
+} FixedPoint_FONT_WEIGHT_FRACTION_BITS;
+
+typedef FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+typedef struct {
+  FontWeightFixedPoint _0;
+} FontWeight;
+#define FontWeight_NORMAL (FontWeight){ ._0 = (FontWeightFixedPoint){ .value = (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(FontWeight w);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.cpp b/cbindgen-0.24.5/tests/expectations/const_generics_constant.cpp
new file mode 100644
index 0000000..715a071
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.cpp
@@ -0,0 +1,25 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint16_t FONT_WEIGHT_FRACTION_BITS = 6;
+
+template<uint16_t FRACTION_BITS>
+struct FixedPoint {
+  uint16_t value;
+};
+
+using FontWeightFixedPoint = FixedPoint<FONT_WEIGHT_FRACTION_BITS>;
+
+struct FontWeight {
+  FontWeightFixedPoint _0;
+};
+constexpr static const FontWeight FontWeight_NORMAL = FontWeight{ /* ._0 = */ FontWeightFixedPoint{ /* .value = */ (400 << FONT_WEIGHT_FRACTION_BITS) } };
+
+extern "C" {
+
+void root(FontWeight w);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_constant.pyx
new file mode 100644
index 0000000..4e22829
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.pyx
@@ -0,0 +1,20 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint16_t FONT_WEIGHT_FRACTION_BITS # = 6
+
+  ctypedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS:
+    uint16_t value;
+
+  ctypedef FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+  ctypedef struct FontWeight:
+    FontWeightFixedPoint _0;
+  const FontWeight FontWeight_NORMAL # = <FontWeight>{ <FontWeightFixedPoint>{ (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+  void root(FontWeight w);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.c
new file mode 100644
index 0000000..5ffb2a1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FONT_WEIGHT_FRACTION_BITS 6
+
+struct FixedPoint_FONT_WEIGHT_FRACTION_BITS {
+  uint16_t value;
+};
+
+typedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+struct FontWeight {
+  FontWeightFixedPoint _0;
+};
+#define FontWeight_NORMAL (FontWeight){ ._0 = (FontWeightFixedPoint){ .value = (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+void root(struct FontWeight w);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.compat.c
new file mode 100644
index 0000000..fc115cf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.compat.c
@@ -0,0 +1,27 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FONT_WEIGHT_FRACTION_BITS 6
+
+struct FixedPoint_FONT_WEIGHT_FRACTION_BITS {
+  uint16_t value;
+};
+
+typedef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+struct FontWeight {
+  FontWeightFixedPoint _0;
+};
+#define FontWeight_NORMAL (FontWeight){ ._0 = (FontWeightFixedPoint){ .value = (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct FontWeight w);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.pyx
new file mode 100644
index 0000000..f42ed41
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_constant.tag.pyx
@@ -0,0 +1,20 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint16_t FONT_WEIGHT_FRACTION_BITS # = 6
+
+  cdef struct FixedPoint_FONT_WEIGHT_FRACTION_BITS:
+    uint16_t value;
+
+  ctypedef FixedPoint_FONT_WEIGHT_FRACTION_BITS FontWeightFixedPoint;
+
+  cdef struct FontWeight:
+    FontWeightFixedPoint _0;
+  const FontWeight FontWeight_NORMAL # = <FontWeight>{ <FontWeightFixedPoint>{ (400 << FONT_WEIGHT_FRACTION_BITS) } }
+
+  void root(FontWeight w);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.both.c b/cbindgen-0.24.5/tests/expectations/const_generics_thru.both.c
new file mode 100644
index 0000000..4f5d5b3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.both.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Inner_1 {
+  uint8_t bytes[1];
+} Inner_1;
+
+typedef struct Outer_1 {
+  struct Inner_1 inner;
+} Outer_1;
+
+typedef struct Inner_2 {
+  uint8_t bytes[2];
+} Inner_2;
+
+typedef struct Outer_2 {
+  struct Inner_2 inner;
+} Outer_2;
+
+struct Outer_1 one(void);
+
+struct Outer_2 two(void);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.both.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_thru.both.compat.c
new file mode 100644
index 0000000..8659d4e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.both.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Inner_1 {
+  uint8_t bytes[1];
+} Inner_1;
+
+typedef struct Outer_1 {
+  struct Inner_1 inner;
+} Outer_1;
+
+typedef struct Inner_2 {
+  uint8_t bytes[2];
+} Inner_2;
+
+typedef struct Outer_2 {
+  struct Inner_2 inner;
+} Outer_2;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct Outer_1 one(void);
+
+struct Outer_2 two(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.c b/cbindgen-0.24.5/tests/expectations/const_generics_thru.c
new file mode 100644
index 0000000..31031e9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t bytes[1];
+} Inner_1;
+
+typedef struct {
+  Inner_1 inner;
+} Outer_1;
+
+typedef struct {
+  uint8_t bytes[2];
+} Inner_2;
+
+typedef struct {
+  Inner_2 inner;
+} Outer_2;
+
+Outer_1 one(void);
+
+Outer_2 two(void);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_thru.compat.c
new file mode 100644
index 0000000..d80c949
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t bytes[1];
+} Inner_1;
+
+typedef struct {
+  Inner_1 inner;
+} Outer_1;
+
+typedef struct {
+  uint8_t bytes[2];
+} Inner_2;
+
+typedef struct {
+  Inner_2 inner;
+} Outer_2;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+Outer_1 one(void);
+
+Outer_2 two(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.cpp b/cbindgen-0.24.5/tests/expectations/const_generics_thru.cpp
new file mode 100644
index 0000000..0ca2529
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<uintptr_t N>
+struct Inner {
+  uint8_t bytes[N];
+};
+
+template<uintptr_t N>
+struct Outer {
+  Inner<N> inner;
+};
+
+extern "C" {
+
+Outer<1> one();
+
+Outer<2> two();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_thru.pyx
new file mode 100644
index 0000000..784662e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.pyx
@@ -0,0 +1,23 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Inner_1:
+    uint8_t bytes[1];
+
+  ctypedef struct Outer_1:
+    Inner_1 inner;
+
+  ctypedef struct Inner_2:
+    uint8_t bytes[2];
+
+  ctypedef struct Outer_2:
+    Inner_2 inner;
+
+  Outer_1 one();
+
+  Outer_2 two();
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.c b/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.c
new file mode 100644
index 0000000..624fe8f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Inner_1 {
+  uint8_t bytes[1];
+};
+
+struct Outer_1 {
+  struct Inner_1 inner;
+};
+
+struct Inner_2 {
+  uint8_t bytes[2];
+};
+
+struct Outer_2 {
+  struct Inner_2 inner;
+};
+
+struct Outer_1 one(void);
+
+struct Outer_2 two(void);
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.compat.c b/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.compat.c
new file mode 100644
index 0000000..55d58f2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Inner_1 {
+  uint8_t bytes[1];
+};
+
+struct Outer_1 {
+  struct Inner_1 inner;
+};
+
+struct Inner_2 {
+  uint8_t bytes[2];
+};
+
+struct Outer_2 {
+  struct Inner_2 inner;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct Outer_1 one(void);
+
+struct Outer_2 two(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.pyx b/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.pyx
new file mode 100644
index 0000000..cc8a0fc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_generics_thru.tag.pyx
@@ -0,0 +1,23 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Inner_1:
+    uint8_t bytes[1];
+
+  cdef struct Outer_1:
+    Inner_1 inner;
+
+  cdef struct Inner_2:
+    uint8_t bytes[2];
+
+  cdef struct Outer_2:
+    Inner_2 inner;
+
+  Outer_1 one();
+
+  Outer_2 two();
diff --git a/cbindgen-0.24.5/tests/expectations/const_transparent.compat.c b/cbindgen-0.24.5/tests/expectations/const_transparent.compat.c
new file mode 100644
index 0000000..642e72e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_transparent.compat.c
@@ -0,0 +1,8 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef uint8_t Transparent;
+
+#define FOO 0
diff --git a/cbindgen-0.24.5/tests/expectations/const_transparent.cpp b/cbindgen-0.24.5/tests/expectations/const_transparent.cpp
new file mode 100644
index 0000000..920af50
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_transparent.cpp
@@ -0,0 +1,9 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+using Transparent = uint8_t;
+
+constexpr static const Transparent FOO = 0;
diff --git a/cbindgen-0.24.5/tests/expectations/const_transparent.pyx b/cbindgen-0.24.5/tests/expectations/const_transparent.pyx
new file mode 100644
index 0000000..27e68d9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/const_transparent.pyx
@@ -0,0 +1,11 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef uint8_t Transparent;
+
+  const Transparent FOO # = 0
diff --git a/cbindgen-0.24.5/tests/expectations/constant.both.c b/cbindgen-0.24.5/tests/expectations/constant.both.c
new file mode 100644
index 0000000..73ae532
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.both.c
@@ -0,0 +1,53 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+#define QUOTE '\''
+
+#define TAB '\t'
+
+#define NEWLINE '\n'
+
+#define HEART U'\U00002764'
+
+#define EQUID U'\U00010083'
+
+#define ZOM 3.14
+
+/**
+ * A single-line doc comment.
+ */
+#define POS_ONE 1
+
+/**
+ * A
+ * multi-line
+ * doc
+ * comment.
+ */
+#define NEG_ONE -1
+
+#define SHIFT 3
+
+#define XBOOL 1
+
+#define XFALSE ((0 << SHIFT) | XBOOL)
+
+#define XTRUE (1 << (SHIFT | XBOOL))
+
+#define CAST (uint8_t)'A'
+
+#define DOUBLE_CAST (uint32_t)(float)1
+
+typedef struct Foo {
+  int32_t x[FOO];
+} Foo;
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/constant.both.compat.c b/cbindgen-0.24.5/tests/expectations/constant.both.compat.c
new file mode 100644
index 0000000..08843c6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.both.compat.c
@@ -0,0 +1,61 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+#define QUOTE '\''
+
+#define TAB '\t'
+
+#define NEWLINE '\n'
+
+#define HEART U'\U00002764'
+
+#define EQUID U'\U00010083'
+
+#define ZOM 3.14
+
+/**
+ * A single-line doc comment.
+ */
+#define POS_ONE 1
+
+/**
+ * A
+ * multi-line
+ * doc
+ * comment.
+ */
+#define NEG_ONE -1
+
+#define SHIFT 3
+
+#define XBOOL 1
+
+#define XFALSE ((0 << SHIFT) | XBOOL)
+
+#define XTRUE (1 << (SHIFT | XBOOL))
+
+#define CAST (uint8_t)'A'
+
+#define DOUBLE_CAST (uint32_t)(float)1
+
+typedef struct Foo {
+  int32_t x[FOO];
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/constant.c b/cbindgen-0.24.5/tests/expectations/constant.c
new file mode 100644
index 0000000..3ae4680
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.c
@@ -0,0 +1,53 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+#define QUOTE '\''
+
+#define TAB '\t'
+
+#define NEWLINE '\n'
+
+#define HEART U'\U00002764'
+
+#define EQUID U'\U00010083'
+
+#define ZOM 3.14
+
+/**
+ * A single-line doc comment.
+ */
+#define POS_ONE 1
+
+/**
+ * A
+ * multi-line
+ * doc
+ * comment.
+ */
+#define NEG_ONE -1
+
+#define SHIFT 3
+
+#define XBOOL 1
+
+#define XFALSE ((0 << SHIFT) | XBOOL)
+
+#define XTRUE (1 << (SHIFT | XBOOL))
+
+#define CAST (uint8_t)'A'
+
+#define DOUBLE_CAST (uint32_t)(float)1
+
+typedef struct {
+  int32_t x[FOO];
+} Foo;
+
+void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/constant.compat.c b/cbindgen-0.24.5/tests/expectations/constant.compat.c
new file mode 100644
index 0000000..654a75e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.compat.c
@@ -0,0 +1,61 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+#define QUOTE '\''
+
+#define TAB '\t'
+
+#define NEWLINE '\n'
+
+#define HEART U'\U00002764'
+
+#define EQUID U'\U00010083'
+
+#define ZOM 3.14
+
+/**
+ * A single-line doc comment.
+ */
+#define POS_ONE 1
+
+/**
+ * A
+ * multi-line
+ * doc
+ * comment.
+ */
+#define NEG_ONE -1
+
+#define SHIFT 3
+
+#define XBOOL 1
+
+#define XFALSE ((0 << SHIFT) | XBOOL)
+
+#define XTRUE (1 << (SHIFT | XBOOL))
+
+#define CAST (uint8_t)'A'
+
+#define DOUBLE_CAST (uint32_t)(float)1
+
+typedef struct {
+  int32_t x[FOO];
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/constant.cpp b/cbindgen-0.24.5/tests/expectations/constant.cpp
new file mode 100644
index 0000000..a43099d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.cpp
@@ -0,0 +1,54 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const int32_t FOO = 10;
+
+constexpr static const uint32_t DELIMITER = ':';
+
+constexpr static const uint32_t LEFTCURLY = '{';
+
+constexpr static const uint32_t QUOTE = '\'';
+
+constexpr static const uint32_t TAB = '\t';
+
+constexpr static const uint32_t NEWLINE = '\n';
+
+constexpr static const uint32_t HEART = U'\U00002764';
+
+constexpr static const uint32_t EQUID = U'\U00010083';
+
+constexpr static const float ZOM = 3.14;
+
+/// A single-line doc comment.
+constexpr static const int8_t POS_ONE = 1;
+
+/// A
+/// multi-line
+/// doc
+/// comment.
+constexpr static const int8_t NEG_ONE = -1;
+
+constexpr static const int64_t SHIFT = 3;
+
+constexpr static const int64_t XBOOL = 1;
+
+constexpr static const int64_t XFALSE = ((0 << SHIFT) | XBOOL);
+
+constexpr static const int64_t XTRUE = (1 << (SHIFT | XBOOL));
+
+constexpr static const uint8_t CAST = (uint8_t)'A';
+
+constexpr static const uint32_t DOUBLE_CAST = (uint32_t)(float)1;
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+extern "C" {
+
+void root(Foo x);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/constant.pyx b/cbindgen-0.24.5/tests/expectations/constant.pyx
new file mode 100644
index 0000000..8ec614e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.pyx
@@ -0,0 +1,51 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t FOO # = 10
+
+  const uint32_t DELIMITER # = ':'
+
+  const uint32_t LEFTCURLY # = '{'
+
+  const uint32_t QUOTE # = '\''
+
+  const uint32_t TAB # = '\t'
+
+  const uint32_t NEWLINE # = '\n'
+
+  const uint32_t HEART # = U'\U00002764'
+
+  const uint32_t EQUID # = U'\U00010083'
+
+  const float ZOM # = 3.14
+
+  # A single-line doc comment.
+  const int8_t POS_ONE # = 1
+
+  # A
+  # multi-line
+  # doc
+  # comment.
+  const int8_t NEG_ONE # = -1
+
+  const int64_t SHIFT # = 3
+
+  const int64_t XBOOL # = 1
+
+  const int64_t XFALSE # = ((0 << SHIFT) | XBOOL)
+
+  const int64_t XTRUE # = (1 << (SHIFT | XBOOL))
+
+  const uint8_t CAST # = <uint8_t>'A'
+
+  const uint32_t DOUBLE_CAST # = <uint32_t><float>1
+
+  ctypedef struct Foo:
+    int32_t x[FOO];
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/constant.tag.c b/cbindgen-0.24.5/tests/expectations/constant.tag.c
new file mode 100644
index 0000000..b5aa355
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.tag.c
@@ -0,0 +1,53 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+#define QUOTE '\''
+
+#define TAB '\t'
+
+#define NEWLINE '\n'
+
+#define HEART U'\U00002764'
+
+#define EQUID U'\U00010083'
+
+#define ZOM 3.14
+
+/**
+ * A single-line doc comment.
+ */
+#define POS_ONE 1
+
+/**
+ * A
+ * multi-line
+ * doc
+ * comment.
+ */
+#define NEG_ONE -1
+
+#define SHIFT 3
+
+#define XBOOL 1
+
+#define XFALSE ((0 << SHIFT) | XBOOL)
+
+#define XTRUE (1 << (SHIFT | XBOOL))
+
+#define CAST (uint8_t)'A'
+
+#define DOUBLE_CAST (uint32_t)(float)1
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/constant.tag.compat.c b/cbindgen-0.24.5/tests/expectations/constant.tag.compat.c
new file mode 100644
index 0000000..2154e49
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.tag.compat.c
@@ -0,0 +1,61 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+#define QUOTE '\''
+
+#define TAB '\t'
+
+#define NEWLINE '\n'
+
+#define HEART U'\U00002764'
+
+#define EQUID U'\U00010083'
+
+#define ZOM 3.14
+
+/**
+ * A single-line doc comment.
+ */
+#define POS_ONE 1
+
+/**
+ * A
+ * multi-line
+ * doc
+ * comment.
+ */
+#define NEG_ONE -1
+
+#define SHIFT 3
+
+#define XBOOL 1
+
+#define XFALSE ((0 << SHIFT) | XBOOL)
+
+#define XTRUE (1 << (SHIFT | XBOOL))
+
+#define CAST (uint8_t)'A'
+
+#define DOUBLE_CAST (uint32_t)(float)1
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/constant.tag.pyx b/cbindgen-0.24.5/tests/expectations/constant.tag.pyx
new file mode 100644
index 0000000..5d60f6a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant.tag.pyx
@@ -0,0 +1,51 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t FOO # = 10
+
+  const uint32_t DELIMITER # = ':'
+
+  const uint32_t LEFTCURLY # = '{'
+
+  const uint32_t QUOTE # = '\''
+
+  const uint32_t TAB # = '\t'
+
+  const uint32_t NEWLINE # = '\n'
+
+  const uint32_t HEART # = U'\U00002764'
+
+  const uint32_t EQUID # = U'\U00010083'
+
+  const float ZOM # = 3.14
+
+  # A single-line doc comment.
+  const int8_t POS_ONE # = 1
+
+  # A
+  # multi-line
+  # doc
+  # comment.
+  const int8_t NEG_ONE # = -1
+
+  const int64_t SHIFT # = 3
+
+  const int64_t XBOOL # = 1
+
+  const int64_t XFALSE # = ((0 << SHIFT) | XBOOL)
+
+  const int64_t XTRUE # = (1 << (SHIFT | XBOOL))
+
+  const uint8_t CAST # = <uint8_t>'A'
+
+  const uint32_t DOUBLE_CAST # = <uint32_t><float>1
+
+  cdef struct Foo:
+    int32_t x[FOO];
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/constant_big.compat.c b/cbindgen-0.24.5/tests/expectations/constant_big.compat.c
new file mode 100644
index 0000000..0a52aad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_big.compat.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define UNSIGNED_NEEDS_ULL_SUFFIX 9223372036854775808ull
+
+#define UNSIGNED_DOESNT_NEED_ULL_SUFFIX 8070450532247928832
+
+#define SIGNED_NEEDS_ULL_SUFFIX -9223372036854775808ull
+
+#define SIGNED_DOESNT_NEED_ULL_SUFFIX -9223372036854775807
diff --git a/cbindgen-0.24.5/tests/expectations/constant_big.cpp b/cbindgen-0.24.5/tests/expectations/constant_big.cpp
new file mode 100644
index 0000000..8b0ebc9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_big.cpp
@@ -0,0 +1,13 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint64_t UNSIGNED_NEEDS_ULL_SUFFIX = 9223372036854775808ull;
+
+constexpr static const uint64_t UNSIGNED_DOESNT_NEED_ULL_SUFFIX = 8070450532247928832;
+
+constexpr static const int64_t SIGNED_NEEDS_ULL_SUFFIX = -9223372036854775808ull;
+
+constexpr static const int64_t SIGNED_DOESNT_NEED_ULL_SUFFIX = -9223372036854775807;
diff --git a/cbindgen-0.24.5/tests/expectations/constant_big.pyx b/cbindgen-0.24.5/tests/expectations/constant_big.pyx
new file mode 100644
index 0000000..178c637
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_big.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint64_t UNSIGNED_NEEDS_ULL_SUFFIX # = 9223372036854775808ull
+
+  const uint64_t UNSIGNED_DOESNT_NEED_ULL_SUFFIX # = 8070450532247928832
+
+  const int64_t SIGNED_NEEDS_ULL_SUFFIX # = -9223372036854775808ull
+
+  const int64_t SIGNED_DOESNT_NEED_ULL_SUFFIX # = -9223372036854775807
diff --git a/cbindgen-0.24.5/tests/expectations/constant_constexpr.both.compat.c b/cbindgen-0.24.5/tests/expectations/constant_constexpr.both.compat.c
new file mode 100644
index 0000000..77e9b48
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_constexpr.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define CONSTANT_I64 216
+
+#define CONSTANT_FLOAT32 312.292
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+typedef struct Foo {
+  int32_t x;
+} Foo;
+#define Foo_CONSTANT_I64_BODY 216
+
+#define SomeFoo (Foo){ .x = 99 }
diff --git a/cbindgen-0.24.5/tests/expectations/constant_constexpr.compat.c b/cbindgen-0.24.5/tests/expectations/constant_constexpr.compat.c
new file mode 100644
index 0000000..a389d06
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_constexpr.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define CONSTANT_I64 216
+
+#define CONSTANT_FLOAT32 312.292
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+typedef struct {
+  int32_t x;
+} Foo;
+#define Foo_CONSTANT_I64_BODY 216
+
+#define SomeFoo (Foo){ .x = 99 }
diff --git a/cbindgen-0.24.5/tests/expectations/constant_constexpr.cpp b/cbindgen-0.24.5/tests/expectations/constant_constexpr.cpp
new file mode 100644
index 0000000..f600980
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_constexpr.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+static const int64_t CONSTANT_I64 = 216;
+
+static const float CONSTANT_FLOAT32 = 312.292;
+
+static const uint32_t DELIMITER = ':';
+
+static const uint32_t LEFTCURLY = '{';
+
+struct Foo {
+  int32_t x;
+  static const int64_t CONSTANT_I64_BODY;
+};
+inline const int64_t Foo::CONSTANT_I64_BODY = 216;
+
+static const Foo SomeFoo = Foo{ /* .x = */ 99 };
diff --git a/cbindgen-0.24.5/tests/expectations/constant_constexpr.pyx b/cbindgen-0.24.5/tests/expectations/constant_constexpr.pyx
new file mode 100644
index 0000000..52d03fe
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_constexpr.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int64_t CONSTANT_I64 # = 216
+
+  const float CONSTANT_FLOAT32 # = 312.292
+
+  const uint32_t DELIMITER # = ':'
+
+  const uint32_t LEFTCURLY # = '{'
+
+  ctypedef struct Foo:
+    int32_t x;
+  const int64_t Foo_CONSTANT_I64_BODY # = 216
+
+  const Foo SomeFoo # = <Foo>{ 99 }
diff --git a/cbindgen-0.24.5/tests/expectations/constant_constexpr.tag.compat.c b/cbindgen-0.24.5/tests/expectations/constant_constexpr.tag.compat.c
new file mode 100644
index 0000000..6f1fde2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_constexpr.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define CONSTANT_I64 216
+
+#define CONSTANT_FLOAT32 312.292
+
+#define DELIMITER ':'
+
+#define LEFTCURLY '{'
+
+struct Foo {
+  int32_t x;
+};
+#define Foo_CONSTANT_I64_BODY 216
+
+#define SomeFoo (Foo){ .x = 99 }
diff --git a/cbindgen-0.24.5/tests/expectations/constant_constexpr.tag.pyx b/cbindgen-0.24.5/tests/expectations/constant_constexpr.tag.pyx
new file mode 100644
index 0000000..0d42b0b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_constexpr.tag.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int64_t CONSTANT_I64 # = 216
+
+  const float CONSTANT_FLOAT32 # = 312.292
+
+  const uint32_t DELIMITER # = ':'
+
+  const uint32_t LEFTCURLY # = '{'
+
+  cdef struct Foo:
+    int32_t x;
+  const int64_t Foo_CONSTANT_I64_BODY # = 216
+
+  const Foo SomeFoo # = <Foo>{ 99 }
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_name.c b/cbindgen-0.24.5/tests/expectations/constant_sort_name.c
new file mode 100644
index 0000000..0ae1d49
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_name.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define A 0
+
+#define B 0
+
+extern const uint8_t C;
+
+extern const uint8_t D;
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_name.compat.c b/cbindgen-0.24.5/tests/expectations/constant_sort_name.compat.c
new file mode 100644
index 0000000..1b9032a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_name.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define A 0
+
+#define B 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const uint8_t C;
+
+extern const uint8_t D;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_name.cpp b/cbindgen-0.24.5/tests/expectations/constant_sort_name.cpp
new file mode 100644
index 0000000..1a7dd50
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_name.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint8_t A = 0;
+
+constexpr static const uint8_t B = 0;
+
+extern "C" {
+
+extern const uint8_t C;
+
+extern const uint8_t D;
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_name.pyx b/cbindgen-0.24.5/tests/expectations/constant_sort_name.pyx
new file mode 100644
index 0000000..a9f4865
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_name.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t A # = 0
+
+  const uint8_t B # = 0
+
+  extern const uint8_t C;
+
+  extern const uint8_t D;
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_none.c b/cbindgen-0.24.5/tests/expectations/constant_sort_none.c
new file mode 100644
index 0000000..2ec6a14
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_none.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define B 0
+
+#define A 0
+
+extern const uint8_t D;
+
+extern const uint8_t C;
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_none.compat.c b/cbindgen-0.24.5/tests/expectations/constant_sort_none.compat.c
new file mode 100644
index 0000000..c9c7445
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_none.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define B 0
+
+#define A 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const uint8_t D;
+
+extern const uint8_t C;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_none.cpp b/cbindgen-0.24.5/tests/expectations/constant_sort_none.cpp
new file mode 100644
index 0000000..c5571e9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_none.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint8_t B = 0;
+
+constexpr static const uint8_t A = 0;
+
+extern "C" {
+
+extern const uint8_t D;
+
+extern const uint8_t C;
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/constant_sort_none.pyx b/cbindgen-0.24.5/tests/expectations/constant_sort_none.pyx
new file mode 100644
index 0000000..69e1a0e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_sort_none.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t B # = 0
+
+  const uint8_t A # = 0
+
+  extern const uint8_t D;
+
+  extern const uint8_t C;
diff --git a/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.both.compat.c b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.both.compat.c
new file mode 100644
index 0000000..102789b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum E {
+  V,
+} E;
+
+typedef struct S {
+  uint8_t field;
+} S;
+
+typedef uint8_t A;
+
+#define C1 (S){ .field = 0 }
+
+#define C2 V
+
+#define C3 0
diff --git a/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.compat.c b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.compat.c
new file mode 100644
index 0000000..d0eb1ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  V,
+} E;
+
+typedef struct {
+  uint8_t field;
+} S;
+
+typedef uint8_t A;
+
+#define C1 (S){ .field = 0 }
+
+#define C2 V
+
+#define C3 0
diff --git a/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.cpp b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.cpp
new file mode 100644
index 0000000..f127292
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum E {
+  V,
+};
+
+struct S {
+  uint8_t field;
+};
+
+using A = uint8_t;
+
+constexpr static const S C1 = S{ /* .field = */ 0 };
+
+constexpr static const E C2 = V;
+
+constexpr static const A C3 = 0;
diff --git a/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.pyx b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.pyx
new file mode 100644
index 0000000..fc29bd2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef enum E:
+    V,
+
+  ctypedef struct S:
+    uint8_t field;
+
+  ctypedef uint8_t A;
+
+  const S C1 # = <S>{ 0 }
+
+  const E C2 # = V
+
+  const A C3 # = 0
diff --git a/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.tag.compat.c b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.tag.compat.c
new file mode 100644
index 0000000..3cf3e60
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum E {
+  V,
+};
+
+struct S {
+  uint8_t field;
+};
+
+typedef uint8_t A;
+
+#define C1 (S){ .field = 0 }
+
+#define C2 V
+
+#define C3 0
diff --git a/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.tag.pyx b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.tag.pyx
new file mode 100644
index 0000000..bc95105
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/constant_user_defined_type.tag.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum E:
+    V,
+
+  cdef struct S:
+    uint8_t field;
+
+  ctypedef uint8_t A;
+
+  const S C1 # = <S>{ 0 }
+
+  const E C2 # = V
+
+  const A C3 # = 0
diff --git a/cbindgen-0.24.5/tests/expectations/custom_header.c b/cbindgen-0.24.5/tests/expectations/custom_header.c
new file mode 100644
index 0000000..0c9a83b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/custom_header.c
@@ -0,0 +1,10 @@
+#if 0
+# This file is generated by cbindgen. DO NOT EDIT
+#endif
+
+
+void root(void);
+
+#if 0
+# This is a simple test to ensure that trailers do not cause extra newlines in files
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/custom_header.compat.c b/cbindgen-0.24.5/tests/expectations/custom_header.compat.c
new file mode 100644
index 0000000..7adabf2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/custom_header.compat.c
@@ -0,0 +1,18 @@
+#if 0
+# This file is generated by cbindgen. DO NOT EDIT
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+# This is a simple test to ensure that trailers do not cause extra newlines in files
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/custom_header.cpp b/cbindgen-0.24.5/tests/expectations/custom_header.cpp
new file mode 100644
index 0000000..c7313b1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/custom_header.cpp
@@ -0,0 +1,14 @@
+#if 0
+# This file is generated by cbindgen. DO NOT EDIT
+#endif
+
+
+extern "C" {
+
+void root();
+
+} // extern "C"
+
+#if 0
+# This is a simple test to ensure that trailers do not cause extra newlines in files
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/custom_header.pyx b/cbindgen-0.24.5/tests/expectations/custom_header.pyx
new file mode 100644
index 0000000..eaef46c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/custom_header.pyx
@@ -0,0 +1,12 @@
+#if 0
+# This file is generated by cbindgen. DO NOT EDIT
+#endif
+
+
+cdef extern from *:
+
+  void root();
+
+#if 0
+# This is a simple test to ensure that trailers do not cause extra newlines in files
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/cython_options.compat.c b/cbindgen-0.24.5/tests/expectations/cython_options.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cython_options.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/cython_options.cpp b/cbindgen-0.24.5/tests/expectations/cython_options.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cython_options.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/cython_options.pyx b/cbindgen-0.24.5/tests/expectations/cython_options.pyx
new file mode 100644
index 0000000..ea2c975
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/cython_options.pyx
@@ -0,0 +1,10 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+from libc.stddef cimport *
+from libc.stdint cimport int8_t, int16_t
+
+cdef extern from "my_header.h":
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.both.c b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.both.c
new file mode 100644
index 0000000..486b31c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.both.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum BindingType {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+typedef uint32_t BindingType;
+
+typedef struct BindGroupLayoutEntry {
+  BindingType ty;
+} BindGroupLayoutEntry;
+
+void root(struct BindGroupLayoutEntry entry);
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.both.compat.c b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.both.compat.c
new file mode 100644
index 0000000..e8a8d49
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.both.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum BindingType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+#ifndef __cplusplus
+typedef uint32_t BindingType;
+#endif // __cplusplus
+
+typedef struct BindGroupLayoutEntry {
+  BindingType ty;
+} BindGroupLayoutEntry;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct BindGroupLayoutEntry entry);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.c b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.c
new file mode 100644
index 0000000..41a148e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum BindingType {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+typedef uint32_t BindingType;
+
+typedef struct {
+  BindingType ty;
+} BindGroupLayoutEntry;
+
+void root(BindGroupLayoutEntry entry);
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.compat.c b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.compat.c
new file mode 100644
index 0000000..a78700f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum BindingType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+#ifndef __cplusplus
+typedef uint32_t BindingType;
+#endif // __cplusplus
+
+typedef struct {
+  BindingType ty;
+} BindGroupLayoutEntry;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(BindGroupLayoutEntry entry);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.cpp b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.cpp
new file mode 100644
index 0000000..74c2ae1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.cpp
@@ -0,0 +1,20 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class BindingType : uint32_t {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+
+struct BindGroupLayoutEntry {
+  BindingType ty;
+};
+
+extern "C" {
+
+void root(BindGroupLayoutEntry entry);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.pyx b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.pyx
new file mode 100644
index 0000000..d7dbc5e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Buffer # = 0,
+    NotBuffer # = 1,
+  ctypedef uint32_t BindingType;
+
+  ctypedef struct BindGroupLayoutEntry:
+    BindingType ty;
+
+  void root(BindGroupLayoutEntry entry);
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.c b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.c
new file mode 100644
index 0000000..7504e4a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum BindingType {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+typedef uint32_t BindingType;
+
+struct BindGroupLayoutEntry {
+  BindingType ty;
+};
+
+void root(struct BindGroupLayoutEntry entry);
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.compat.c b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.compat.c
new file mode 100644
index 0000000..6011756
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum BindingType
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  Buffer = 0,
+  NotBuffer = 1,
+};
+#ifndef __cplusplus
+typedef uint32_t BindingType;
+#endif // __cplusplus
+
+struct BindGroupLayoutEntry {
+  BindingType ty;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct BindGroupLayoutEntry entry);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.pyx b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.pyx
new file mode 100644
index 0000000..82ebc2f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/decl_name_conflicting.tag.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Buffer # = 0,
+    NotBuffer # = 1,
+  ctypedef uint32_t BindingType;
+
+  cdef struct BindGroupLayoutEntry:
+    BindingType ty;
+
+  void root(BindGroupLayoutEntry entry);
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.both.c b/cbindgen-0.24.5/tests/expectations/dep_v2.both.c
new file mode 100644
index 0000000..9a91a4f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct dep_struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+uint32_t get_x(const struct dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.both.compat.c b/cbindgen-0.24.5/tests/expectations/dep_v2.both.compat.c
new file mode 100644
index 0000000..9cd14e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct dep_struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const struct dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.c b/cbindgen-0.24.5/tests/expectations/dep_v2.c
new file mode 100644
index 0000000..3d2cf8e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.compat.c b/cbindgen-0.24.5/tests/expectations/dep_v2.compat.c
new file mode 100644
index 0000000..4dc7fb3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.cpp b/cbindgen-0.24.5/tests/expectations/dep_v2.cpp
new file mode 100644
index 0000000..914b798
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+extern "C" {
+
+uint32_t get_x(const dep_struct *dep_struct);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.pyx b/cbindgen-0.24.5/tests/expectations/dep_v2.pyx
new file mode 100644
index 0000000..038a566
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct dep_struct:
+    uint32_t x;
+    double y;
+
+  uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.tag.c b/cbindgen-0.24.5/tests/expectations/dep_v2.tag.c
new file mode 100644
index 0000000..45fcba6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+uint32_t get_x(const struct dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.tag.compat.c b/cbindgen-0.24.5/tests/expectations/dep_v2.tag.compat.c
new file mode 100644
index 0000000..344af64
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const struct dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/dep_v2.tag.pyx b/cbindgen-0.24.5/tests/expectations/dep_v2.tag.pyx
new file mode 100644
index 0000000..74d296b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/dep_v2.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct dep_struct:
+    uint32_t x;
+    double y;
+
+  uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.both.c b/cbindgen-0.24.5/tests/expectations/derive_eq.both.c
new file mode 100644
index 0000000..eab5b1c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.both.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  bool a;
+  int32_t b;
+} Foo;
+
+enum Bar_Tag {
+  Baz,
+  Bazz,
+  FooNamed,
+  FooParen,
+};
+typedef uint8_t Bar_Tag;
+
+typedef struct Bazz_Body {
+  Bar_Tag tag;
+  struct Foo named;
+} Bazz_Body;
+
+typedef struct FooNamed_Body {
+  Bar_Tag tag;
+  int32_t different;
+  uint32_t fields;
+} FooNamed_Body;
+
+typedef struct FooParen_Body {
+  Bar_Tag tag;
+  int32_t _0;
+  struct Foo _1;
+} FooParen_Body;
+
+typedef union Bar {
+  Bar_Tag tag;
+  Bazz_Body bazz;
+  FooNamed_Body foo_named;
+  FooParen_Body foo_paren;
+} Bar;
+
+struct Foo root(union Bar aBar);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.both.compat.c b/cbindgen-0.24.5/tests/expectations/derive_eq.both.compat.c
new file mode 100644
index 0000000..f628dd7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.both.compat.c
@@ -0,0 +1,57 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  bool a;
+  int32_t b;
+} Foo;
+
+enum Bar_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Baz,
+  Bazz,
+  FooNamed,
+  FooParen,
+};
+#ifndef __cplusplus
+typedef uint8_t Bar_Tag;
+#endif // __cplusplus
+
+typedef struct Bazz_Body {
+  Bar_Tag tag;
+  struct Foo named;
+} Bazz_Body;
+
+typedef struct FooNamed_Body {
+  Bar_Tag tag;
+  int32_t different;
+  uint32_t fields;
+} FooNamed_Body;
+
+typedef struct FooParen_Body {
+  Bar_Tag tag;
+  int32_t _0;
+  struct Foo _1;
+} FooParen_Body;
+
+typedef union Bar {
+  Bar_Tag tag;
+  Bazz_Body bazz;
+  FooNamed_Body foo_named;
+  FooParen_Body foo_paren;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct Foo root(union Bar aBar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.c b/cbindgen-0.24.5/tests/expectations/derive_eq.c
new file mode 100644
index 0000000..339a937
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  bool a;
+  int32_t b;
+} Foo;
+
+enum Bar_Tag {
+  Baz,
+  Bazz,
+  FooNamed,
+  FooParen,
+};
+typedef uint8_t Bar_Tag;
+
+typedef struct {
+  Bar_Tag tag;
+  Foo named;
+} Bazz_Body;
+
+typedef struct {
+  Bar_Tag tag;
+  int32_t different;
+  uint32_t fields;
+} FooNamed_Body;
+
+typedef struct {
+  Bar_Tag tag;
+  int32_t _0;
+  Foo _1;
+} FooParen_Body;
+
+typedef union {
+  Bar_Tag tag;
+  Bazz_Body bazz;
+  FooNamed_Body foo_named;
+  FooParen_Body foo_paren;
+} Bar;
+
+Foo root(Bar aBar);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.compat.c b/cbindgen-0.24.5/tests/expectations/derive_eq.compat.c
new file mode 100644
index 0000000..51a8e4d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.compat.c
@@ -0,0 +1,57 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  bool a;
+  int32_t b;
+} Foo;
+
+enum Bar_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Baz,
+  Bazz,
+  FooNamed,
+  FooParen,
+};
+#ifndef __cplusplus
+typedef uint8_t Bar_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  Bar_Tag tag;
+  Foo named;
+} Bazz_Body;
+
+typedef struct {
+  Bar_Tag tag;
+  int32_t different;
+  uint32_t fields;
+} FooNamed_Body;
+
+typedef struct {
+  Bar_Tag tag;
+  int32_t _0;
+  Foo _1;
+} FooParen_Body;
+
+typedef union {
+  Bar_Tag tag;
+  Bazz_Body bazz;
+  FooNamed_Body foo_named;
+  FooParen_Body foo_paren;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+Foo root(Bar aBar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.cpp b/cbindgen-0.24.5/tests/expectations/derive_eq.cpp
new file mode 100644
index 0000000..46c10d4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.cpp
@@ -0,0 +1,100 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+  bool a;
+  int32_t b;
+
+  bool operator==(const Foo& aOther) const {
+    return a == aOther.a &&
+           b == aOther.b;
+  }
+  bool operator!=(const Foo& aOther) const {
+    return a != aOther.a ||
+           b != aOther.b;
+  }
+};
+
+union Bar {
+  enum class Tag : uint8_t {
+    Baz,
+    Bazz,
+    FooNamed,
+    FooParen,
+  };
+
+  struct Bazz_Body {
+    Tag tag;
+    Foo named;
+
+    bool operator==(const Bazz_Body& aOther) const {
+      return named == aOther.named;
+    }
+    bool operator!=(const Bazz_Body& aOther) const {
+      return named != aOther.named;
+    }
+  };
+
+  struct FooNamed_Body {
+    Tag tag;
+    int32_t different;
+    uint32_t fields;
+
+    bool operator==(const FooNamed_Body& aOther) const {
+      return different == aOther.different &&
+             fields == aOther.fields;
+    }
+    bool operator!=(const FooNamed_Body& aOther) const {
+      return different != aOther.different ||
+             fields != aOther.fields;
+    }
+  };
+
+  struct FooParen_Body {
+    Tag tag;
+    int32_t _0;
+    Foo _1;
+
+    bool operator==(const FooParen_Body& aOther) const {
+      return _0 == aOther._0 &&
+             _1 == aOther._1;
+    }
+    bool operator!=(const FooParen_Body& aOther) const {
+      return _0 != aOther._0 ||
+             _1 != aOther._1;
+    }
+  };
+
+  struct {
+    Tag tag;
+  };
+  Bazz_Body bazz;
+  FooNamed_Body foo_named;
+  FooParen_Body foo_paren;
+
+  bool operator==(const Bar& aOther) const {
+    if (tag != aOther.tag) {
+      return false;
+    }
+    switch (tag) {
+      case Tag::Bazz: return bazz == aOther.bazz;
+      case Tag::FooNamed: return foo_named == aOther.foo_named;
+      case Tag::FooParen: return foo_paren == aOther.foo_paren;
+      default: break;
+    }
+    return true;
+  }
+
+  bool operator!=(const Bar& aOther) const {
+    return !(*this == aOther);
+  }
+};
+
+extern "C" {
+
+Foo root(Bar aBar);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.pyx b/cbindgen-0.24.5/tests/expectations/derive_eq.pyx
new file mode 100644
index 0000000..0281a8a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.pyx
@@ -0,0 +1,40 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    bool a;
+    int32_t b;
+
+  cdef enum:
+    Baz,
+    Bazz,
+    FooNamed,
+    FooParen,
+  ctypedef uint8_t Bar_Tag;
+
+  ctypedef struct Bazz_Body:
+    Bar_Tag tag;
+    Foo named;
+
+  ctypedef struct FooNamed_Body:
+    Bar_Tag tag;
+    int32_t different;
+    uint32_t fields;
+
+  ctypedef struct FooParen_Body:
+    Bar_Tag tag;
+    int32_t _0;
+    Foo _1;
+
+  ctypedef union Bar:
+    Bar_Tag tag;
+    Bazz_Body bazz;
+    FooNamed_Body foo_named;
+    FooParen_Body foo_paren;
+
+  Foo root(Bar aBar);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.tag.c b/cbindgen-0.24.5/tests/expectations/derive_eq.tag.c
new file mode 100644
index 0000000..4de1da9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.tag.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  bool a;
+  int32_t b;
+};
+
+enum Bar_Tag {
+  Baz,
+  Bazz,
+  FooNamed,
+  FooParen,
+};
+typedef uint8_t Bar_Tag;
+
+struct Bazz_Body {
+  Bar_Tag tag;
+  struct Foo named;
+};
+
+struct FooNamed_Body {
+  Bar_Tag tag;
+  int32_t different;
+  uint32_t fields;
+};
+
+struct FooParen_Body {
+  Bar_Tag tag;
+  int32_t _0;
+  struct Foo _1;
+};
+
+union Bar {
+  Bar_Tag tag;
+  struct Bazz_Body bazz;
+  struct FooNamed_Body foo_named;
+  struct FooParen_Body foo_paren;
+};
+
+struct Foo root(union Bar aBar);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.tag.compat.c b/cbindgen-0.24.5/tests/expectations/derive_eq.tag.compat.c
new file mode 100644
index 0000000..4e99d1c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.tag.compat.c
@@ -0,0 +1,57 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  bool a;
+  int32_t b;
+};
+
+enum Bar_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Baz,
+  Bazz,
+  FooNamed,
+  FooParen,
+};
+#ifndef __cplusplus
+typedef uint8_t Bar_Tag;
+#endif // __cplusplus
+
+struct Bazz_Body {
+  Bar_Tag tag;
+  struct Foo named;
+};
+
+struct FooNamed_Body {
+  Bar_Tag tag;
+  int32_t different;
+  uint32_t fields;
+};
+
+struct FooParen_Body {
+  Bar_Tag tag;
+  int32_t _0;
+  struct Foo _1;
+};
+
+union Bar {
+  Bar_Tag tag;
+  struct Bazz_Body bazz;
+  struct FooNamed_Body foo_named;
+  struct FooParen_Body foo_paren;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct Foo root(union Bar aBar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/derive_eq.tag.pyx b/cbindgen-0.24.5/tests/expectations/derive_eq.tag.pyx
new file mode 100644
index 0000000..10024bb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_eq.tag.pyx
@@ -0,0 +1,40 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    bool a;
+    int32_t b;
+
+  cdef enum:
+    Baz,
+    Bazz,
+    FooNamed,
+    FooParen,
+  ctypedef uint8_t Bar_Tag;
+
+  cdef struct Bazz_Body:
+    Bar_Tag tag;
+    Foo named;
+
+  cdef struct FooNamed_Body:
+    Bar_Tag tag;
+    int32_t different;
+    uint32_t fields;
+
+  cdef struct FooParen_Body:
+    Bar_Tag tag;
+    int32_t _0;
+    Foo _1;
+
+  cdef union Bar:
+    Bar_Tag tag;
+    Bazz_Body bazz;
+    FooNamed_Body foo_named;
+    FooParen_Body foo_paren;
+
+  Foo root(Bar aBar);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.both.c b/cbindgen-0.24.5/tests/expectations/derive_ostream.both.c
new file mode 100644
index 0000000..8f45660
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.both.c
@@ -0,0 +1,89 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C {
+  X = 2,
+  Y,
+};
+typedef uint32_t C;
+
+typedef struct A {
+  int32_t _0;
+} A;
+
+typedef struct B {
+  int32_t x;
+  float y;
+} B;
+
+typedef struct D {
+  uint8_t List;
+  uintptr_t Of;
+  struct B Things;
+} D;
+
+enum F_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t F_Tag;
+
+typedef struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag {
+  Hello,
+  There,
+  Everyone,
+};
+typedef uint8_t H_Tag;
+
+typedef struct There_Body {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+enum I_Tag {
+  ThereAgain,
+  SomethingElse,
+};
+typedef uint8_t I_Tag;
+
+typedef struct ThereAgain_Body {
+  uint8_t x;
+  int16_t y;
+} ThereAgain_Body;
+
+typedef struct I {
+  I_Tag tag;
+  union {
+    ThereAgain_Body there_again;
+  };
+} I;
+
+void root(struct A a, struct B b, C c, struct D d, union F f, struct H h, struct I i);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.both.compat.c b/cbindgen-0.24.5/tests/expectations/derive_ostream.both.compat.c
new file mode 100644
index 0000000..ef6143d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.both.compat.c
@@ -0,0 +1,121 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  X = 2,
+  Y,
+};
+#ifndef __cplusplus
+typedef uint32_t C;
+#endif // __cplusplus
+
+typedef struct A {
+  int32_t _0;
+} A;
+
+typedef struct B {
+  int32_t x;
+  float y;
+} B;
+
+typedef struct D {
+  uint8_t List;
+  uintptr_t Of;
+  struct B Things;
+} D;
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+typedef struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Hello,
+  There,
+  Everyone,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+typedef struct There_Body {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+enum I_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  ThereAgain,
+  SomethingElse,
+};
+#ifndef __cplusplus
+typedef uint8_t I_Tag;
+#endif // __cplusplus
+
+typedef struct ThereAgain_Body {
+  uint8_t x;
+  int16_t y;
+} ThereAgain_Body;
+
+typedef struct I {
+  I_Tag tag;
+  union {
+    ThereAgain_Body there_again;
+  };
+} I;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A a, struct B b, C c, struct D d, union F f, struct H h, struct I i);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.c b/cbindgen-0.24.5/tests/expectations/derive_ostream.c
new file mode 100644
index 0000000..2db696d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.c
@@ -0,0 +1,89 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C {
+  X = 2,
+  Y,
+};
+typedef uint32_t C;
+
+typedef struct {
+  int32_t _0;
+} A;
+
+typedef struct {
+  int32_t x;
+  float y;
+} B;
+
+typedef struct {
+  uint8_t List;
+  uintptr_t Of;
+  B Things;
+} D;
+
+enum F_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t F_Tag;
+
+typedef struct {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag {
+  Hello,
+  There,
+  Everyone,
+};
+typedef uint8_t H_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+enum I_Tag {
+  ThereAgain,
+  SomethingElse,
+};
+typedef uint8_t I_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} ThereAgain_Body;
+
+typedef struct {
+  I_Tag tag;
+  union {
+    ThereAgain_Body there_again;
+  };
+} I;
+
+void root(A a, B b, C c, D d, F f, H h, I i);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.compat.c b/cbindgen-0.24.5/tests/expectations/derive_ostream.compat.c
new file mode 100644
index 0000000..60cb5fb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.compat.c
@@ -0,0 +1,121 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  X = 2,
+  Y,
+};
+#ifndef __cplusplus
+typedef uint32_t C;
+#endif // __cplusplus
+
+typedef struct {
+  int32_t _0;
+} A;
+
+typedef struct {
+  int32_t x;
+  float y;
+} B;
+
+typedef struct {
+  uint8_t List;
+  uintptr_t Of;
+  B Things;
+} D;
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} F;
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Hello,
+  There,
+  Everyone,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} There_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    There_Body there;
+  };
+} H;
+
+enum I_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  ThereAgain,
+  SomethingElse,
+};
+#ifndef __cplusplus
+typedef uint8_t I_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} ThereAgain_Body;
+
+typedef struct {
+  I_Tag tag;
+  union {
+    ThereAgain_Body there_again;
+  };
+} I;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A a, B b, C c, D d, F f, H h, I i);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.cpp b/cbindgen-0.24.5/tests/expectations/derive_ostream.cpp
new file mode 100644
index 0000000..4831cad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.cpp
@@ -0,0 +1,184 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class C : uint32_t {
+  X = 2,
+  Y,
+};
+
+inline std::ostream& operator<<(std::ostream& stream, const C& instance) {
+  switch (instance) {
+    case C::X: stream << "X"; break;
+    case C::Y: stream << "Y"; break;
+  }
+  return stream;
+}
+
+struct A {
+  int32_t _0;
+
+  friend std::ostream& operator<<(std::ostream& stream, const A& instance) {
+    return stream << "{ " << "_0=" << instance._0 << " }";
+  }
+};
+
+struct B {
+  int32_t x;
+  float y;
+
+  friend std::ostream& operator<<(std::ostream& stream, const B& instance) {
+    return stream << "{ " << "x=" << instance.x << ", "
+                          << "y=" << instance.y << " }";
+  }
+};
+
+struct D {
+  uint8_t List;
+  uintptr_t Of;
+  B Things;
+
+  friend std::ostream& operator<<(std::ostream& stream, const D& instance) {
+    return stream << "{ " << "List=" << instance.List << ", "
+                          << "Of=" << instance.Of << ", "
+                          << "Things=" << instance.Things << " }";
+  }
+};
+
+union F {
+  enum class Tag : uint8_t {
+    Foo,
+    Bar,
+    Baz,
+  };
+
+  friend std::ostream& operator<<(std::ostream& stream, const Tag& instance) {
+    using Tag = F::Tag;
+    switch (instance) {
+      case Tag::Foo: stream << "Foo"; break;
+      case Tag::Bar: stream << "Bar"; break;
+      case Tag::Baz: stream << "Baz"; break;
+    }
+    return stream;
+  }
+
+  friend std::ostream& operator<<(std::ostream& stream, const F& instance) {
+    using Tag = F::Tag;
+    switch (instance.tag) {
+      case Tag::Foo: stream << instance.foo; break;
+      case Tag::Bar: stream << instance.bar; break;
+      case Tag::Baz: stream << "Baz"; break;
+    }
+    return stream;
+  }
+
+  struct Foo_Body {
+    Tag tag;
+    int16_t _0;
+
+    friend std::ostream& operator<<(std::ostream& stream, const Foo_Body& instance) {
+      return stream << "{ " << "tag=" << instance.tag << ", "
+                            << "_0=" << instance._0 << " }";
+    }
+  };
+
+  struct Bar_Body {
+    Tag tag;
+    uint8_t x;
+    int16_t y;
+
+    friend std::ostream& operator<<(std::ostream& stream, const Bar_Body& instance) {
+      return stream << "{ " << "tag=" << instance.tag << ", "
+                            << "x=" << instance.x << ", "
+                            << "y=" << instance.y << " }";
+    }
+  };
+
+  struct {
+    Tag tag;
+  };
+  Foo_Body foo;
+  Bar_Body bar;
+};
+
+struct H {
+  enum class Tag : uint8_t {
+    Hello,
+    There,
+    Everyone,
+  };
+
+  friend std::ostream& operator<<(std::ostream& stream, const Tag& instance) {
+    using Tag = H::Tag;
+    switch (instance) {
+      case Tag::Hello: stream << "Hello"; break;
+      case Tag::There: stream << "There"; break;
+      case Tag::Everyone: stream << "Everyone"; break;
+    }
+    return stream;
+  }
+
+  friend std::ostream& operator<<(std::ostream& stream, const H& instance) {
+    using Tag = H::Tag;
+    switch (instance.tag) {
+      case Tag::Hello: stream << "Hello" << instance.hello; break;
+      case Tag::There: stream << "There" << instance.there; break;
+      case Tag::Everyone: stream << "Everyone"; break;
+    }
+    return stream;
+  }
+
+  struct Hello_Body {
+    int16_t _0;
+
+    friend std::ostream& operator<<(std::ostream& stream, const Hello_Body& instance) {
+      return stream << "{ " << "_0=" << instance._0 << " }";
+    }
+  };
+
+  struct There_Body {
+    uint8_t x;
+    int16_t y;
+
+    friend std::ostream& operator<<(std::ostream& stream, const There_Body& instance) {
+      return stream << "{ " << "x=" << instance.x << ", "
+                            << "y=" << instance.y << " }";
+    }
+  };
+
+  Tag tag;
+  union {
+    Hello_Body hello;
+    There_Body there;
+  };
+};
+
+struct I {
+  enum class Tag : uint8_t {
+    ThereAgain,
+    SomethingElse,
+  };
+
+  struct ThereAgain_Body {
+    uint8_t x;
+    int16_t y;
+
+    friend std::ostream& operator<<(std::ostream& stream, const ThereAgain_Body& instance) {
+      return stream << "{ " << "x=" << instance.x << ", "
+                            << "y=" << instance.y << " }";
+    }
+  };
+
+  Tag tag;
+  union {
+    ThereAgain_Body there_again;
+  };
+};
+
+extern "C" {
+
+void root(A a, B b, C c, D d, F f, H h, I i);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.pyx b/cbindgen-0.24.5/tests/expectations/derive_ostream.pyx
new file mode 100644
index 0000000..2a41621
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.pyx
@@ -0,0 +1,70 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    X # = 2,
+    Y,
+  ctypedef uint32_t C;
+
+  ctypedef struct A:
+    int32_t _0;
+
+  ctypedef struct B:
+    int32_t x;
+    float y;
+
+  ctypedef struct D:
+    uint8_t List;
+    uintptr_t Of;
+    B Things;
+
+  cdef enum:
+    Foo,
+    Bar,
+    Baz,
+  ctypedef uint8_t F_Tag;
+
+  ctypedef struct Bar_Body:
+    F_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  ctypedef union F:
+    F_Tag tag;
+    int16_t foo;
+    Bar_Body bar;
+
+  cdef enum:
+    Hello,
+    There,
+    Everyone,
+  ctypedef uint8_t H_Tag;
+
+  ctypedef struct There_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct H:
+    H_Tag tag;
+    int16_t hello;
+    There_Body there;
+
+  cdef enum:
+    ThereAgain,
+    SomethingElse,
+  ctypedef uint8_t I_Tag;
+
+  ctypedef struct ThereAgain_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct I:
+    I_Tag tag;
+    ThereAgain_Body there_again;
+
+  void root(A a, B b, C c, D d, F f, H h, I i);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.c b/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.c
new file mode 100644
index 0000000..4217a4b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.c
@@ -0,0 +1,89 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C {
+  X = 2,
+  Y,
+};
+typedef uint32_t C;
+
+struct A {
+  int32_t _0;
+};
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+struct D {
+  uint8_t List;
+  uintptr_t Of;
+  struct B Things;
+};
+
+enum F_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t F_Tag;
+
+struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  struct Bar_Body bar;
+};
+
+enum H_Tag {
+  Hello,
+  There,
+  Everyone,
+};
+typedef uint8_t H_Tag;
+
+struct There_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    struct There_Body there;
+  };
+};
+
+enum I_Tag {
+  ThereAgain,
+  SomethingElse,
+};
+typedef uint8_t I_Tag;
+
+struct ThereAgain_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct I {
+  I_Tag tag;
+  union {
+    struct ThereAgain_Body there_again;
+  };
+};
+
+void root(struct A a, struct B b, C c, struct D d, union F f, struct H h, struct I i);
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.compat.c b/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.compat.c
new file mode 100644
index 0000000..430564b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.compat.c
@@ -0,0 +1,121 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum C
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  X = 2,
+  Y,
+};
+#ifndef __cplusplus
+typedef uint32_t C;
+#endif // __cplusplus
+
+struct A {
+  int32_t _0;
+};
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+struct D {
+  uint8_t List;
+  uintptr_t Of;
+  struct B Things;
+};
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+struct Bar_Body {
+  F_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union F {
+  F_Tag tag;
+  struct {
+    F_Tag foo_tag;
+    int16_t foo;
+  };
+  struct Bar_Body bar;
+};
+
+enum H_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Hello,
+  There,
+  Everyone,
+};
+#ifndef __cplusplus
+typedef uint8_t H_Tag;
+#endif // __cplusplus
+
+struct There_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t hello;
+    };
+    struct There_Body there;
+  };
+};
+
+enum I_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  ThereAgain,
+  SomethingElse,
+};
+#ifndef __cplusplus
+typedef uint8_t I_Tag;
+#endif // __cplusplus
+
+struct ThereAgain_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct I {
+  I_Tag tag;
+  union {
+    struct ThereAgain_Body there_again;
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A a, struct B b, C c, struct D d, union F f, struct H h, struct I i);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.pyx b/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.pyx
new file mode 100644
index 0000000..5e28885
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/derive_ostream.tag.pyx
@@ -0,0 +1,70 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    X # = 2,
+    Y,
+  ctypedef uint32_t C;
+
+  cdef struct A:
+    int32_t _0;
+
+  cdef struct B:
+    int32_t x;
+    float y;
+
+  cdef struct D:
+    uint8_t List;
+    uintptr_t Of;
+    B Things;
+
+  cdef enum:
+    Foo,
+    Bar,
+    Baz,
+  ctypedef uint8_t F_Tag;
+
+  cdef struct Bar_Body:
+    F_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  cdef union F:
+    F_Tag tag;
+    int16_t foo;
+    Bar_Body bar;
+
+  cdef enum:
+    Hello,
+    There,
+    Everyone,
+  ctypedef uint8_t H_Tag;
+
+  cdef struct There_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct H:
+    H_Tag tag;
+    int16_t hello;
+    There_Body there;
+
+  cdef enum:
+    ThereAgain,
+    SomethingElse,
+  ctypedef uint8_t I_Tag;
+
+  cdef struct ThereAgain_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct I:
+    I_Tag tag;
+    ThereAgain_Body there_again;
+
+  void root(A a, B b, C c, D d, F f, H h, I i);
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.both.c b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.both.c
new file mode 100644
index 0000000..1291039
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.both.c
@@ -0,0 +1,210 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum FillRule {
+  A,
+  B,
+};
+typedef uint8_t FillRule;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct OwnedSlice_u32 {
+  uintptr_t len;
+  uint32_t *ptr;
+} OwnedSlice_u32;
+
+typedef struct Polygon_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coordinates;
+} Polygon_u32;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct OwnedSlice_i32 {
+  uintptr_t len;
+  int32_t *ptr;
+} OwnedSlice_i32;
+
+enum Foo_u32_Tag {
+  Bar_u32,
+  Polygon1_u32,
+  Slice1_u32,
+  Slice2_u32,
+  Slice3_u32,
+  Slice4_u32,
+};
+typedef uint8_t Foo_u32_Tag;
+
+typedef struct Slice3_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coords;
+} Slice3_Body_u32;
+
+typedef struct Slice4_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+} Slice4_Body_u32;
+
+typedef struct Foo_u32 {
+  Foo_u32_Tag tag;
+  union {
+    struct {
+      struct Polygon_u32 polygon1;
+    };
+    struct {
+      struct OwnedSlice_u32 slice1;
+    };
+    struct {
+      struct OwnedSlice_i32 slice2;
+    };
+    Slice3_Body_u32 slice3;
+    Slice4_Body_u32 slice4;
+  };
+} Foo_u32;
+
+typedef struct Polygon_i32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coordinates;
+} Polygon_i32;
+
+enum Baz_i32_Tag {
+  Bar2_i32,
+  Polygon21_i32,
+  Slice21_i32,
+  Slice22_i32,
+  Slice23_i32,
+  Slice24_i32,
+};
+typedef uint8_t Baz_i32_Tag;
+
+typedef struct Slice23_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+} Slice23_Body_i32;
+
+typedef struct Slice24_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+} Slice24_Body_i32;
+
+typedef union Baz_i32 {
+  Baz_i32_Tag tag;
+  struct {
+    Baz_i32_Tag polygon21_tag;
+    struct Polygon_i32 polygon21;
+  };
+  struct {
+    Baz_i32_Tag slice21_tag;
+    struct OwnedSlice_i32 slice21;
+  };
+  struct {
+    Baz_i32_Tag slice22_tag;
+    struct OwnedSlice_i32 slice22;
+  };
+  Slice23_Body_i32 slice23;
+  Slice24_Body_i32 slice24;
+} Baz_i32;
+
+enum Taz_Tag {
+  Bar3,
+  Taz1,
+  Taz3,
+};
+typedef uint8_t Taz_Tag;
+
+typedef union Taz {
+  Taz_Tag tag;
+  struct {
+    Taz_Tag taz1_tag;
+    int32_t taz1;
+  };
+  struct {
+    Taz_Tag taz3_tag;
+    struct OwnedSlice_i32 taz3;
+  };
+} Taz;
+
+enum Tazz_Tag {
+  Bar4,
+  Taz2,
+};
+typedef uint8_t Tazz_Tag;
+
+typedef union Tazz {
+  Tazz_Tag tag;
+  struct {
+    Tazz_Tag taz2_tag;
+    int32_t taz2;
+  };
+} Tazz;
+
+enum Tazzz_Tag {
+  Bar5,
+  Taz5,
+};
+typedef uint8_t Tazzz_Tag;
+
+typedef union Tazzz {
+  Tazzz_Tag tag;
+  struct {
+    Tazzz_Tag taz5_tag;
+    int32_t taz5;
+  };
+} Tazzz;
+
+enum Tazzzz_Tag {
+  Taz6,
+  Taz7,
+};
+typedef uint8_t Tazzzz_Tag;
+
+typedef union Tazzzz {
+  Tazzzz_Tag tag;
+  struct {
+    Tazzzz_Tag taz6_tag;
+    int32_t taz6;
+  };
+  struct {
+    Tazzzz_Tag taz7_tag;
+    uint32_t taz7;
+  };
+} Tazzzz;
+
+enum Qux_Tag {
+  Qux1,
+  Qux2,
+};
+typedef uint8_t Qux_Tag;
+
+typedef union Qux {
+  Qux_Tag tag;
+  struct {
+    Qux_Tag qux1_tag;
+    int32_t qux1;
+  };
+  struct {
+    Qux_Tag qux2_tag;
+    uint32_t qux2;
+  };
+} Qux;
+
+void root(const struct Foo_u32 *a,
+          const union Baz_i32 *b,
+          const union Taz *c,
+          union Tazz d,
+          const union Tazzz *e,
+          const union Tazzzz *f,
+          const union Qux *g);
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.both.compat.c b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.both.compat.c
new file mode 100644
index 0000000..4392a8c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.both.compat.c
@@ -0,0 +1,266 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum FillRule
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+};
+#ifndef __cplusplus
+typedef uint8_t FillRule;
+#endif // __cplusplus
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct OwnedSlice_u32 {
+  uintptr_t len;
+  uint32_t *ptr;
+} OwnedSlice_u32;
+
+typedef struct Polygon_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coordinates;
+} Polygon_u32;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct OwnedSlice_i32 {
+  uintptr_t len;
+  int32_t *ptr;
+} OwnedSlice_i32;
+
+enum Foo_u32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar_u32,
+  Polygon1_u32,
+  Slice1_u32,
+  Slice2_u32,
+  Slice3_u32,
+  Slice4_u32,
+};
+#ifndef __cplusplus
+typedef uint8_t Foo_u32_Tag;
+#endif // __cplusplus
+
+typedef struct Slice3_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coords;
+} Slice3_Body_u32;
+
+typedef struct Slice4_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+} Slice4_Body_u32;
+
+typedef struct Foo_u32 {
+  Foo_u32_Tag tag;
+  union {
+    struct {
+      struct Polygon_u32 polygon1;
+    };
+    struct {
+      struct OwnedSlice_u32 slice1;
+    };
+    struct {
+      struct OwnedSlice_i32 slice2;
+    };
+    Slice3_Body_u32 slice3;
+    Slice4_Body_u32 slice4;
+  };
+} Foo_u32;
+
+typedef struct Polygon_i32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coordinates;
+} Polygon_i32;
+
+enum Baz_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar2_i32,
+  Polygon21_i32,
+  Slice21_i32,
+  Slice22_i32,
+  Slice23_i32,
+  Slice24_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t Baz_i32_Tag;
+#endif // __cplusplus
+
+typedef struct Slice23_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+} Slice23_Body_i32;
+
+typedef struct Slice24_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+} Slice24_Body_i32;
+
+typedef union Baz_i32 {
+  Baz_i32_Tag tag;
+  struct {
+    Baz_i32_Tag polygon21_tag;
+    struct Polygon_i32 polygon21;
+  };
+  struct {
+    Baz_i32_Tag slice21_tag;
+    struct OwnedSlice_i32 slice21;
+  };
+  struct {
+    Baz_i32_Tag slice22_tag;
+    struct OwnedSlice_i32 slice22;
+  };
+  Slice23_Body_i32 slice23;
+  Slice24_Body_i32 slice24;
+} Baz_i32;
+
+enum Taz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar3,
+  Taz1,
+  Taz3,
+};
+#ifndef __cplusplus
+typedef uint8_t Taz_Tag;
+#endif // __cplusplus
+
+typedef union Taz {
+  Taz_Tag tag;
+  struct {
+    Taz_Tag taz1_tag;
+    int32_t taz1;
+  };
+  struct {
+    Taz_Tag taz3_tag;
+    struct OwnedSlice_i32 taz3;
+  };
+} Taz;
+
+enum Tazz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar4,
+  Taz2,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazz_Tag;
+#endif // __cplusplus
+
+typedef union Tazz {
+  Tazz_Tag tag;
+  struct {
+    Tazz_Tag taz2_tag;
+    int32_t taz2;
+  };
+} Tazz;
+
+enum Tazzz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar5,
+  Taz5,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazzz_Tag;
+#endif // __cplusplus
+
+typedef union Tazzz {
+  Tazzz_Tag tag;
+  struct {
+    Tazzz_Tag taz5_tag;
+    int32_t taz5;
+  };
+} Tazzz;
+
+enum Tazzzz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Taz6,
+  Taz7,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazzzz_Tag;
+#endif // __cplusplus
+
+typedef union Tazzzz {
+  Tazzzz_Tag tag;
+  struct {
+    Tazzzz_Tag taz6_tag;
+    int32_t taz6;
+  };
+  struct {
+    Tazzzz_Tag taz7_tag;
+    uint32_t taz7;
+  };
+} Tazzzz;
+
+enum Qux_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Qux1,
+  Qux2,
+};
+#ifndef __cplusplus
+typedef uint8_t Qux_Tag;
+#endif // __cplusplus
+
+typedef union Qux {
+  Qux_Tag tag;
+  struct {
+    Qux_Tag qux1_tag;
+    int32_t qux1;
+  };
+  struct {
+    Qux_Tag qux2_tag;
+    uint32_t qux2;
+  };
+} Qux;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct Foo_u32 *a,
+          const union Baz_i32 *b,
+          const union Taz *c,
+          union Tazz d,
+          const union Tazzz *e,
+          const union Tazzzz *f,
+          const union Qux *g);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.c b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.c
new file mode 100644
index 0000000..0f616ab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.c
@@ -0,0 +1,210 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum FillRule {
+  A,
+  B,
+};
+typedef uint8_t FillRule;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct {
+  uintptr_t len;
+  uint32_t *ptr;
+} OwnedSlice_u32;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_u32 coordinates;
+} Polygon_u32;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct {
+  uintptr_t len;
+  int32_t *ptr;
+} OwnedSlice_i32;
+
+enum Foo_u32_Tag {
+  Bar_u32,
+  Polygon1_u32,
+  Slice1_u32,
+  Slice2_u32,
+  Slice3_u32,
+  Slice4_u32,
+};
+typedef uint8_t Foo_u32_Tag;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_u32 coords;
+} Slice3_Body_u32;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_i32 coords;
+} Slice4_Body_u32;
+
+typedef struct {
+  Foo_u32_Tag tag;
+  union {
+    struct {
+      Polygon_u32 polygon1;
+    };
+    struct {
+      OwnedSlice_u32 slice1;
+    };
+    struct {
+      OwnedSlice_i32 slice2;
+    };
+    Slice3_Body_u32 slice3;
+    Slice4_Body_u32 slice4;
+  };
+} Foo_u32;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_i32 coordinates;
+} Polygon_i32;
+
+enum Baz_i32_Tag {
+  Bar2_i32,
+  Polygon21_i32,
+  Slice21_i32,
+  Slice22_i32,
+  Slice23_i32,
+  Slice24_i32,
+};
+typedef uint8_t Baz_i32_Tag;
+
+typedef struct {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  OwnedSlice_i32 coords;
+} Slice23_Body_i32;
+
+typedef struct {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  OwnedSlice_i32 coords;
+} Slice24_Body_i32;
+
+typedef union {
+  Baz_i32_Tag tag;
+  struct {
+    Baz_i32_Tag polygon21_tag;
+    Polygon_i32 polygon21;
+  };
+  struct {
+    Baz_i32_Tag slice21_tag;
+    OwnedSlice_i32 slice21;
+  };
+  struct {
+    Baz_i32_Tag slice22_tag;
+    OwnedSlice_i32 slice22;
+  };
+  Slice23_Body_i32 slice23;
+  Slice24_Body_i32 slice24;
+} Baz_i32;
+
+enum Taz_Tag {
+  Bar3,
+  Taz1,
+  Taz3,
+};
+typedef uint8_t Taz_Tag;
+
+typedef union {
+  Taz_Tag tag;
+  struct {
+    Taz_Tag taz1_tag;
+    int32_t taz1;
+  };
+  struct {
+    Taz_Tag taz3_tag;
+    OwnedSlice_i32 taz3;
+  };
+} Taz;
+
+enum Tazz_Tag {
+  Bar4,
+  Taz2,
+};
+typedef uint8_t Tazz_Tag;
+
+typedef union {
+  Tazz_Tag tag;
+  struct {
+    Tazz_Tag taz2_tag;
+    int32_t taz2;
+  };
+} Tazz;
+
+enum Tazzz_Tag {
+  Bar5,
+  Taz5,
+};
+typedef uint8_t Tazzz_Tag;
+
+typedef union {
+  Tazzz_Tag tag;
+  struct {
+    Tazzz_Tag taz5_tag;
+    int32_t taz5;
+  };
+} Tazzz;
+
+enum Tazzzz_Tag {
+  Taz6,
+  Taz7,
+};
+typedef uint8_t Tazzzz_Tag;
+
+typedef union {
+  Tazzzz_Tag tag;
+  struct {
+    Tazzzz_Tag taz6_tag;
+    int32_t taz6;
+  };
+  struct {
+    Tazzzz_Tag taz7_tag;
+    uint32_t taz7;
+  };
+} Tazzzz;
+
+enum Qux_Tag {
+  Qux1,
+  Qux2,
+};
+typedef uint8_t Qux_Tag;
+
+typedef union {
+  Qux_Tag tag;
+  struct {
+    Qux_Tag qux1_tag;
+    int32_t qux1;
+  };
+  struct {
+    Qux_Tag qux2_tag;
+    uint32_t qux2;
+  };
+} Qux;
+
+void root(const Foo_u32 *a,
+          const Baz_i32 *b,
+          const Taz *c,
+          Tazz d,
+          const Tazzz *e,
+          const Tazzzz *f,
+          const Qux *g);
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.compat.c b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.compat.c
new file mode 100644
index 0000000..832a5a4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.compat.c
@@ -0,0 +1,266 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum FillRule
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+};
+#ifndef __cplusplus
+typedef uint8_t FillRule;
+#endif // __cplusplus
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct {
+  uintptr_t len;
+  uint32_t *ptr;
+} OwnedSlice_u32;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_u32 coordinates;
+} Polygon_u32;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+typedef struct {
+  uintptr_t len;
+  int32_t *ptr;
+} OwnedSlice_i32;
+
+enum Foo_u32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar_u32,
+  Polygon1_u32,
+  Slice1_u32,
+  Slice2_u32,
+  Slice3_u32,
+  Slice4_u32,
+};
+#ifndef __cplusplus
+typedef uint8_t Foo_u32_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_u32 coords;
+} Slice3_Body_u32;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_i32 coords;
+} Slice4_Body_u32;
+
+typedef struct {
+  Foo_u32_Tag tag;
+  union {
+    struct {
+      Polygon_u32 polygon1;
+    };
+    struct {
+      OwnedSlice_u32 slice1;
+    };
+    struct {
+      OwnedSlice_i32 slice2;
+    };
+    Slice3_Body_u32 slice3;
+    Slice4_Body_u32 slice4;
+  };
+} Foo_u32;
+
+typedef struct {
+  FillRule fill;
+  OwnedSlice_i32 coordinates;
+} Polygon_i32;
+
+enum Baz_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar2_i32,
+  Polygon21_i32,
+  Slice21_i32,
+  Slice22_i32,
+  Slice23_i32,
+  Slice24_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t Baz_i32_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  OwnedSlice_i32 coords;
+} Slice23_Body_i32;
+
+typedef struct {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  OwnedSlice_i32 coords;
+} Slice24_Body_i32;
+
+typedef union {
+  Baz_i32_Tag tag;
+  struct {
+    Baz_i32_Tag polygon21_tag;
+    Polygon_i32 polygon21;
+  };
+  struct {
+    Baz_i32_Tag slice21_tag;
+    OwnedSlice_i32 slice21;
+  };
+  struct {
+    Baz_i32_Tag slice22_tag;
+    OwnedSlice_i32 slice22;
+  };
+  Slice23_Body_i32 slice23;
+  Slice24_Body_i32 slice24;
+} Baz_i32;
+
+enum Taz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar3,
+  Taz1,
+  Taz3,
+};
+#ifndef __cplusplus
+typedef uint8_t Taz_Tag;
+#endif // __cplusplus
+
+typedef union {
+  Taz_Tag tag;
+  struct {
+    Taz_Tag taz1_tag;
+    int32_t taz1;
+  };
+  struct {
+    Taz_Tag taz3_tag;
+    OwnedSlice_i32 taz3;
+  };
+} Taz;
+
+enum Tazz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar4,
+  Taz2,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazz_Tag;
+#endif // __cplusplus
+
+typedef union {
+  Tazz_Tag tag;
+  struct {
+    Tazz_Tag taz2_tag;
+    int32_t taz2;
+  };
+} Tazz;
+
+enum Tazzz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar5,
+  Taz5,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazzz_Tag;
+#endif // __cplusplus
+
+typedef union {
+  Tazzz_Tag tag;
+  struct {
+    Tazzz_Tag taz5_tag;
+    int32_t taz5;
+  };
+} Tazzz;
+
+enum Tazzzz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Taz6,
+  Taz7,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazzzz_Tag;
+#endif // __cplusplus
+
+typedef union {
+  Tazzzz_Tag tag;
+  struct {
+    Tazzzz_Tag taz6_tag;
+    int32_t taz6;
+  };
+  struct {
+    Tazzzz_Tag taz7_tag;
+    uint32_t taz7;
+  };
+} Tazzzz;
+
+enum Qux_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Qux1,
+  Qux2,
+};
+#ifndef __cplusplus
+typedef uint8_t Qux_Tag;
+#endif // __cplusplus
+
+typedef union {
+  Qux_Tag tag;
+  struct {
+    Qux_Tag qux1_tag;
+    int32_t qux1;
+  };
+  struct {
+    Qux_Tag qux2_tag;
+    uint32_t qux2;
+  };
+} Qux;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo_u32 *a,
+          const Baz_i32 *b,
+          const Taz *c,
+          Tazz d,
+          const Tazzz *e,
+          const Tazzzz *f,
+          const Qux *g);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.cpp b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.cpp
new file mode 100644
index 0000000..97110e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.cpp
@@ -0,0 +1,712 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class FillRule : uint8_t {
+  A,
+  B,
+};
+
+/// This will have a destructor manually implemented via variant_body, and
+/// similarly a Drop impl in Rust.
+template<typename T>
+struct OwnedSlice {
+  uintptr_t len;
+  T *ptr;
+  ~OwnedSlice() {}
+};
+
+template<typename LengthPercentage>
+struct Polygon {
+  FillRule fill;
+  OwnedSlice<LengthPercentage> coordinates;
+};
+
+template<typename T>
+struct Foo {
+  enum class Tag : uint8_t {
+    Bar,
+    Polygon1,
+    Slice1,
+    Slice2,
+    Slice3,
+    Slice4,
+  };
+
+  struct Polygon1_Body {
+    Polygon<T> _0;
+  };
+
+  struct Slice1_Body {
+    OwnedSlice<T> _0;
+  };
+
+  struct Slice2_Body {
+    OwnedSlice<int32_t> _0;
+  };
+
+  struct Slice3_Body {
+    FillRule fill;
+    OwnedSlice<T> coords;
+  };
+
+  struct Slice4_Body {
+    FillRule fill;
+    OwnedSlice<int32_t> coords;
+  };
+
+  Tag tag;
+  union {
+    Polygon1_Body polygon1;
+    Slice1_Body slice1;
+    Slice2_Body slice2;
+    Slice3_Body slice3;
+    Slice4_Body slice4;
+  };
+
+  static Foo Bar() {
+    Foo result;
+    result.tag = Tag::Bar;
+    return result;
+  }
+
+  bool IsBar() const {
+    return tag == Tag::Bar;
+  }
+
+  static Foo Polygon1(const Polygon<T> &_0) {
+    Foo result;
+    ::new (&result.polygon1._0) (Polygon<T>)(_0);
+    result.tag = Tag::Polygon1;
+    return result;
+  }
+
+  bool IsPolygon1() const {
+    return tag == Tag::Polygon1;
+  }
+
+  static Foo Slice1(const OwnedSlice<T> &_0) {
+    Foo result;
+    ::new (&result.slice1._0) (OwnedSlice<T>)(_0);
+    result.tag = Tag::Slice1;
+    return result;
+  }
+
+  bool IsSlice1() const {
+    return tag == Tag::Slice1;
+  }
+
+  static Foo Slice2(const OwnedSlice<int32_t> &_0) {
+    Foo result;
+    ::new (&result.slice2._0) (OwnedSlice<int32_t>)(_0);
+    result.tag = Tag::Slice2;
+    return result;
+  }
+
+  bool IsSlice2() const {
+    return tag == Tag::Slice2;
+  }
+
+  static Foo Slice3(const FillRule &fill,
+                    const OwnedSlice<T> &coords) {
+    Foo result;
+    ::new (&result.slice3.fill) (FillRule)(fill);
+    ::new (&result.slice3.coords) (OwnedSlice<T>)(coords);
+    result.tag = Tag::Slice3;
+    return result;
+  }
+
+  bool IsSlice3() const {
+    return tag == Tag::Slice3;
+  }
+
+  static Foo Slice4(const FillRule &fill,
+                    const OwnedSlice<int32_t> &coords) {
+    Foo result;
+    ::new (&result.slice4.fill) (FillRule)(fill);
+    ::new (&result.slice4.coords) (OwnedSlice<int32_t>)(coords);
+    result.tag = Tag::Slice4;
+    return result;
+  }
+
+  bool IsSlice4() const {
+    return tag == Tag::Slice4;
+  }
+
+  private:
+  Foo() {
+
+  }
+  public:
+
+
+  ~Foo() {
+    switch (tag) {
+      case Tag::Polygon1: polygon1.~Polygon1_Body(); break;
+      case Tag::Slice1: slice1.~Slice1_Body(); break;
+      case Tag::Slice2: slice2.~Slice2_Body(); break;
+      case Tag::Slice3: slice3.~Slice3_Body(); break;
+      case Tag::Slice4: slice4.~Slice4_Body(); break;
+      default: break;
+    }
+  }
+
+  Foo(const Foo& other)
+   : tag(other.tag) {
+    switch (tag) {
+      case Tag::Polygon1: ::new (&polygon1) (Polygon1_Body)(other.polygon1); break;
+      case Tag::Slice1: ::new (&slice1) (Slice1_Body)(other.slice1); break;
+      case Tag::Slice2: ::new (&slice2) (Slice2_Body)(other.slice2); break;
+      case Tag::Slice3: ::new (&slice3) (Slice3_Body)(other.slice3); break;
+      case Tag::Slice4: ::new (&slice4) (Slice4_Body)(other.slice4); break;
+      default: break;
+    }
+  }
+  Foo& operator=(const Foo& other) {
+    if (this != &other) {
+      this->~Foo();
+      new (this) Foo(other);
+    }
+    return *this;
+  }
+};
+
+template<typename T>
+union Baz {
+  enum class Tag : uint8_t {
+    Bar2,
+    Polygon21,
+    Slice21,
+    Slice22,
+    Slice23,
+    Slice24,
+  };
+
+  struct Polygon21_Body {
+    Tag tag;
+    Polygon<T> _0;
+  };
+
+  struct Slice21_Body {
+    Tag tag;
+    OwnedSlice<T> _0;
+  };
+
+  struct Slice22_Body {
+    Tag tag;
+    OwnedSlice<int32_t> _0;
+  };
+
+  struct Slice23_Body {
+    Tag tag;
+    FillRule fill;
+    OwnedSlice<T> coords;
+  };
+
+  struct Slice24_Body {
+    Tag tag;
+    FillRule fill;
+    OwnedSlice<int32_t> coords;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Polygon21_Body polygon21;
+  Slice21_Body slice21;
+  Slice22_Body slice22;
+  Slice23_Body slice23;
+  Slice24_Body slice24;
+
+  static Baz Bar2() {
+    Baz result;
+    result.tag = Tag::Bar2;
+    return result;
+  }
+
+  bool IsBar2() const {
+    return tag == Tag::Bar2;
+  }
+
+  static Baz Polygon21(const Polygon<T> &_0) {
+    Baz result;
+    ::new (&result.polygon21._0) (Polygon<T>)(_0);
+    result.tag = Tag::Polygon21;
+    return result;
+  }
+
+  bool IsPolygon21() const {
+    return tag == Tag::Polygon21;
+  }
+
+  static Baz Slice21(const OwnedSlice<T> &_0) {
+    Baz result;
+    ::new (&result.slice21._0) (OwnedSlice<T>)(_0);
+    result.tag = Tag::Slice21;
+    return result;
+  }
+
+  bool IsSlice21() const {
+    return tag == Tag::Slice21;
+  }
+
+  static Baz Slice22(const OwnedSlice<int32_t> &_0) {
+    Baz result;
+    ::new (&result.slice22._0) (OwnedSlice<int32_t>)(_0);
+    result.tag = Tag::Slice22;
+    return result;
+  }
+
+  bool IsSlice22() const {
+    return tag == Tag::Slice22;
+  }
+
+  static Baz Slice23(const FillRule &fill,
+                     const OwnedSlice<T> &coords) {
+    Baz result;
+    ::new (&result.slice23.fill) (FillRule)(fill);
+    ::new (&result.slice23.coords) (OwnedSlice<T>)(coords);
+    result.tag = Tag::Slice23;
+    return result;
+  }
+
+  bool IsSlice23() const {
+    return tag == Tag::Slice23;
+  }
+
+  static Baz Slice24(const FillRule &fill,
+                     const OwnedSlice<int32_t> &coords) {
+    Baz result;
+    ::new (&result.slice24.fill) (FillRule)(fill);
+    ::new (&result.slice24.coords) (OwnedSlice<int32_t>)(coords);
+    result.tag = Tag::Slice24;
+    return result;
+  }
+
+  bool IsSlice24() const {
+    return tag == Tag::Slice24;
+  }
+
+  private:
+  Baz() {
+
+  }
+  public:
+
+
+  ~Baz() {
+    switch (tag) {
+      case Tag::Polygon21: polygon21.~Polygon21_Body(); break;
+      case Tag::Slice21: slice21.~Slice21_Body(); break;
+      case Tag::Slice22: slice22.~Slice22_Body(); break;
+      case Tag::Slice23: slice23.~Slice23_Body(); break;
+      case Tag::Slice24: slice24.~Slice24_Body(); break;
+      default: break;
+    }
+  }
+
+  Baz(const Baz& other)
+   : tag(other.tag) {
+    switch (tag) {
+      case Tag::Polygon21: ::new (&polygon21) (Polygon21_Body)(other.polygon21); break;
+      case Tag::Slice21: ::new (&slice21) (Slice21_Body)(other.slice21); break;
+      case Tag::Slice22: ::new (&slice22) (Slice22_Body)(other.slice22); break;
+      case Tag::Slice23: ::new (&slice23) (Slice23_Body)(other.slice23); break;
+      case Tag::Slice24: ::new (&slice24) (Slice24_Body)(other.slice24); break;
+      default: break;
+    }
+  }
+  Baz& operator=(const Baz& other) {
+    if (this != &other) {
+      this->~Baz();
+      new (this) Baz(other);
+    }
+    return *this;
+  }
+};
+
+union Taz {
+  enum class Tag : uint8_t {
+    Bar3,
+    Taz1,
+    Taz3,
+  };
+
+  struct Taz1_Body {
+    Tag tag;
+    int32_t _0;
+  };
+
+  struct Taz3_Body {
+    Tag tag;
+    OwnedSlice<int32_t> _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Taz1_Body taz1;
+  Taz3_Body taz3;
+
+  static Taz Bar3() {
+    Taz result;
+    result.tag = Tag::Bar3;
+    return result;
+  }
+
+  bool IsBar3() const {
+    return tag == Tag::Bar3;
+  }
+
+  static Taz Taz1(const int32_t &_0) {
+    Taz result;
+    ::new (&result.taz1._0) (int32_t)(_0);
+    result.tag = Tag::Taz1;
+    return result;
+  }
+
+  bool IsTaz1() const {
+    return tag == Tag::Taz1;
+  }
+
+  static Taz Taz3(const OwnedSlice<int32_t> &_0) {
+    Taz result;
+    ::new (&result.taz3._0) (OwnedSlice<int32_t>)(_0);
+    result.tag = Tag::Taz3;
+    return result;
+  }
+
+  bool IsTaz3() const {
+    return tag == Tag::Taz3;
+  }
+
+  private:
+  Taz() {
+
+  }
+  public:
+
+
+  ~Taz() {
+    switch (tag) {
+      case Tag::Taz1: taz1.~Taz1_Body(); break;
+      case Tag::Taz3: taz3.~Taz3_Body(); break;
+      default: break;
+    }
+  }
+
+  Taz(const Taz& other)
+   : tag(other.tag) {
+    switch (tag) {
+      case Tag::Taz1: ::new (&taz1) (Taz1_Body)(other.taz1); break;
+      case Tag::Taz3: ::new (&taz3) (Taz3_Body)(other.taz3); break;
+      default: break;
+    }
+  }
+  Taz& operator=(const Taz& other) {
+    if (this != &other) {
+      this->~Taz();
+      new (this) Taz(other);
+    }
+    return *this;
+  }
+};
+
+union Tazz {
+  enum class Tag : uint8_t {
+    Bar4,
+    Taz2,
+  };
+
+  struct Taz2_Body {
+    Tag tag;
+    int32_t _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Taz2_Body taz2;
+
+  static Tazz Bar4() {
+    Tazz result;
+    result.tag = Tag::Bar4;
+    return result;
+  }
+
+  bool IsBar4() const {
+    return tag == Tag::Bar4;
+  }
+
+  static Tazz Taz2(const int32_t &_0) {
+    Tazz result;
+    ::new (&result.taz2._0) (int32_t)(_0);
+    result.tag = Tag::Taz2;
+    return result;
+  }
+
+  bool IsTaz2() const {
+    return tag == Tag::Taz2;
+  }
+
+  private:
+  Tazz() {
+
+  }
+  public:
+
+};
+
+union Tazzz {
+  enum class Tag : uint8_t {
+    Bar5,
+    Taz5,
+  };
+
+  struct Taz5_Body {
+    Tag tag;
+    int32_t _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Taz5_Body taz5;
+
+  static Tazzz Bar5() {
+    Tazzz result;
+    result.tag = Tag::Bar5;
+    return result;
+  }
+
+  bool IsBar5() const {
+    return tag == Tag::Bar5;
+  }
+
+  static Tazzz Taz5(const int32_t &_0) {
+    Tazzz result;
+    ::new (&result.taz5._0) (int32_t)(_0);
+    result.tag = Tag::Taz5;
+    return result;
+  }
+
+  bool IsTaz5() const {
+    return tag == Tag::Taz5;
+  }
+
+  private:
+  Tazzz() {
+
+  }
+  public:
+
+
+  ~Tazzz() {
+    switch (tag) {
+      case Tag::Taz5: taz5.~Taz5_Body(); break;
+      default: break;
+    }
+  }
+
+  Tazzz(const Tazzz& other)
+   : tag(other.tag) {
+    switch (tag) {
+      case Tag::Taz5: ::new (&taz5) (Taz5_Body)(other.taz5); break;
+      default: break;
+    }
+  }
+};
+
+union Tazzzz {
+  enum class Tag : uint8_t {
+    Taz6,
+    Taz7,
+  };
+
+  struct Taz6_Body {
+    Tag tag;
+    int32_t _0;
+  };
+
+  struct Taz7_Body {
+    Tag tag;
+    uint32_t _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Taz6_Body taz6;
+  Taz7_Body taz7;
+
+  static Tazzzz Taz6(const int32_t &_0) {
+    Tazzzz result;
+    ::new (&result.taz6._0) (int32_t)(_0);
+    result.tag = Tag::Taz6;
+    return result;
+  }
+
+  bool IsTaz6() const {
+    return tag == Tag::Taz6;
+  }
+
+  static Tazzzz Taz7(const uint32_t &_0) {
+    Tazzzz result;
+    ::new (&result.taz7._0) (uint32_t)(_0);
+    result.tag = Tag::Taz7;
+    return result;
+  }
+
+  bool IsTaz7() const {
+    return tag == Tag::Taz7;
+  }
+
+  private:
+  Tazzzz() {
+
+  }
+  public:
+
+
+  ~Tazzzz() {
+    switch (tag) {
+      case Tag::Taz6: taz6.~Taz6_Body(); break;
+      case Tag::Taz7: taz7.~Taz7_Body(); break;
+
+    }
+  }
+
+  Tazzzz(const Tazzzz& other)
+   : tag(other.tag) {
+    switch (tag) {
+      case Tag::Taz6: ::new (&taz6) (Taz6_Body)(other.taz6); break;
+      case Tag::Taz7: ::new (&taz7) (Taz7_Body)(other.taz7); break;
+
+    }
+  }
+  Tazzzz& operator=(const Tazzzz& other) {
+    if (this != &other) {
+      this->~Tazzzz();
+      new (this) Tazzzz(other);
+    }
+    return *this;
+  }
+};
+
+union Qux {
+  enum class Tag : uint8_t {
+    Qux1,
+    Qux2,
+  };
+
+  struct Qux1_Body {
+    Tag tag;
+    int32_t _0;
+
+    bool operator==(const Qux1_Body& other) const {
+      return _0 == other._0;
+    }
+  };
+
+  struct Qux2_Body {
+    Tag tag;
+    uint32_t _0;
+
+    bool operator==(const Qux2_Body& other) const {
+      return _0 == other._0;
+    }
+  };
+
+  struct {
+    Tag tag;
+  };
+  Qux1_Body qux1;
+  Qux2_Body qux2;
+
+  static Qux Qux1(const int32_t &_0) {
+    Qux result;
+    ::new (&result.qux1._0) (int32_t)(_0);
+    result.tag = Tag::Qux1;
+    return result;
+  }
+
+  bool IsQux1() const {
+    return tag == Tag::Qux1;
+  }
+
+  static Qux Qux2(const uint32_t &_0) {
+    Qux result;
+    ::new (&result.qux2._0) (uint32_t)(_0);
+    result.tag = Tag::Qux2;
+    return result;
+  }
+
+  bool IsQux2() const {
+    return tag == Tag::Qux2;
+  }
+
+  NODISCARD bool operator==(const Qux& other) const {
+    if (tag != other.tag) {
+      return false;
+    }
+    switch (tag) {
+      case Tag::Qux1: return qux1 == other.qux1;
+      case Tag::Qux2: return qux2 == other.qux2;
+
+    }
+    return true;
+  }
+
+  NODISCARD bool operator!=(const Qux& other) const {
+    return !(*this == other);
+  }
+
+  private:
+  Qux() {
+
+  }
+  public:
+
+
+  NOINLINE ~Qux() {
+    switch (tag) {
+      case Tag::Qux1: qux1.~Qux1_Body(); break;
+      case Tag::Qux2: qux2.~Qux2_Body(); break;
+
+    }
+  }
+
+  NOINLINE Qux(const Qux& other)
+   : tag(other.tag) {
+    switch (tag) {
+      case Tag::Qux1: ::new (&qux1) (Qux1_Body)(other.qux1); break;
+      case Tag::Qux2: ::new (&qux2) (Qux2_Body)(other.qux2); break;
+
+    }
+  }
+  NOINLINE Qux& operator=(const Qux& other) {
+    if (this != &other) {
+      this->~Qux();
+      new (this) Qux(other);
+    }
+    return *this;
+  }
+};
+
+extern "C" {
+
+void root(const Foo<uint32_t> *a,
+          const Baz<int32_t> *b,
+          const Taz *c,
+          Tazz d,
+          const Tazzz *e,
+          const Tazzzz *f,
+          const Qux *g);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.pyx b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.pyx
new file mode 100644
index 0000000..745e04d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.pyx
@@ -0,0 +1,145 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    A,
+    B,
+  ctypedef uint8_t FillRule;
+
+  # This will have a destructor manually implemented via variant_body, and
+  # similarly a Drop impl in Rust.
+  ctypedef struct OwnedSlice_u32:
+    uintptr_t len;
+    uint32_t *ptr;
+
+  ctypedef struct Polygon_u32:
+    FillRule fill;
+    OwnedSlice_u32 coordinates;
+
+  # This will have a destructor manually implemented via variant_body, and
+  # similarly a Drop impl in Rust.
+  ctypedef struct OwnedSlice_i32:
+    uintptr_t len;
+    int32_t *ptr;
+
+  cdef enum:
+    Bar_u32,
+    Polygon1_u32,
+    Slice1_u32,
+    Slice2_u32,
+    Slice3_u32,
+    Slice4_u32,
+  ctypedef uint8_t Foo_u32_Tag;
+
+  ctypedef struct Slice3_Body_u32:
+    FillRule fill;
+    OwnedSlice_u32 coords;
+
+  ctypedef struct Slice4_Body_u32:
+    FillRule fill;
+    OwnedSlice_i32 coords;
+
+  ctypedef struct Foo_u32:
+    Foo_u32_Tag tag;
+    Polygon_u32 polygon1;
+    OwnedSlice_u32 slice1;
+    OwnedSlice_i32 slice2;
+    Slice3_Body_u32 slice3;
+    Slice4_Body_u32 slice4;
+
+  ctypedef struct Polygon_i32:
+    FillRule fill;
+    OwnedSlice_i32 coordinates;
+
+  cdef enum:
+    Bar2_i32,
+    Polygon21_i32,
+    Slice21_i32,
+    Slice22_i32,
+    Slice23_i32,
+    Slice24_i32,
+  ctypedef uint8_t Baz_i32_Tag;
+
+  ctypedef struct Slice23_Body_i32:
+    Baz_i32_Tag tag;
+    FillRule fill;
+    OwnedSlice_i32 coords;
+
+  ctypedef struct Slice24_Body_i32:
+    Baz_i32_Tag tag;
+    FillRule fill;
+    OwnedSlice_i32 coords;
+
+  ctypedef union Baz_i32:
+    Baz_i32_Tag tag;
+    Polygon_i32 polygon21;
+    OwnedSlice_i32 slice21;
+    OwnedSlice_i32 slice22;
+    Slice23_Body_i32 slice23;
+    Slice24_Body_i32 slice24;
+
+  cdef enum:
+    Bar3,
+    Taz1,
+    Taz3,
+  ctypedef uint8_t Taz_Tag;
+
+  ctypedef union Taz:
+    Taz_Tag tag;
+    int32_t taz1;
+    OwnedSlice_i32 taz3;
+
+  cdef enum:
+    Bar4,
+    Taz2,
+  ctypedef uint8_t Tazz_Tag;
+
+  ctypedef union Tazz:
+    Tazz_Tag tag;
+    int32_t taz2;
+
+  cdef enum:
+    Bar5,
+    Taz5,
+  ctypedef uint8_t Tazzz_Tag;
+
+  ctypedef union Tazzz:
+    Tazzz_Tag tag;
+    int32_t taz5;
+
+  cdef enum:
+    Taz6,
+    Taz7,
+  ctypedef uint8_t Tazzzz_Tag;
+
+  ctypedef union Tazzzz:
+    Tazzzz_Tag tag;
+    int32_t taz6;
+    uint32_t taz7;
+
+  cdef enum:
+    Qux1,
+    Qux2,
+  ctypedef uint8_t Qux_Tag;
+
+  ctypedef union Qux:
+    Qux_Tag tag;
+    int32_t qux1;
+    uint32_t qux2;
+
+  void root(const Foo_u32 *a,
+            const Baz_i32 *b,
+            const Taz *c,
+            Tazz d,
+            const Tazzz *e,
+            const Tazzzz *f,
+            const Qux *g);
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.c b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.c
new file mode 100644
index 0000000..537ec6f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.c
@@ -0,0 +1,210 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum FillRule {
+  A,
+  B,
+};
+typedef uint8_t FillRule;
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+struct OwnedSlice_u32 {
+  uintptr_t len;
+  uint32_t *ptr;
+};
+
+struct Polygon_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coordinates;
+};
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+struct OwnedSlice_i32 {
+  uintptr_t len;
+  int32_t *ptr;
+};
+
+enum Foo_u32_Tag {
+  Bar_u32,
+  Polygon1_u32,
+  Slice1_u32,
+  Slice2_u32,
+  Slice3_u32,
+  Slice4_u32,
+};
+typedef uint8_t Foo_u32_Tag;
+
+struct Slice3_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coords;
+};
+
+struct Slice4_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+};
+
+struct Foo_u32 {
+  Foo_u32_Tag tag;
+  union {
+    struct {
+      struct Polygon_u32 polygon1;
+    };
+    struct {
+      struct OwnedSlice_u32 slice1;
+    };
+    struct {
+      struct OwnedSlice_i32 slice2;
+    };
+    struct Slice3_Body_u32 slice3;
+    struct Slice4_Body_u32 slice4;
+  };
+};
+
+struct Polygon_i32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coordinates;
+};
+
+enum Baz_i32_Tag {
+  Bar2_i32,
+  Polygon21_i32,
+  Slice21_i32,
+  Slice22_i32,
+  Slice23_i32,
+  Slice24_i32,
+};
+typedef uint8_t Baz_i32_Tag;
+
+struct Slice23_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+};
+
+struct Slice24_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+};
+
+union Baz_i32 {
+  Baz_i32_Tag tag;
+  struct {
+    Baz_i32_Tag polygon21_tag;
+    struct Polygon_i32 polygon21;
+  };
+  struct {
+    Baz_i32_Tag slice21_tag;
+    struct OwnedSlice_i32 slice21;
+  };
+  struct {
+    Baz_i32_Tag slice22_tag;
+    struct OwnedSlice_i32 slice22;
+  };
+  struct Slice23_Body_i32 slice23;
+  struct Slice24_Body_i32 slice24;
+};
+
+enum Taz_Tag {
+  Bar3,
+  Taz1,
+  Taz3,
+};
+typedef uint8_t Taz_Tag;
+
+union Taz {
+  Taz_Tag tag;
+  struct {
+    Taz_Tag taz1_tag;
+    int32_t taz1;
+  };
+  struct {
+    Taz_Tag taz3_tag;
+    struct OwnedSlice_i32 taz3;
+  };
+};
+
+enum Tazz_Tag {
+  Bar4,
+  Taz2,
+};
+typedef uint8_t Tazz_Tag;
+
+union Tazz {
+  Tazz_Tag tag;
+  struct {
+    Tazz_Tag taz2_tag;
+    int32_t taz2;
+  };
+};
+
+enum Tazzz_Tag {
+  Bar5,
+  Taz5,
+};
+typedef uint8_t Tazzz_Tag;
+
+union Tazzz {
+  Tazzz_Tag tag;
+  struct {
+    Tazzz_Tag taz5_tag;
+    int32_t taz5;
+  };
+};
+
+enum Tazzzz_Tag {
+  Taz6,
+  Taz7,
+};
+typedef uint8_t Tazzzz_Tag;
+
+union Tazzzz {
+  Tazzzz_Tag tag;
+  struct {
+    Tazzzz_Tag taz6_tag;
+    int32_t taz6;
+  };
+  struct {
+    Tazzzz_Tag taz7_tag;
+    uint32_t taz7;
+  };
+};
+
+enum Qux_Tag {
+  Qux1,
+  Qux2,
+};
+typedef uint8_t Qux_Tag;
+
+union Qux {
+  Qux_Tag tag;
+  struct {
+    Qux_Tag qux1_tag;
+    int32_t qux1;
+  };
+  struct {
+    Qux_Tag qux2_tag;
+    uint32_t qux2;
+  };
+};
+
+void root(const struct Foo_u32 *a,
+          const union Baz_i32 *b,
+          const union Taz *c,
+          union Tazz d,
+          const union Tazzz *e,
+          const union Tazzzz *f,
+          const union Qux *g);
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.compat.c b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.compat.c
new file mode 100644
index 0000000..5724999
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.compat.c
@@ -0,0 +1,266 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum FillRule
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  A,
+  B,
+};
+#ifndef __cplusplus
+typedef uint8_t FillRule;
+#endif // __cplusplus
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+struct OwnedSlice_u32 {
+  uintptr_t len;
+  uint32_t *ptr;
+};
+
+struct Polygon_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coordinates;
+};
+
+/**
+ * This will have a destructor manually implemented via variant_body, and
+ * similarly a Drop impl in Rust.
+ */
+struct OwnedSlice_i32 {
+  uintptr_t len;
+  int32_t *ptr;
+};
+
+enum Foo_u32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar_u32,
+  Polygon1_u32,
+  Slice1_u32,
+  Slice2_u32,
+  Slice3_u32,
+  Slice4_u32,
+};
+#ifndef __cplusplus
+typedef uint8_t Foo_u32_Tag;
+#endif // __cplusplus
+
+struct Slice3_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_u32 coords;
+};
+
+struct Slice4_Body_u32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+};
+
+struct Foo_u32 {
+  Foo_u32_Tag tag;
+  union {
+    struct {
+      struct Polygon_u32 polygon1;
+    };
+    struct {
+      struct OwnedSlice_u32 slice1;
+    };
+    struct {
+      struct OwnedSlice_i32 slice2;
+    };
+    struct Slice3_Body_u32 slice3;
+    struct Slice4_Body_u32 slice4;
+  };
+};
+
+struct Polygon_i32 {
+  FillRule fill;
+  struct OwnedSlice_i32 coordinates;
+};
+
+enum Baz_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar2_i32,
+  Polygon21_i32,
+  Slice21_i32,
+  Slice22_i32,
+  Slice23_i32,
+  Slice24_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t Baz_i32_Tag;
+#endif // __cplusplus
+
+struct Slice23_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+};
+
+struct Slice24_Body_i32 {
+  Baz_i32_Tag tag;
+  FillRule fill;
+  struct OwnedSlice_i32 coords;
+};
+
+union Baz_i32 {
+  Baz_i32_Tag tag;
+  struct {
+    Baz_i32_Tag polygon21_tag;
+    struct Polygon_i32 polygon21;
+  };
+  struct {
+    Baz_i32_Tag slice21_tag;
+    struct OwnedSlice_i32 slice21;
+  };
+  struct {
+    Baz_i32_Tag slice22_tag;
+    struct OwnedSlice_i32 slice22;
+  };
+  struct Slice23_Body_i32 slice23;
+  struct Slice24_Body_i32 slice24;
+};
+
+enum Taz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar3,
+  Taz1,
+  Taz3,
+};
+#ifndef __cplusplus
+typedef uint8_t Taz_Tag;
+#endif // __cplusplus
+
+union Taz {
+  Taz_Tag tag;
+  struct {
+    Taz_Tag taz1_tag;
+    int32_t taz1;
+  };
+  struct {
+    Taz_Tag taz3_tag;
+    struct OwnedSlice_i32 taz3;
+  };
+};
+
+enum Tazz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar4,
+  Taz2,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazz_Tag;
+#endif // __cplusplus
+
+union Tazz {
+  Tazz_Tag tag;
+  struct {
+    Tazz_Tag taz2_tag;
+    int32_t taz2;
+  };
+};
+
+enum Tazzz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Bar5,
+  Taz5,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazzz_Tag;
+#endif // __cplusplus
+
+union Tazzz {
+  Tazzz_Tag tag;
+  struct {
+    Tazzz_Tag taz5_tag;
+    int32_t taz5;
+  };
+};
+
+enum Tazzzz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Taz6,
+  Taz7,
+};
+#ifndef __cplusplus
+typedef uint8_t Tazzzz_Tag;
+#endif // __cplusplus
+
+union Tazzzz {
+  Tazzzz_Tag tag;
+  struct {
+    Tazzzz_Tag taz6_tag;
+    int32_t taz6;
+  };
+  struct {
+    Tazzzz_Tag taz7_tag;
+    uint32_t taz7;
+  };
+};
+
+enum Qux_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Qux1,
+  Qux2,
+};
+#ifndef __cplusplus
+typedef uint8_t Qux_Tag;
+#endif // __cplusplus
+
+union Qux {
+  Qux_Tag tag;
+  struct {
+    Qux_Tag qux1_tag;
+    int32_t qux1;
+  };
+  struct {
+    Qux_Tag qux2_tag;
+    uint32_t qux2;
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct Foo_u32 *a,
+          const union Baz_i32 *b,
+          const union Taz *c,
+          union Tazz d,
+          const union Tazzz *e,
+          const union Tazzzz *f,
+          const union Qux *g);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.pyx b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.pyx
new file mode 100644
index 0000000..49619eb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/destructor_and_copy_ctor.tag.pyx
@@ -0,0 +1,145 @@
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    A,
+    B,
+  ctypedef uint8_t FillRule;
+
+  # This will have a destructor manually implemented via variant_body, and
+  # similarly a Drop impl in Rust.
+  cdef struct OwnedSlice_u32:
+    uintptr_t len;
+    uint32_t *ptr;
+
+  cdef struct Polygon_u32:
+    FillRule fill;
+    OwnedSlice_u32 coordinates;
+
+  # This will have a destructor manually implemented via variant_body, and
+  # similarly a Drop impl in Rust.
+  cdef struct OwnedSlice_i32:
+    uintptr_t len;
+    int32_t *ptr;
+
+  cdef enum:
+    Bar_u32,
+    Polygon1_u32,
+    Slice1_u32,
+    Slice2_u32,
+    Slice3_u32,
+    Slice4_u32,
+  ctypedef uint8_t Foo_u32_Tag;
+
+  cdef struct Slice3_Body_u32:
+    FillRule fill;
+    OwnedSlice_u32 coords;
+
+  cdef struct Slice4_Body_u32:
+    FillRule fill;
+    OwnedSlice_i32 coords;
+
+  cdef struct Foo_u32:
+    Foo_u32_Tag tag;
+    Polygon_u32 polygon1;
+    OwnedSlice_u32 slice1;
+    OwnedSlice_i32 slice2;
+    Slice3_Body_u32 slice3;
+    Slice4_Body_u32 slice4;
+
+  cdef struct Polygon_i32:
+    FillRule fill;
+    OwnedSlice_i32 coordinates;
+
+  cdef enum:
+    Bar2_i32,
+    Polygon21_i32,
+    Slice21_i32,
+    Slice22_i32,
+    Slice23_i32,
+    Slice24_i32,
+  ctypedef uint8_t Baz_i32_Tag;
+
+  cdef struct Slice23_Body_i32:
+    Baz_i32_Tag tag;
+    FillRule fill;
+    OwnedSlice_i32 coords;
+
+  cdef struct Slice24_Body_i32:
+    Baz_i32_Tag tag;
+    FillRule fill;
+    OwnedSlice_i32 coords;
+
+  cdef union Baz_i32:
+    Baz_i32_Tag tag;
+    Polygon_i32 polygon21;
+    OwnedSlice_i32 slice21;
+    OwnedSlice_i32 slice22;
+    Slice23_Body_i32 slice23;
+    Slice24_Body_i32 slice24;
+
+  cdef enum:
+    Bar3,
+    Taz1,
+    Taz3,
+  ctypedef uint8_t Taz_Tag;
+
+  cdef union Taz:
+    Taz_Tag tag;
+    int32_t taz1;
+    OwnedSlice_i32 taz3;
+
+  cdef enum:
+    Bar4,
+    Taz2,
+  ctypedef uint8_t Tazz_Tag;
+
+  cdef union Tazz:
+    Tazz_Tag tag;
+    int32_t taz2;
+
+  cdef enum:
+    Bar5,
+    Taz5,
+  ctypedef uint8_t Tazzz_Tag;
+
+  cdef union Tazzz:
+    Tazzz_Tag tag;
+    int32_t taz5;
+
+  cdef enum:
+    Taz6,
+    Taz7,
+  ctypedef uint8_t Tazzzz_Tag;
+
+  cdef union Tazzzz:
+    Tazzzz_Tag tag;
+    int32_t taz6;
+    uint32_t taz7;
+
+  cdef enum:
+    Qux1,
+    Qux2,
+  ctypedef uint8_t Qux_Tag;
+
+  cdef union Qux:
+    Qux_Tag tag;
+    int32_t qux1;
+    uint32_t qux2;
+
+  void root(const Foo_u32 *a,
+            const Baz_i32 *b,
+            const Taz *c,
+            Tazz d,
+            const Tazzz *e,
+            const Tazzzz *f,
+            const Qux *g);
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.both.c b/cbindgen-0.24.5/tests/expectations/display_list.both.c
new file mode 100644
index 0000000..451eab7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.both.c
@@ -0,0 +1,45 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Rect {
+  float x;
+  float y;
+  float w;
+  float h;
+} Rect;
+
+typedef struct Color {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+} Color;
+
+enum DisplayItem_Tag {
+  Fill,
+  Image,
+  ClearScreen,
+};
+typedef uint8_t DisplayItem_Tag;
+
+typedef struct Fill_Body {
+  DisplayItem_Tag tag;
+  struct Rect _0;
+  struct Color _1;
+} Fill_Body;
+
+typedef struct Image_Body {
+  DisplayItem_Tag tag;
+  uint32_t id;
+  struct Rect bounds;
+} Image_Body;
+
+typedef union DisplayItem {
+  DisplayItem_Tag tag;
+  Fill_Body fill;
+  Image_Body image;
+} DisplayItem;
+
+bool push_item(union DisplayItem item);
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.both.compat.c b/cbindgen-0.24.5/tests/expectations/display_list.both.compat.c
new file mode 100644
index 0000000..2a2e1d3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.both.compat.c
@@ -0,0 +1,59 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Rect {
+  float x;
+  float y;
+  float w;
+  float h;
+} Rect;
+
+typedef struct Color {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+} Color;
+
+enum DisplayItem_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Fill,
+  Image,
+  ClearScreen,
+};
+#ifndef __cplusplus
+typedef uint8_t DisplayItem_Tag;
+#endif // __cplusplus
+
+typedef struct Fill_Body {
+  DisplayItem_Tag tag;
+  struct Rect _0;
+  struct Color _1;
+} Fill_Body;
+
+typedef struct Image_Body {
+  DisplayItem_Tag tag;
+  uint32_t id;
+  struct Rect bounds;
+} Image_Body;
+
+typedef union DisplayItem {
+  DisplayItem_Tag tag;
+  Fill_Body fill;
+  Image_Body image;
+} DisplayItem;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+bool push_item(union DisplayItem item);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.c b/cbindgen-0.24.5/tests/expectations/display_list.c
new file mode 100644
index 0000000..41a37d6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.c
@@ -0,0 +1,45 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float x;
+  float y;
+  float w;
+  float h;
+} Rect;
+
+typedef struct {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+} Color;
+
+enum DisplayItem_Tag {
+  Fill,
+  Image,
+  ClearScreen,
+};
+typedef uint8_t DisplayItem_Tag;
+
+typedef struct {
+  DisplayItem_Tag tag;
+  Rect _0;
+  Color _1;
+} Fill_Body;
+
+typedef struct {
+  DisplayItem_Tag tag;
+  uint32_t id;
+  Rect bounds;
+} Image_Body;
+
+typedef union {
+  DisplayItem_Tag tag;
+  Fill_Body fill;
+  Image_Body image;
+} DisplayItem;
+
+bool push_item(DisplayItem item);
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.compat.c b/cbindgen-0.24.5/tests/expectations/display_list.compat.c
new file mode 100644
index 0000000..164e4d0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.compat.c
@@ -0,0 +1,59 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float x;
+  float y;
+  float w;
+  float h;
+} Rect;
+
+typedef struct {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+} Color;
+
+enum DisplayItem_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Fill,
+  Image,
+  ClearScreen,
+};
+#ifndef __cplusplus
+typedef uint8_t DisplayItem_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  DisplayItem_Tag tag;
+  Rect _0;
+  Color _1;
+} Fill_Body;
+
+typedef struct {
+  DisplayItem_Tag tag;
+  uint32_t id;
+  Rect bounds;
+} Image_Body;
+
+typedef union {
+  DisplayItem_Tag tag;
+  Fill_Body fill;
+  Image_Body image;
+} DisplayItem;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+bool push_item(DisplayItem item);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.cpp b/cbindgen-0.24.5/tests/expectations/display_list.cpp
new file mode 100644
index 0000000..b65fc14
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.cpp
@@ -0,0 +1,51 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Rect {
+  float x;
+  float y;
+  float w;
+  float h;
+};
+
+struct Color {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+};
+
+union DisplayItem {
+  enum class Tag : uint8_t {
+    Fill,
+    Image,
+    ClearScreen,
+  };
+
+  struct Fill_Body {
+    Tag tag;
+    Rect _0;
+    Color _1;
+  };
+
+  struct Image_Body {
+    Tag tag;
+    uint32_t id;
+    Rect bounds;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Fill_Body fill;
+  Image_Body image;
+};
+
+extern "C" {
+
+bool push_item(DisplayItem item);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.pyx b/cbindgen-0.24.5/tests/expectations/display_list.pyx
new file mode 100644
index 0000000..45d6b05
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.pyx
@@ -0,0 +1,42 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Rect:
+    float x;
+    float y;
+    float w;
+    float h;
+
+  ctypedef struct Color:
+    uint8_t r;
+    uint8_t g;
+    uint8_t b;
+    uint8_t a;
+
+  cdef enum:
+    Fill,
+    Image,
+    ClearScreen,
+  ctypedef uint8_t DisplayItem_Tag;
+
+  ctypedef struct Fill_Body:
+    DisplayItem_Tag tag;
+    Rect _0;
+    Color _1;
+
+  ctypedef struct Image_Body:
+    DisplayItem_Tag tag;
+    uint32_t id;
+    Rect bounds;
+
+  ctypedef union DisplayItem:
+    DisplayItem_Tag tag;
+    Fill_Body fill;
+    Image_Body image;
+
+  bool push_item(DisplayItem item);
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.tag.c b/cbindgen-0.24.5/tests/expectations/display_list.tag.c
new file mode 100644
index 0000000..78f53de
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.tag.c
@@ -0,0 +1,45 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Rect {
+  float x;
+  float y;
+  float w;
+  float h;
+};
+
+struct Color {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+};
+
+enum DisplayItem_Tag {
+  Fill,
+  Image,
+  ClearScreen,
+};
+typedef uint8_t DisplayItem_Tag;
+
+struct Fill_Body {
+  DisplayItem_Tag tag;
+  struct Rect _0;
+  struct Color _1;
+};
+
+struct Image_Body {
+  DisplayItem_Tag tag;
+  uint32_t id;
+  struct Rect bounds;
+};
+
+union DisplayItem {
+  DisplayItem_Tag tag;
+  struct Fill_Body fill;
+  struct Image_Body image;
+};
+
+bool push_item(union DisplayItem item);
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.tag.compat.c b/cbindgen-0.24.5/tests/expectations/display_list.tag.compat.c
new file mode 100644
index 0000000..86f9165
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.tag.compat.c
@@ -0,0 +1,59 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Rect {
+  float x;
+  float y;
+  float w;
+  float h;
+};
+
+struct Color {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+  uint8_t a;
+};
+
+enum DisplayItem_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Fill,
+  Image,
+  ClearScreen,
+};
+#ifndef __cplusplus
+typedef uint8_t DisplayItem_Tag;
+#endif // __cplusplus
+
+struct Fill_Body {
+  DisplayItem_Tag tag;
+  struct Rect _0;
+  struct Color _1;
+};
+
+struct Image_Body {
+  DisplayItem_Tag tag;
+  uint32_t id;
+  struct Rect bounds;
+};
+
+union DisplayItem {
+  DisplayItem_Tag tag;
+  struct Fill_Body fill;
+  struct Image_Body image;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+bool push_item(union DisplayItem item);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/display_list.tag.pyx b/cbindgen-0.24.5/tests/expectations/display_list.tag.pyx
new file mode 100644
index 0000000..6bf900e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/display_list.tag.pyx
@@ -0,0 +1,42 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Rect:
+    float x;
+    float y;
+    float w;
+    float h;
+
+  cdef struct Color:
+    uint8_t r;
+    uint8_t g;
+    uint8_t b;
+    uint8_t a;
+
+  cdef enum:
+    Fill,
+    Image,
+    ClearScreen,
+  ctypedef uint8_t DisplayItem_Tag;
+
+  cdef struct Fill_Body:
+    DisplayItem_Tag tag;
+    Rect _0;
+    Color _1;
+
+  cdef struct Image_Body:
+    DisplayItem_Tag tag;
+    uint32_t id;
+    Rect bounds;
+
+  cdef union DisplayItem:
+    DisplayItem_Tag tag;
+    Fill_Body fill;
+    Image_Body image;
+
+  bool push_item(DisplayItem item);
diff --git a/cbindgen-0.24.5/tests/expectations/doclength_short.c b/cbindgen-0.24.5/tests/expectations/doclength_short.c
new file mode 100644
index 0000000..f08e6e3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/doclength_short.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * The root of all evil.
+ */
+void root(void);
+
+/**
+ * A little above the root, and a lot more visible, with a run-on sentence
+ */
+void trunk(void);
diff --git a/cbindgen-0.24.5/tests/expectations/doclength_short.compat.c b/cbindgen-0.24.5/tests/expectations/doclength_short.compat.c
new file mode 100644
index 0000000..c871ab2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/doclength_short.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * The root of all evil.
+ */
+void root(void);
+
+/**
+ * A little above the root, and a lot more visible, with a run-on sentence
+ */
+void trunk(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/doclength_short.cpp b/cbindgen-0.24.5/tests/expectations/doclength_short.cpp
new file mode 100644
index 0000000..162a050
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/doclength_short.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+/// The root of all evil.
+void root();
+
+/// A little above the root, and a lot more visible, with a run-on sentence
+void trunk();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/doclength_short.pyx b/cbindgen-0.24.5/tests/expectations/doclength_short.pyx
new file mode 100644
index 0000000..ea2838e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/doclength_short.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # The root of all evil.
+  void root();
+
+  # A little above the root, and a lot more visible, with a run-on sentence
+  void trunk();
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_auto.c b/cbindgen-0.24.5/tests/expectations/docstyle_auto.c
new file mode 100644
index 0000000..86bcd0c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_auto.c
@@ -0,0 +1,9 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * The root of all evil.
+ */
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_auto.compat.c b/cbindgen-0.24.5/tests/expectations/docstyle_auto.compat.c
new file mode 100644
index 0000000..c1c2987
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_auto.compat.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * The root of all evil.
+ */
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_auto.cpp b/cbindgen-0.24.5/tests/expectations/docstyle_auto.cpp
new file mode 100644
index 0000000..e303a45
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_auto.cpp
@@ -0,0 +1,12 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+/// The root of all evil.
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_auto.pyx b/cbindgen-0.24.5/tests/expectations/docstyle_auto.pyx
new file mode 100644
index 0000000..5268ff4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_auto.pyx
@@ -0,0 +1,10 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # The root of all evil.
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_c99.c b/cbindgen-0.24.5/tests/expectations/docstyle_c99.c
new file mode 100644
index 0000000..111f78a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_c99.c
@@ -0,0 +1,7 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+// The root of all evil.
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_c99.compat.c b/cbindgen-0.24.5/tests/expectations/docstyle_c99.compat.c
new file mode 100644
index 0000000..2e5caf8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_c99.compat.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// The root of all evil.
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_c99.cpp b/cbindgen-0.24.5/tests/expectations/docstyle_c99.cpp
new file mode 100644
index 0000000..b0aa7c0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_c99.cpp
@@ -0,0 +1,12 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+// The root of all evil.
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_c99.pyx b/cbindgen-0.24.5/tests/expectations/docstyle_c99.pyx
new file mode 100644
index 0000000..5268ff4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_c99.pyx
@@ -0,0 +1,10 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # The root of all evil.
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_doxy.c b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.c
new file mode 100644
index 0000000..86bcd0c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.c
@@ -0,0 +1,9 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * The root of all evil.
+ */
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_doxy.compat.c b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.compat.c
new file mode 100644
index 0000000..c1c2987
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.compat.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * The root of all evil.
+ */
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_doxy.cpp b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.cpp
new file mode 100644
index 0000000..c5097e5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.cpp
@@ -0,0 +1,14 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+/**
+ * The root of all evil.
+ */
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/docstyle_doxy.pyx b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.pyx
new file mode 100644
index 0000000..5268ff4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/docstyle_doxy.pyx
@@ -0,0 +1,10 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # The root of all evil.
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/documentation.c b/cbindgen-0.24.5/tests/expectations/documentation.c
new file mode 100644
index 0000000..e455b8d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * The root of all evil.
+ *
+ * But at least it contains some more documentation as someone would expect
+ * from a simple test case like this.
+ *
+ * # Hint
+ *
+ * Always ensure that everything is properly documented, even if you feel lazy.
+ * **Sometimes** it is also helpful to include some markdown formatting.
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * Attention:
+ *
+ *    Rust is going to trim all leading `/` symbols. If you want to use them as a
+ *    marker you need to add at least a single whitespace inbetween the tripple
+ *    slash doc-comment marker and the rest.
+ *
+ */
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/documentation.compat.c b/cbindgen-0.24.5/tests/expectations/documentation.compat.c
new file mode 100644
index 0000000..fcdb544
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation.compat.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * The root of all evil.
+ *
+ * But at least it contains some more documentation as someone would expect
+ * from a simple test case like this.
+ *
+ * # Hint
+ *
+ * Always ensure that everything is properly documented, even if you feel lazy.
+ * **Sometimes** it is also helpful to include some markdown formatting.
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * Attention:
+ *
+ *    Rust is going to trim all leading `/` symbols. If you want to use them as a
+ *    marker you need to add at least a single whitespace inbetween the tripple
+ *    slash doc-comment marker and the rest.
+ *
+ */
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/documentation.cpp b/cbindgen-0.24.5/tests/expectations/documentation.cpp
new file mode 100644
index 0000000..ec2b8be
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation.cpp
@@ -0,0 +1,29 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+/// The root of all evil.
+///
+/// But at least it contains some more documentation as someone would expect
+/// from a simple test case like this.
+///
+/// # Hint
+///
+/// Always ensure that everything is properly documented, even if you feel lazy.
+/// **Sometimes** it is also helpful to include some markdown formatting.
+///
+/// ////////////////////////////////////////////////////////////////////////////
+///
+/// Attention:
+///
+///    Rust is going to trim all leading `/` symbols. If you want to use them as a
+///    marker you need to add at least a single whitespace inbetween the tripple
+///    slash doc-comment marker and the rest.
+///
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/documentation.pyx b/cbindgen-0.24.5/tests/expectations/documentation.pyx
new file mode 100644
index 0000000..340b38a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation.pyx
@@ -0,0 +1,27 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  # The root of all evil.
+  #
+  # But at least it contains some more documentation as someone would expect
+  # from a simple test case like this.
+  #
+  # # Hint
+  #
+  # Always ensure that everything is properly documented, even if you feel lazy.
+  # **Sometimes** it is also helpful to include some markdown formatting.
+  #
+  # ////////////////////////////////////////////////////////////////////////////
+  #
+  # Attention:
+  #
+  #    Rust is going to trim all leading `/` symbols. If you want to use them as a
+  #    marker you need to add at least a single whitespace inbetween the tripple
+  #    slash doc-comment marker and the rest.
+  #
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/documentation_attr.c b/cbindgen-0.24.5/tests/expectations/documentation_attr.c
new file mode 100644
index 0000000..d9f6eff
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation_attr.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ *With doc attr, each attr contribute to one line of document
+ *like this one with a new line character at its end
+ *and this one as well. So they are in the same paragraph
+ *
+ *Line ends with one new line should not break
+ *
+ *Line ends with two spaces and a new line
+ *should break to next line
+ *
+ *Line ends with two new lines
+ *
+ *Should break to next paragraph
+ */
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/documentation_attr.compat.c b/cbindgen-0.24.5/tests/expectations/documentation_attr.compat.c
new file mode 100644
index 0000000..e7fe43b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation_attr.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ *With doc attr, each attr contribute to one line of document
+ *like this one with a new line character at its end
+ *and this one as well. So they are in the same paragraph
+ *
+ *Line ends with one new line should not break
+ *
+ *Line ends with two spaces and a new line
+ *should break to next line
+ *
+ *Line ends with two new lines
+ *
+ *Should break to next paragraph
+ */
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/documentation_attr.cpp b/cbindgen-0.24.5/tests/expectations/documentation_attr.cpp
new file mode 100644
index 0000000..5f98573
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation_attr.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+///With doc attr, each attr contribute to one line of document
+///like this one with a new line character at its end
+///and this one as well. So they are in the same paragraph
+///
+///Line ends with one new line should not break
+///
+///Line ends with two spaces and a new line
+///should break to next line
+///
+///Line ends with two new lines
+///
+///Should break to next paragraph
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/documentation_attr.pyx b/cbindgen-0.24.5/tests/expectations/documentation_attr.pyx
new file mode 100644
index 0000000..88070eb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/documentation_attr.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  #With doc attr, each attr contribute to one line of document
+  #like this one with a new line character at its end
+  #and this one as well. So they are in the same paragraph
+  #
+  #Line ends with one new line should not break
+  #
+  #Line ends with two spaces and a new line
+  #should break to next line
+  #
+  #Line ends with two new lines
+  #
+  #Should break to next paragraph
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/enum.both.c b/cbindgen-0.24.5/tests/expectations/enum.both.c
new file mode 100644
index 0000000..a0f88c1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.both.c
@@ -0,0 +1,261 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+typedef uint64_t A;
+
+enum B {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+typedef uint32_t B;
+
+enum C {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+typedef uint16_t C;
+
+enum D {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+typedef uint8_t D;
+
+enum E {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+typedef uintptr_t E;
+
+enum F {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+typedef intptr_t F;
+
+typedef enum L {
+  l1,
+  l2,
+  l3,
+  l4,
+} L;
+
+enum M {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+typedef int8_t M;
+
+typedef enum N {
+  n1,
+  n2,
+  n3,
+  n4,
+} N;
+
+enum O {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+typedef int8_t O;
+
+typedef struct J J;
+
+typedef struct K K;
+
+typedef struct Opaque Opaque;
+
+enum G_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t G_Tag;
+
+typedef struct Bar_Body {
+  G_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union G {
+  G_Tag tag;
+  struct {
+    G_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} G;
+
+typedef enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+} H_Tag;
+
+typedef struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum ExI_Tag {
+  ExI_Foo,
+  ExI_Bar,
+  ExI_Baz,
+};
+typedef uint8_t ExI_Tag;
+
+typedef struct ExI_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} ExI_Bar_Body;
+
+typedef struct ExI {
+  ExI_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    ExI_Bar_Body bar;
+  };
+} ExI;
+
+enum P_Tag {
+  P0,
+  P1,
+};
+typedef uint8_t P_Tag;
+
+typedef struct P1_Body {
+  uint8_t _0;
+  uint8_t _1;
+  uint8_t _2;
+} P1_Body;
+
+typedef struct P {
+  P_Tag tag;
+  union {
+    struct {
+      uint8_t p0;
+    };
+    P1_Body p1;
+  };
+} P;
+
+typedef enum Q_Tag {
+  Ok,
+  Err,
+} Q_Tag;
+
+typedef struct Q {
+  Q_Tag tag;
+  union {
+    struct {
+      uint32_t *ok;
+    };
+    struct {
+      uint32_t err;
+    };
+  };
+} Q;
+
+typedef enum R_Tag {
+  IRFoo,
+  IRBar,
+  IRBaz,
+} R_Tag;
+
+typedef struct IRBar_Body {
+  uint8_t x;
+  int16_t y;
+} IRBar_Body;
+
+typedef struct R {
+  R_Tag tag;
+  union {
+    struct {
+      int16_t IRFoo;
+    };
+    IRBar_Body IRBar;
+  };
+} R;
+
+void root(struct Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          union G g,
+          struct H h,
+          struct ExI i,
+          struct J j,
+          struct K k,
+          enum L l,
+          M m,
+          enum N n,
+          O o,
+          struct P p,
+          struct Q q,
+          struct R r);
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.both.compat.c b/cbindgen-0.24.5/tests/expectations/enum.both.compat.c
new file mode 100644
index 0000000..88d59a7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.both.compat.c
@@ -0,0 +1,335 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A
+#ifdef __cplusplus
+  : uint64_t
+#endif // __cplusplus
+ {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+#ifndef __cplusplus
+typedef uint64_t A;
+#endif // __cplusplus
+
+enum B
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+#ifndef __cplusplus
+typedef uint32_t B;
+#endif // __cplusplus
+
+enum C
+#ifdef __cplusplus
+  : uint16_t
+#endif // __cplusplus
+ {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+#ifndef __cplusplus
+typedef uint16_t C;
+#endif // __cplusplus
+
+enum D
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+#ifndef __cplusplus
+typedef uint8_t D;
+#endif // __cplusplus
+
+enum E
+#ifdef __cplusplus
+  : uintptr_t
+#endif // __cplusplus
+ {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+#ifndef __cplusplus
+typedef uintptr_t E;
+#endif // __cplusplus
+
+enum F
+#ifdef __cplusplus
+  : intptr_t
+#endif // __cplusplus
+ {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+#ifndef __cplusplus
+typedef intptr_t F;
+#endif // __cplusplus
+
+typedef enum L {
+  l1,
+  l2,
+  l3,
+  l4,
+} L;
+
+enum M
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+#ifndef __cplusplus
+typedef int8_t M;
+#endif // __cplusplus
+
+typedef enum N {
+  n1,
+  n2,
+  n3,
+  n4,
+} N;
+
+enum O
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+#ifndef __cplusplus
+typedef int8_t O;
+#endif // __cplusplus
+
+typedef struct J J;
+
+typedef struct K K;
+
+typedef struct Opaque Opaque;
+
+enum G_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t G_Tag;
+#endif // __cplusplus
+
+typedef struct Bar_Body {
+  G_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union G {
+  G_Tag tag;
+  struct {
+    G_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} G;
+
+typedef enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+} H_Tag;
+
+typedef struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct H {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum ExI_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  ExI_Foo,
+  ExI_Bar,
+  ExI_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t ExI_Tag;
+#endif // __cplusplus
+
+typedef struct ExI_Bar_Body {
+  uint8_t x;
+  int16_t y;
+} ExI_Bar_Body;
+
+typedef struct ExI {
+  ExI_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    ExI_Bar_Body bar;
+  };
+} ExI;
+
+enum P_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  P0,
+  P1,
+};
+#ifndef __cplusplus
+typedef uint8_t P_Tag;
+#endif // __cplusplus
+
+typedef struct P1_Body {
+  uint8_t _0;
+  uint8_t _1;
+  uint8_t _2;
+} P1_Body;
+
+typedef struct P {
+  P_Tag tag;
+  union {
+    struct {
+      uint8_t p0;
+    };
+    P1_Body p1;
+  };
+} P;
+
+typedef enum Q_Tag {
+  Ok,
+  Err,
+} Q_Tag;
+
+typedef struct Q {
+  Q_Tag tag;
+  union {
+    struct {
+      uint32_t *ok;
+    };
+    struct {
+      uint32_t err;
+    };
+  };
+} Q;
+
+typedef enum R_Tag {
+  IRFoo,
+  IRBar,
+  IRBaz,
+} R_Tag;
+
+typedef struct IRBar_Body {
+  uint8_t x;
+  int16_t y;
+} IRBar_Body;
+
+typedef struct R {
+  R_Tag tag;
+  union {
+    struct {
+      int16_t IRFoo;
+    };
+    IRBar_Body IRBar;
+  };
+} R;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          union G g,
+          struct H h,
+          struct ExI i,
+          struct J j,
+          struct K k,
+          enum L l,
+          M m,
+          enum N n,
+          O o,
+          struct P p,
+          struct Q q,
+          struct R r);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.c b/cbindgen-0.24.5/tests/expectations/enum.c
new file mode 100644
index 0000000..0562a56
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.c
@@ -0,0 +1,261 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+typedef uint64_t A;
+
+enum B {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+typedef uint32_t B;
+
+enum C {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+typedef uint16_t C;
+
+enum D {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+typedef uint8_t D;
+
+enum E {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+typedef uintptr_t E;
+
+enum F {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+typedef intptr_t F;
+
+typedef enum {
+  l1,
+  l2,
+  l3,
+  l4,
+} L;
+
+enum M {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+typedef int8_t M;
+
+typedef enum {
+  n1,
+  n2,
+  n3,
+  n4,
+} N;
+
+enum O {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+typedef int8_t O;
+
+typedef struct J J;
+
+typedef struct K K;
+
+typedef struct Opaque Opaque;
+
+enum G_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t G_Tag;
+
+typedef struct {
+  G_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union {
+  G_Tag tag;
+  struct {
+    G_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} G;
+
+typedef enum {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+} H_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum ExI_Tag {
+  ExI_Foo,
+  ExI_Bar,
+  ExI_Baz,
+};
+typedef uint8_t ExI_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} ExI_Bar_Body;
+
+typedef struct {
+  ExI_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    ExI_Bar_Body bar;
+  };
+} ExI;
+
+enum P_Tag {
+  P0,
+  P1,
+};
+typedef uint8_t P_Tag;
+
+typedef struct {
+  uint8_t _0;
+  uint8_t _1;
+  uint8_t _2;
+} P1_Body;
+
+typedef struct {
+  P_Tag tag;
+  union {
+    struct {
+      uint8_t p0;
+    };
+    P1_Body p1;
+  };
+} P;
+
+typedef enum {
+  Ok,
+  Err,
+} Q_Tag;
+
+typedef struct {
+  Q_Tag tag;
+  union {
+    struct {
+      uint32_t *ok;
+    };
+    struct {
+      uint32_t err;
+    };
+  };
+} Q;
+
+typedef enum {
+  IRFoo,
+  IRBar,
+  IRBaz,
+} R_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} IRBar_Body;
+
+typedef struct {
+  R_Tag tag;
+  union {
+    struct {
+      int16_t IRFoo;
+    };
+    IRBar_Body IRBar;
+  };
+} R;
+
+void root(Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          G g,
+          H h,
+          ExI i,
+          J j,
+          K k,
+          L l,
+          M m,
+          N n,
+          O o,
+          P p,
+          Q q,
+          R r);
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.compat.c b/cbindgen-0.24.5/tests/expectations/enum.compat.c
new file mode 100644
index 0000000..3dc7c33
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.compat.c
@@ -0,0 +1,335 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A
+#ifdef __cplusplus
+  : uint64_t
+#endif // __cplusplus
+ {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+#ifndef __cplusplus
+typedef uint64_t A;
+#endif // __cplusplus
+
+enum B
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+#ifndef __cplusplus
+typedef uint32_t B;
+#endif // __cplusplus
+
+enum C
+#ifdef __cplusplus
+  : uint16_t
+#endif // __cplusplus
+ {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+#ifndef __cplusplus
+typedef uint16_t C;
+#endif // __cplusplus
+
+enum D
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+#ifndef __cplusplus
+typedef uint8_t D;
+#endif // __cplusplus
+
+enum E
+#ifdef __cplusplus
+  : uintptr_t
+#endif // __cplusplus
+ {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+#ifndef __cplusplus
+typedef uintptr_t E;
+#endif // __cplusplus
+
+enum F
+#ifdef __cplusplus
+  : intptr_t
+#endif // __cplusplus
+ {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+#ifndef __cplusplus
+typedef intptr_t F;
+#endif // __cplusplus
+
+typedef enum {
+  l1,
+  l2,
+  l3,
+  l4,
+} L;
+
+enum M
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+#ifndef __cplusplus
+typedef int8_t M;
+#endif // __cplusplus
+
+typedef enum {
+  n1,
+  n2,
+  n3,
+  n4,
+} N;
+
+enum O
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+#ifndef __cplusplus
+typedef int8_t O;
+#endif // __cplusplus
+
+typedef struct J J;
+
+typedef struct K K;
+
+typedef struct Opaque Opaque;
+
+enum G_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t G_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  G_Tag tag;
+  uint8_t x;
+  int16_t y;
+} Bar_Body;
+
+typedef union {
+  G_Tag tag;
+  struct {
+    G_Tag foo_tag;
+    int16_t foo;
+  };
+  Bar_Body bar;
+} G;
+
+typedef enum {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+} H_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} H_Bar_Body;
+
+typedef struct {
+  H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    H_Bar_Body bar;
+  };
+} H;
+
+enum ExI_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  ExI_Foo,
+  ExI_Bar,
+  ExI_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t ExI_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} ExI_Bar_Body;
+
+typedef struct {
+  ExI_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    ExI_Bar_Body bar;
+  };
+} ExI;
+
+enum P_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  P0,
+  P1,
+};
+#ifndef __cplusplus
+typedef uint8_t P_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  uint8_t _0;
+  uint8_t _1;
+  uint8_t _2;
+} P1_Body;
+
+typedef struct {
+  P_Tag tag;
+  union {
+    struct {
+      uint8_t p0;
+    };
+    P1_Body p1;
+  };
+} P;
+
+typedef enum {
+  Ok,
+  Err,
+} Q_Tag;
+
+typedef struct {
+  Q_Tag tag;
+  union {
+    struct {
+      uint32_t *ok;
+    };
+    struct {
+      uint32_t err;
+    };
+  };
+} Q;
+
+typedef enum {
+  IRFoo,
+  IRBar,
+  IRBaz,
+} R_Tag;
+
+typedef struct {
+  uint8_t x;
+  int16_t y;
+} IRBar_Body;
+
+typedef struct {
+  R_Tag tag;
+  union {
+    struct {
+      int16_t IRFoo;
+    };
+    IRBar_Body IRBar;
+  };
+} R;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          G g,
+          H h,
+          ExI i,
+          J j,
+          K k,
+          L l,
+          M m,
+          N n,
+          O o,
+          P p,
+          Q q,
+          R r);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.cpp b/cbindgen-0.24.5/tests/expectations/enum.cpp
new file mode 100644
index 0000000..2f16218
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.cpp
@@ -0,0 +1,271 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class A : uint64_t {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+
+enum class B : uint32_t {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+
+enum class C : uint16_t {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+
+enum class D : uint8_t {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+
+enum class E : uintptr_t {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+
+enum class F : intptr_t {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+
+enum class L {
+  l1,
+  l2,
+  l3,
+  l4,
+};
+
+enum class M : int8_t {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+
+enum N {
+  n1,
+  n2,
+  n3,
+  n4,
+};
+
+enum O : int8_t {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+
+struct J;
+
+struct K;
+
+struct Opaque;
+
+union G {
+  enum class Tag : uint8_t {
+    Foo,
+    Bar,
+    Baz,
+  };
+
+  struct Foo_Body {
+    Tag tag;
+    int16_t _0;
+  };
+
+  struct Bar_Body {
+    Tag tag;
+    uint8_t x;
+    int16_t y;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Foo_Body foo;
+  Bar_Body bar;
+};
+
+struct H {
+  enum class Tag {
+    H_Foo,
+    H_Bar,
+    H_Baz,
+  };
+
+  struct H_Foo_Body {
+    int16_t _0;
+  };
+
+  struct H_Bar_Body {
+    uint8_t x;
+    int16_t y;
+  };
+
+  Tag tag;
+  union {
+    H_Foo_Body foo;
+    H_Bar_Body bar;
+  };
+};
+
+struct ExI {
+  enum class Tag : uint8_t {
+    ExI_Foo,
+    ExI_Bar,
+    ExI_Baz,
+  };
+
+  struct ExI_Foo_Body {
+    int16_t _0;
+  };
+
+  struct ExI_Bar_Body {
+    uint8_t x;
+    int16_t y;
+  };
+
+  Tag tag;
+  union {
+    ExI_Foo_Body foo;
+    ExI_Bar_Body bar;
+  };
+};
+
+struct P {
+  enum class Tag : uint8_t {
+    P0,
+    P1,
+  };
+
+  struct P0_Body {
+    uint8_t _0;
+  };
+
+  struct P1_Body {
+    uint8_t _0;
+    uint8_t _1;
+    uint8_t _2;
+  };
+
+  Tag tag;
+  union {
+    P0_Body p0;
+    P1_Body p1;
+  };
+};
+
+struct Q {
+  enum class Tag {
+    Ok,
+    Err,
+  };
+
+  struct Ok_Body {
+    Box<uint32_t> _0;
+  };
+
+  struct Err_Body {
+    uint32_t _0;
+  };
+
+  Tag tag;
+  union {
+    Ok_Body ok;
+    Err_Body err;
+  };
+};
+
+struct R {
+  enum class Tag {
+    IRFoo,
+    IRBar,
+    IRBaz,
+  };
+
+  struct IRFoo_Body {
+    int16_t _0;
+  };
+
+  struct IRBar_Body {
+    uint8_t x;
+    int16_t y;
+  };
+
+  Tag tag;
+  union {
+    IRFoo_Body IRFoo;
+    IRBar_Body IRBar;
+  };
+};
+
+extern "C" {
+
+void root(Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          G g,
+          H h,
+          ExI i,
+          J j,
+          K k,
+          L l,
+          M m,
+          N n,
+          O o,
+          P p,
+          Q q,
+          R r);
+
+} // extern "C"
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.pyx b/cbindgen-0.24.5/tests/expectations/enum.pyx
new file mode 100644
index 0000000..03570f2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.pyx
@@ -0,0 +1,215 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    a1 # = 0,
+    a2 # = 2,
+    a3,
+    a4 # = 5,
+  ctypedef uint64_t A;
+
+  cdef enum:
+    b1 # = 0,
+    b2 # = 2,
+    b3,
+    b4 # = 5,
+  ctypedef uint32_t B;
+
+  cdef enum:
+    c1 # = 0,
+    c2 # = 2,
+    c3,
+    c4 # = 5,
+  ctypedef uint16_t C;
+
+  cdef enum:
+    d1 # = 0,
+    d2 # = 2,
+    d3,
+    d4 # = 5,
+  ctypedef uint8_t D;
+
+  cdef enum:
+    e1 # = 0,
+    e2 # = 2,
+    e3,
+    e4 # = 5,
+  ctypedef uintptr_t E;
+
+  cdef enum:
+    f1 # = 0,
+    f2 # = 2,
+    f3,
+    f4 # = 5,
+  ctypedef intptr_t F;
+
+  ctypedef enum L:
+    l1,
+    l2,
+    l3,
+    l4,
+
+  cdef enum:
+    m1 # = -1,
+    m2 # = 0,
+    m3 # = 1,
+  ctypedef int8_t M;
+
+  ctypedef enum N:
+    n1,
+    n2,
+    n3,
+    n4,
+
+  cdef enum:
+    o1,
+    o2,
+    o3,
+    o4,
+  ctypedef int8_t O;
+
+  ctypedef struct J:
+    pass
+
+  ctypedef struct K:
+    pass
+
+  ctypedef struct Opaque:
+    pass
+
+  cdef enum:
+    Foo,
+    Bar,
+    Baz,
+  ctypedef uint8_t G_Tag;
+
+  ctypedef struct Bar_Body:
+    G_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  ctypedef union G:
+    G_Tag tag;
+    int16_t foo;
+    Bar_Body bar;
+
+  ctypedef enum H_Tag:
+    H_Foo,
+    H_Bar,
+    H_Baz,
+
+  ctypedef struct H_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct H:
+    H_Tag tag;
+    int16_t foo;
+    H_Bar_Body bar;
+
+  cdef enum:
+    ExI_Foo,
+    ExI_Bar,
+    ExI_Baz,
+  ctypedef uint8_t ExI_Tag;
+
+  ctypedef struct ExI_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct ExI:
+    ExI_Tag tag;
+    int16_t foo;
+    ExI_Bar_Body bar;
+
+  cdef enum:
+    P0,
+    P1,
+  ctypedef uint8_t P_Tag;
+
+  ctypedef struct P1_Body:
+    uint8_t _0;
+    uint8_t _1;
+    uint8_t _2;
+
+  ctypedef struct P:
+    P_Tag tag;
+    uint8_t p0;
+    P1_Body p1;
+
+  ctypedef enum Q_Tag:
+    Ok,
+    Err,
+
+  ctypedef struct Q:
+    Q_Tag tag;
+    uint32_t *ok;
+    uint32_t err;
+
+  ctypedef enum R_Tag:
+    IRFoo,
+    IRBar,
+    IRBaz,
+
+  ctypedef struct IRBar_Body:
+    uint8_t x;
+    int16_t y;
+
+  ctypedef struct R:
+    R_Tag tag;
+    int16_t IRFoo;
+    IRBar_Body IRBar;
+
+  void root(Opaque *opaque,
+            A a,
+            B b,
+            C c,
+            D d,
+            E e,
+            F f,
+            G g,
+            H h,
+            ExI i,
+            J j,
+            K k,
+            L l,
+            M m,
+            N n,
+            O o,
+            P p,
+            Q q,
+            R r);
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.tag.c b/cbindgen-0.24.5/tests/expectations/enum.tag.c
new file mode 100644
index 0000000..a7f1046
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.tag.c
@@ -0,0 +1,261 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+typedef uint64_t A;
+
+enum B {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+typedef uint32_t B;
+
+enum C {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+typedef uint16_t C;
+
+enum D {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+typedef uint8_t D;
+
+enum E {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+typedef uintptr_t E;
+
+enum F {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+typedef intptr_t F;
+
+enum L {
+  l1,
+  l2,
+  l3,
+  l4,
+};
+
+enum M {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+typedef int8_t M;
+
+enum N {
+  n1,
+  n2,
+  n3,
+  n4,
+};
+
+enum O {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+typedef int8_t O;
+
+struct J;
+
+struct K;
+
+struct Opaque;
+
+enum G_Tag {
+  Foo,
+  Bar,
+  Baz,
+};
+typedef uint8_t G_Tag;
+
+struct Bar_Body {
+  G_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union G {
+  G_Tag tag;
+  struct {
+    G_Tag foo_tag;
+    int16_t foo;
+  };
+  struct Bar_Body bar;
+};
+
+enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+
+struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  enum H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct H_Bar_Body bar;
+  };
+};
+
+enum ExI_Tag {
+  ExI_Foo,
+  ExI_Bar,
+  ExI_Baz,
+};
+typedef uint8_t ExI_Tag;
+
+struct ExI_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct ExI {
+  ExI_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct ExI_Bar_Body bar;
+  };
+};
+
+enum P_Tag {
+  P0,
+  P1,
+};
+typedef uint8_t P_Tag;
+
+struct P1_Body {
+  uint8_t _0;
+  uint8_t _1;
+  uint8_t _2;
+};
+
+struct P {
+  P_Tag tag;
+  union {
+    struct {
+      uint8_t p0;
+    };
+    struct P1_Body p1;
+  };
+};
+
+enum Q_Tag {
+  Ok,
+  Err,
+};
+
+struct Q {
+  enum Q_Tag tag;
+  union {
+    struct {
+      uint32_t *ok;
+    };
+    struct {
+      uint32_t err;
+    };
+  };
+};
+
+enum R_Tag {
+  IRFoo,
+  IRBar,
+  IRBaz,
+};
+
+struct IRBar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct R {
+  enum R_Tag tag;
+  union {
+    struct {
+      int16_t IRFoo;
+    };
+    struct IRBar_Body IRBar;
+  };
+};
+
+void root(struct Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          union G g,
+          struct H h,
+          struct ExI i,
+          struct J j,
+          struct K k,
+          enum L l,
+          M m,
+          enum N n,
+          O o,
+          struct P p,
+          struct Q q,
+          struct R r);
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.tag.compat.c b/cbindgen-0.24.5/tests/expectations/enum.tag.compat.c
new file mode 100644
index 0000000..73d64ba
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.tag.compat.c
@@ -0,0 +1,335 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A
+#ifdef __cplusplus
+  : uint64_t
+#endif // __cplusplus
+ {
+  a1 = 0,
+  a2 = 2,
+  a3,
+  a4 = 5,
+};
+#ifndef __cplusplus
+typedef uint64_t A;
+#endif // __cplusplus
+
+enum B
+#ifdef __cplusplus
+  : uint32_t
+#endif // __cplusplus
+ {
+  b1 = 0,
+  b2 = 2,
+  b3,
+  b4 = 5,
+};
+#ifndef __cplusplus
+typedef uint32_t B;
+#endif // __cplusplus
+
+enum C
+#ifdef __cplusplus
+  : uint16_t
+#endif // __cplusplus
+ {
+  c1 = 0,
+  c2 = 2,
+  c3,
+  c4 = 5,
+};
+#ifndef __cplusplus
+typedef uint16_t C;
+#endif // __cplusplus
+
+enum D
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  d1 = 0,
+  d2 = 2,
+  d3,
+  d4 = 5,
+};
+#ifndef __cplusplus
+typedef uint8_t D;
+#endif // __cplusplus
+
+enum E
+#ifdef __cplusplus
+  : uintptr_t
+#endif // __cplusplus
+ {
+  e1 = 0,
+  e2 = 2,
+  e3,
+  e4 = 5,
+};
+#ifndef __cplusplus
+typedef uintptr_t E;
+#endif // __cplusplus
+
+enum F
+#ifdef __cplusplus
+  : intptr_t
+#endif // __cplusplus
+ {
+  f1 = 0,
+  f2 = 2,
+  f3,
+  f4 = 5,
+};
+#ifndef __cplusplus
+typedef intptr_t F;
+#endif // __cplusplus
+
+enum L {
+  l1,
+  l2,
+  l3,
+  l4,
+};
+
+enum M
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  m1 = -1,
+  m2 = 0,
+  m3 = 1,
+};
+#ifndef __cplusplus
+typedef int8_t M;
+#endif // __cplusplus
+
+enum N {
+  n1,
+  n2,
+  n3,
+  n4,
+};
+
+enum O
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  o1,
+  o2,
+  o3,
+  o4,
+};
+#ifndef __cplusplus
+typedef int8_t O;
+#endif // __cplusplus
+
+struct J;
+
+struct K;
+
+struct Opaque;
+
+enum G_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+  Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t G_Tag;
+#endif // __cplusplus
+
+struct Bar_Body {
+  G_Tag tag;
+  uint8_t x;
+  int16_t y;
+};
+
+union G {
+  G_Tag tag;
+  struct {
+    G_Tag foo_tag;
+    int16_t foo;
+  };
+  struct Bar_Body bar;
+};
+
+enum H_Tag {
+  H_Foo,
+  H_Bar,
+  H_Baz,
+};
+
+struct H_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct H {
+  enum H_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct H_Bar_Body bar;
+  };
+};
+
+enum ExI_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  ExI_Foo,
+  ExI_Bar,
+  ExI_Baz,
+};
+#ifndef __cplusplus
+typedef uint8_t ExI_Tag;
+#endif // __cplusplus
+
+struct ExI_Bar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct ExI {
+  ExI_Tag tag;
+  union {
+    struct {
+      int16_t foo;
+    };
+    struct ExI_Bar_Body bar;
+  };
+};
+
+enum P_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  P0,
+  P1,
+};
+#ifndef __cplusplus
+typedef uint8_t P_Tag;
+#endif // __cplusplus
+
+struct P1_Body {
+  uint8_t _0;
+  uint8_t _1;
+  uint8_t _2;
+};
+
+struct P {
+  P_Tag tag;
+  union {
+    struct {
+      uint8_t p0;
+    };
+    struct P1_Body p1;
+  };
+};
+
+enum Q_Tag {
+  Ok,
+  Err,
+};
+
+struct Q {
+  enum Q_Tag tag;
+  union {
+    struct {
+      uint32_t *ok;
+    };
+    struct {
+      uint32_t err;
+    };
+  };
+};
+
+enum R_Tag {
+  IRFoo,
+  IRBar,
+  IRBaz,
+};
+
+struct IRBar_Body {
+  uint8_t x;
+  int16_t y;
+};
+
+struct R {
+  enum R_Tag tag;
+  union {
+    struct {
+      int16_t IRFoo;
+    };
+    struct IRBar_Body IRBar;
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Opaque *opaque,
+          A a,
+          B b,
+          C c,
+          D d,
+          E e,
+          F f,
+          union G g,
+          struct H h,
+          struct ExI i,
+          struct J j,
+          struct K k,
+          enum L l,
+          M m,
+          enum N n,
+          O o,
+          struct P p,
+          struct Q q,
+          struct R r);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum.tag.pyx b/cbindgen-0.24.5/tests/expectations/enum.tag.pyx
new file mode 100644
index 0000000..a0c9ef0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum.tag.pyx
@@ -0,0 +1,215 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    a1 # = 0,
+    a2 # = 2,
+    a3,
+    a4 # = 5,
+  ctypedef uint64_t A;
+
+  cdef enum:
+    b1 # = 0,
+    b2 # = 2,
+    b3,
+    b4 # = 5,
+  ctypedef uint32_t B;
+
+  cdef enum:
+    c1 # = 0,
+    c2 # = 2,
+    c3,
+    c4 # = 5,
+  ctypedef uint16_t C;
+
+  cdef enum:
+    d1 # = 0,
+    d2 # = 2,
+    d3,
+    d4 # = 5,
+  ctypedef uint8_t D;
+
+  cdef enum:
+    e1 # = 0,
+    e2 # = 2,
+    e3,
+    e4 # = 5,
+  ctypedef uintptr_t E;
+
+  cdef enum:
+    f1 # = 0,
+    f2 # = 2,
+    f3,
+    f4 # = 5,
+  ctypedef intptr_t F;
+
+  cdef enum L:
+    l1,
+    l2,
+    l3,
+    l4,
+
+  cdef enum:
+    m1 # = -1,
+    m2 # = 0,
+    m3 # = 1,
+  ctypedef int8_t M;
+
+  cdef enum N:
+    n1,
+    n2,
+    n3,
+    n4,
+
+  cdef enum:
+    o1,
+    o2,
+    o3,
+    o4,
+  ctypedef int8_t O;
+
+  cdef struct J:
+    pass
+
+  cdef struct K:
+    pass
+
+  cdef struct Opaque:
+    pass
+
+  cdef enum:
+    Foo,
+    Bar,
+    Baz,
+  ctypedef uint8_t G_Tag;
+
+  cdef struct Bar_Body:
+    G_Tag tag;
+    uint8_t x;
+    int16_t y;
+
+  cdef union G:
+    G_Tag tag;
+    int16_t foo;
+    Bar_Body bar;
+
+  cdef enum H_Tag:
+    H_Foo,
+    H_Bar,
+    H_Baz,
+
+  cdef struct H_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct H:
+    H_Tag tag;
+    int16_t foo;
+    H_Bar_Body bar;
+
+  cdef enum:
+    ExI_Foo,
+    ExI_Bar,
+    ExI_Baz,
+  ctypedef uint8_t ExI_Tag;
+
+  cdef struct ExI_Bar_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct ExI:
+    ExI_Tag tag;
+    int16_t foo;
+    ExI_Bar_Body bar;
+
+  cdef enum:
+    P0,
+    P1,
+  ctypedef uint8_t P_Tag;
+
+  cdef struct P1_Body:
+    uint8_t _0;
+    uint8_t _1;
+    uint8_t _2;
+
+  cdef struct P:
+    P_Tag tag;
+    uint8_t p0;
+    P1_Body p1;
+
+  cdef enum Q_Tag:
+    Ok,
+    Err,
+
+  cdef struct Q:
+    Q_Tag tag;
+    uint32_t *ok;
+    uint32_t err;
+
+  cdef enum R_Tag:
+    IRFoo,
+    IRBar,
+    IRBaz,
+
+  cdef struct IRBar_Body:
+    uint8_t x;
+    int16_t y;
+
+  cdef struct R:
+    R_Tag tag;
+    int16_t IRFoo;
+    IRBar_Body IRBar;
+
+  void root(Opaque *opaque,
+            A a,
+            B b,
+            C c,
+            D d,
+            E e,
+            F f,
+            G g,
+            H h,
+            ExI i,
+            J j,
+            K k,
+            L l,
+            M m,
+            N n,
+            O o,
+            P p,
+            Q q,
+            R r);
+
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/enum_discriminant.c b/cbindgen-0.24.5/tests/expectations/enum_discriminant.c
new file mode 100644
index 0000000..181dab1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_discriminant.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOURTY_FOUR 4
+
+enum E {
+  A = 1,
+  B = -1,
+  C = (1 + 2),
+  D = FOURTY_FOUR,
+  F = 5,
+  G = (int8_t)54,
+  H = (int8_t)false,
+};
+typedef int8_t E;
+
+void root(const E*);
diff --git a/cbindgen-0.24.5/tests/expectations/enum_discriminant.compat.c b/cbindgen-0.24.5/tests/expectations/enum_discriminant.compat.c
new file mode 100644
index 0000000..be57fde
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_discriminant.compat.c
@@ -0,0 +1,33 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOURTY_FOUR 4
+
+enum E
+#ifdef __cplusplus
+  : int8_t
+#endif // __cplusplus
+ {
+  A = 1,
+  B = -1,
+  C = (1 + 2),
+  D = FOURTY_FOUR,
+  F = 5,
+  G = (int8_t)54,
+  H = (int8_t)false,
+};
+#ifndef __cplusplus
+typedef int8_t E;
+#endif // __cplusplus
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const E*);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/enum_discriminant.cpp b/cbindgen-0.24.5/tests/expectations/enum_discriminant.cpp
new file mode 100644
index 0000000..8183823
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_discriminant.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const int8_t FOURTY_FOUR = 4;
+
+enum class E : int8_t {
+  A = 1,
+  B = -1,
+  C = (1 + 2),
+  D = FOURTY_FOUR,
+  F = 5,
+  G = (int8_t)54,
+  H = (int8_t)false,
+};
+
+extern "C" {
+
+void root(const E*);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/enum_discriminant.pyx b/cbindgen-0.24.5/tests/expectations/enum_discriminant.pyx
new file mode 100644
index 0000000..6ab1f0e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_discriminant.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int8_t FOURTY_FOUR # = 4
+
+  cdef enum:
+    A # = 1,
+    B # = -1,
+    C # = (1 + 2),
+    D # = FOURTY_FOUR,
+    F # = 5,
+    G # = <int8_t>54,
+    H # = <int8_t>False,
+  ctypedef int8_t E;
+
+  void root(const E*);
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.both.c b/cbindgen-0.24.5/tests/expectations/enum_self.both.c
new file mode 100644
index 0000000..cc66121
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.both.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_Bar {
+  const int32_t *something;
+} Foo_Bar;
+
+enum Bar_Tag {
+  Min,
+  Max,
+  Other,
+};
+typedef uint8_t Bar_Tag;
+
+typedef union Bar {
+  Bar_Tag tag;
+  struct {
+    Bar_Tag min_tag;
+    struct Foo_Bar min;
+  };
+  struct {
+    Bar_Tag max_tag;
+    struct Foo_Bar max;
+  };
+} Bar;
+
+void root(union Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.both.compat.c b/cbindgen-0.24.5/tests/expectations/enum_self.both.compat.c
new file mode 100644
index 0000000..2b17fa5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.both.compat.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_Bar {
+  const int32_t *something;
+} Foo_Bar;
+
+enum Bar_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Min,
+  Max,
+  Other,
+};
+#ifndef __cplusplus
+typedef uint8_t Bar_Tag;
+#endif // __cplusplus
+
+typedef union Bar {
+  Bar_Tag tag;
+  struct {
+    Bar_Tag min_tag;
+    struct Foo_Bar min;
+  };
+  struct {
+    Bar_Tag max_tag;
+    struct Foo_Bar max;
+  };
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(union Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.c b/cbindgen-0.24.5/tests/expectations/enum_self.c
new file mode 100644
index 0000000..e383e76
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *something;
+} Foo_Bar;
+
+enum Bar_Tag {
+  Min,
+  Max,
+  Other,
+};
+typedef uint8_t Bar_Tag;
+
+typedef union {
+  Bar_Tag tag;
+  struct {
+    Bar_Tag min_tag;
+    Foo_Bar min;
+  };
+  struct {
+    Bar_Tag max_tag;
+    Foo_Bar max;
+  };
+} Bar;
+
+void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.compat.c b/cbindgen-0.24.5/tests/expectations/enum_self.compat.c
new file mode 100644
index 0000000..b52e3df
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.compat.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *something;
+} Foo_Bar;
+
+enum Bar_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Min,
+  Max,
+  Other,
+};
+#ifndef __cplusplus
+typedef uint8_t Bar_Tag;
+#endif // __cplusplus
+
+typedef union {
+  Bar_Tag tag;
+  struct {
+    Bar_Tag min_tag;
+    Foo_Bar min;
+  };
+  struct {
+    Bar_Tag max_tag;
+    Foo_Bar max;
+  };
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.cpp b/cbindgen-0.24.5/tests/expectations/enum_self.cpp
new file mode 100644
index 0000000..c25dbeb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.cpp
@@ -0,0 +1,40 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T>
+struct Foo {
+  const int32_t *something;
+};
+
+union Bar {
+  enum class Tag : uint8_t {
+    Min,
+    Max,
+    Other,
+  };
+
+  struct Min_Body {
+    Tag tag;
+    Foo<Bar> _0;
+  };
+
+  struct Max_Body {
+    Tag tag;
+    Foo<Bar> _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Min_Body min;
+  Max_Body max;
+};
+
+extern "C" {
+
+void root(Bar b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.pyx b/cbindgen-0.24.5/tests/expectations/enum_self.pyx
new file mode 100644
index 0000000..556afb9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.pyx
@@ -0,0 +1,23 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo_Bar:
+    const int32_t *something;
+
+  cdef enum:
+    Min,
+    Max,
+    Other,
+  ctypedef uint8_t Bar_Tag;
+
+  ctypedef union Bar:
+    Bar_Tag tag;
+    Foo_Bar min;
+    Foo_Bar max;
+
+  void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.tag.c b/cbindgen-0.24.5/tests/expectations/enum_self.tag.c
new file mode 100644
index 0000000..e093503
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.tag.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_Bar {
+  const int32_t *something;
+};
+
+enum Bar_Tag {
+  Min,
+  Max,
+  Other,
+};
+typedef uint8_t Bar_Tag;
+
+union Bar {
+  Bar_Tag tag;
+  struct {
+    Bar_Tag min_tag;
+    struct Foo_Bar min;
+  };
+  struct {
+    Bar_Tag max_tag;
+    struct Foo_Bar max;
+  };
+};
+
+void root(union Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.tag.compat.c b/cbindgen-0.24.5/tests/expectations/enum_self.tag.compat.c
new file mode 100644
index 0000000..575f3e2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.tag.compat.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_Bar {
+  const int32_t *something;
+};
+
+enum Bar_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Min,
+  Max,
+  Other,
+};
+#ifndef __cplusplus
+typedef uint8_t Bar_Tag;
+#endif // __cplusplus
+
+union Bar {
+  Bar_Tag tag;
+  struct {
+    Bar_Tag min_tag;
+    struct Foo_Bar min;
+  };
+  struct {
+    Bar_Tag max_tag;
+    struct Foo_Bar max;
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(union Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/enum_self.tag.pyx b/cbindgen-0.24.5/tests/expectations/enum_self.tag.pyx
new file mode 100644
index 0000000..5034b86
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/enum_self.tag.pyx
@@ -0,0 +1,23 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo_Bar:
+    const int32_t *something;
+
+  cdef enum:
+    Min,
+    Max,
+    Other,
+  ctypedef uint8_t Bar_Tag;
+
+  cdef union Bar:
+    Bar_Tag tag;
+    Foo_Bar min;
+    Foo_Bar max;
+
+  void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.both.c b/cbindgen-0.24.5/tests/expectations/euclid.both.c
new file mode 100644
index 0000000..a99a951
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.both.c
@@ -0,0 +1,117 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct TypedLength_f32__UnknownUnit {
+  float _0;
+} TypedLength_f32__UnknownUnit;
+
+typedef struct TypedLength_f32__LayoutUnit {
+  float _0;
+} TypedLength_f32__LayoutUnit;
+
+typedef struct TypedLength_f32__UnknownUnit Length_f32;
+
+typedef struct TypedLength_f32__LayoutUnit LayoutLength;
+
+typedef struct TypedSideOffsets2D_f32__UnknownUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__UnknownUnit;
+
+typedef struct TypedSideOffsets2D_f32__LayoutUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__LayoutUnit;
+
+typedef struct TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+typedef struct TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+typedef struct TypedSize2D_f32__UnknownUnit {
+  float width;
+  float height;
+} TypedSize2D_f32__UnknownUnit;
+
+typedef struct TypedSize2D_f32__LayoutUnit {
+  float width;
+  float height;
+} TypedSize2D_f32__LayoutUnit;
+
+typedef struct TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+typedef struct TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+typedef struct TypedPoint2D_f32__UnknownUnit {
+  float x;
+  float y;
+} TypedPoint2D_f32__UnknownUnit;
+
+typedef struct TypedPoint2D_f32__LayoutUnit {
+  float x;
+  float y;
+} TypedPoint2D_f32__LayoutUnit;
+
+typedef struct TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+typedef struct TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+typedef struct TypedRect_f32__UnknownUnit {
+  struct TypedPoint2D_f32__UnknownUnit origin;
+  struct TypedSize2D_f32__UnknownUnit size;
+} TypedRect_f32__UnknownUnit;
+
+typedef struct TypedRect_f32__LayoutUnit {
+  struct TypedPoint2D_f32__LayoutUnit origin;
+  struct TypedSize2D_f32__LayoutUnit size;
+} TypedRect_f32__LayoutUnit;
+
+typedef struct TypedRect_f32__UnknownUnit Rect_f32;
+
+typedef struct TypedRect_f32__LayoutUnit LayoutRect;
+
+typedef struct TypedTransform2D_f32__UnknownUnit__LayoutUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__UnknownUnit__LayoutUnit;
+
+typedef struct TypedTransform2D_f32__LayoutUnit__UnknownUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__LayoutUnit__UnknownUnit;
+
+void root(struct TypedLength_f32__UnknownUnit length_a,
+          struct TypedLength_f32__LayoutUnit length_b,
+          Length_f32 length_c,
+          LayoutLength length_d,
+          struct TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+          struct TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+          SideOffsets2D_f32 side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          struct TypedSize2D_f32__UnknownUnit size_a,
+          struct TypedSize2D_f32__LayoutUnit size_b,
+          Size2D_f32 size_c,
+          LayoutSize2D size_d,
+          struct TypedPoint2D_f32__UnknownUnit point_a,
+          struct TypedPoint2D_f32__LayoutUnit point_b,
+          Point2D_f32 point_c,
+          LayoutPoint2D point_d,
+          struct TypedRect_f32__UnknownUnit rect_a,
+          struct TypedRect_f32__LayoutUnit rect_b,
+          Rect_f32 rect_c,
+          LayoutRect rect_d,
+          struct TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+          struct TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.both.compat.c b/cbindgen-0.24.5/tests/expectations/euclid.both.compat.c
new file mode 100644
index 0000000..e4f9b90
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.both.compat.c
@@ -0,0 +1,125 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct TypedLength_f32__UnknownUnit {
+  float _0;
+} TypedLength_f32__UnknownUnit;
+
+typedef struct TypedLength_f32__LayoutUnit {
+  float _0;
+} TypedLength_f32__LayoutUnit;
+
+typedef struct TypedLength_f32__UnknownUnit Length_f32;
+
+typedef struct TypedLength_f32__LayoutUnit LayoutLength;
+
+typedef struct TypedSideOffsets2D_f32__UnknownUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__UnknownUnit;
+
+typedef struct TypedSideOffsets2D_f32__LayoutUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__LayoutUnit;
+
+typedef struct TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+typedef struct TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+typedef struct TypedSize2D_f32__UnknownUnit {
+  float width;
+  float height;
+} TypedSize2D_f32__UnknownUnit;
+
+typedef struct TypedSize2D_f32__LayoutUnit {
+  float width;
+  float height;
+} TypedSize2D_f32__LayoutUnit;
+
+typedef struct TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+typedef struct TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+typedef struct TypedPoint2D_f32__UnknownUnit {
+  float x;
+  float y;
+} TypedPoint2D_f32__UnknownUnit;
+
+typedef struct TypedPoint2D_f32__LayoutUnit {
+  float x;
+  float y;
+} TypedPoint2D_f32__LayoutUnit;
+
+typedef struct TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+typedef struct TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+typedef struct TypedRect_f32__UnknownUnit {
+  struct TypedPoint2D_f32__UnknownUnit origin;
+  struct TypedSize2D_f32__UnknownUnit size;
+} TypedRect_f32__UnknownUnit;
+
+typedef struct TypedRect_f32__LayoutUnit {
+  struct TypedPoint2D_f32__LayoutUnit origin;
+  struct TypedSize2D_f32__LayoutUnit size;
+} TypedRect_f32__LayoutUnit;
+
+typedef struct TypedRect_f32__UnknownUnit Rect_f32;
+
+typedef struct TypedRect_f32__LayoutUnit LayoutRect;
+
+typedef struct TypedTransform2D_f32__UnknownUnit__LayoutUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__UnknownUnit__LayoutUnit;
+
+typedef struct TypedTransform2D_f32__LayoutUnit__UnknownUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__LayoutUnit__UnknownUnit;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct TypedLength_f32__UnknownUnit length_a,
+          struct TypedLength_f32__LayoutUnit length_b,
+          Length_f32 length_c,
+          LayoutLength length_d,
+          struct TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+          struct TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+          SideOffsets2D_f32 side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          struct TypedSize2D_f32__UnknownUnit size_a,
+          struct TypedSize2D_f32__LayoutUnit size_b,
+          Size2D_f32 size_c,
+          LayoutSize2D size_d,
+          struct TypedPoint2D_f32__UnknownUnit point_a,
+          struct TypedPoint2D_f32__LayoutUnit point_b,
+          Point2D_f32 point_c,
+          LayoutPoint2D point_d,
+          struct TypedRect_f32__UnknownUnit rect_a,
+          struct TypedRect_f32__LayoutUnit rect_b,
+          Rect_f32 rect_c,
+          LayoutRect rect_d,
+          struct TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+          struct TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.c b/cbindgen-0.24.5/tests/expectations/euclid.c
new file mode 100644
index 0000000..40c94cd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.c
@@ -0,0 +1,117 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float _0;
+} TypedLength_f32__UnknownUnit;
+
+typedef struct {
+  float _0;
+} TypedLength_f32__LayoutUnit;
+
+typedef TypedLength_f32__UnknownUnit Length_f32;
+
+typedef TypedLength_f32__LayoutUnit LayoutLength;
+
+typedef struct {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__UnknownUnit;
+
+typedef struct {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__LayoutUnit;
+
+typedef TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+typedef TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+typedef struct {
+  float width;
+  float height;
+} TypedSize2D_f32__UnknownUnit;
+
+typedef struct {
+  float width;
+  float height;
+} TypedSize2D_f32__LayoutUnit;
+
+typedef TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+typedef TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+typedef struct {
+  float x;
+  float y;
+} TypedPoint2D_f32__UnknownUnit;
+
+typedef struct {
+  float x;
+  float y;
+} TypedPoint2D_f32__LayoutUnit;
+
+typedef TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+typedef TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+typedef struct {
+  TypedPoint2D_f32__UnknownUnit origin;
+  TypedSize2D_f32__UnknownUnit size;
+} TypedRect_f32__UnknownUnit;
+
+typedef struct {
+  TypedPoint2D_f32__LayoutUnit origin;
+  TypedSize2D_f32__LayoutUnit size;
+} TypedRect_f32__LayoutUnit;
+
+typedef TypedRect_f32__UnknownUnit Rect_f32;
+
+typedef TypedRect_f32__LayoutUnit LayoutRect;
+
+typedef struct {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__UnknownUnit__LayoutUnit;
+
+typedef struct {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__LayoutUnit__UnknownUnit;
+
+void root(TypedLength_f32__UnknownUnit length_a,
+          TypedLength_f32__LayoutUnit length_b,
+          Length_f32 length_c,
+          LayoutLength length_d,
+          TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+          TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+          SideOffsets2D_f32 side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          TypedSize2D_f32__UnknownUnit size_a,
+          TypedSize2D_f32__LayoutUnit size_b,
+          Size2D_f32 size_c,
+          LayoutSize2D size_d,
+          TypedPoint2D_f32__UnknownUnit point_a,
+          TypedPoint2D_f32__LayoutUnit point_b,
+          Point2D_f32 point_c,
+          LayoutPoint2D point_d,
+          TypedRect_f32__UnknownUnit rect_a,
+          TypedRect_f32__LayoutUnit rect_b,
+          Rect_f32 rect_c,
+          LayoutRect rect_d,
+          TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+          TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.compat.c b/cbindgen-0.24.5/tests/expectations/euclid.compat.c
new file mode 100644
index 0000000..9a261dc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.compat.c
@@ -0,0 +1,125 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float _0;
+} TypedLength_f32__UnknownUnit;
+
+typedef struct {
+  float _0;
+} TypedLength_f32__LayoutUnit;
+
+typedef TypedLength_f32__UnknownUnit Length_f32;
+
+typedef TypedLength_f32__LayoutUnit LayoutLength;
+
+typedef struct {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__UnknownUnit;
+
+typedef struct {
+  float top;
+  float right;
+  float bottom;
+  float left;
+} TypedSideOffsets2D_f32__LayoutUnit;
+
+typedef TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+typedef TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+typedef struct {
+  float width;
+  float height;
+} TypedSize2D_f32__UnknownUnit;
+
+typedef struct {
+  float width;
+  float height;
+} TypedSize2D_f32__LayoutUnit;
+
+typedef TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+typedef TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+typedef struct {
+  float x;
+  float y;
+} TypedPoint2D_f32__UnknownUnit;
+
+typedef struct {
+  float x;
+  float y;
+} TypedPoint2D_f32__LayoutUnit;
+
+typedef TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+typedef TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+typedef struct {
+  TypedPoint2D_f32__UnknownUnit origin;
+  TypedSize2D_f32__UnknownUnit size;
+} TypedRect_f32__UnknownUnit;
+
+typedef struct {
+  TypedPoint2D_f32__LayoutUnit origin;
+  TypedSize2D_f32__LayoutUnit size;
+} TypedRect_f32__LayoutUnit;
+
+typedef TypedRect_f32__UnknownUnit Rect_f32;
+
+typedef TypedRect_f32__LayoutUnit LayoutRect;
+
+typedef struct {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__UnknownUnit__LayoutUnit;
+
+typedef struct {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+} TypedTransform2D_f32__LayoutUnit__UnknownUnit;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(TypedLength_f32__UnknownUnit length_a,
+          TypedLength_f32__LayoutUnit length_b,
+          Length_f32 length_c,
+          LayoutLength length_d,
+          TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+          TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+          SideOffsets2D_f32 side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          TypedSize2D_f32__UnknownUnit size_a,
+          TypedSize2D_f32__LayoutUnit size_b,
+          Size2D_f32 size_c,
+          LayoutSize2D size_d,
+          TypedPoint2D_f32__UnknownUnit point_a,
+          TypedPoint2D_f32__LayoutUnit point_b,
+          Point2D_f32 point_c,
+          LayoutPoint2D point_d,
+          TypedRect_f32__UnknownUnit rect_a,
+          TypedRect_f32__LayoutUnit rect_b,
+          Rect_f32 rect_c,
+          LayoutRect rect_d,
+          TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+          TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.cpp b/cbindgen-0.24.5/tests/expectations/euclid.cpp
new file mode 100644
index 0000000..36c8085
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.cpp
@@ -0,0 +1,102 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct LayoutUnit;
+
+struct UnknownUnit;
+
+template<typename T, typename Unit>
+struct TypedLength {
+  T _0;
+};
+
+template<typename T>
+using Length = TypedLength<T, UnknownUnit>;
+
+using LayoutLength = TypedLength<float, LayoutUnit>;
+
+template<typename T, typename U>
+struct TypedSideOffsets2D {
+  T top;
+  T right;
+  T bottom;
+  T left;
+};
+
+template<typename T>
+using SideOffsets2D = TypedSideOffsets2D<T, UnknownUnit>;
+
+using LayoutSideOffsets2D = TypedSideOffsets2D<float, LayoutUnit>;
+
+template<typename T, typename U>
+struct TypedSize2D {
+  T width;
+  T height;
+};
+
+template<typename T>
+using Size2D = TypedSize2D<T, UnknownUnit>;
+
+using LayoutSize2D = TypedSize2D<float, LayoutUnit>;
+
+template<typename T, typename U>
+struct TypedPoint2D {
+  T x;
+  T y;
+};
+
+template<typename T>
+using Point2D = TypedPoint2D<T, UnknownUnit>;
+
+using LayoutPoint2D = TypedPoint2D<float, LayoutUnit>;
+
+template<typename T, typename U>
+struct TypedRect {
+  TypedPoint2D<T, U> origin;
+  TypedSize2D<T, U> size;
+};
+
+template<typename T>
+using Rect = TypedRect<T, UnknownUnit>;
+
+using LayoutRect = TypedRect<float, LayoutUnit>;
+
+template<typename T, typename Src, typename Dst>
+struct TypedTransform2D {
+  T m11;
+  T m12;
+  T m21;
+  T m22;
+  T m31;
+  T m32;
+};
+
+extern "C" {
+
+void root(TypedLength<float, UnknownUnit> length_a,
+          TypedLength<float, LayoutUnit> length_b,
+          Length<float> length_c,
+          LayoutLength length_d,
+          TypedSideOffsets2D<float, UnknownUnit> side_offsets_a,
+          TypedSideOffsets2D<float, LayoutUnit> side_offsets_b,
+          SideOffsets2D<float> side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          TypedSize2D<float, UnknownUnit> size_a,
+          TypedSize2D<float, LayoutUnit> size_b,
+          Size2D<float> size_c,
+          LayoutSize2D size_d,
+          TypedPoint2D<float, UnknownUnit> point_a,
+          TypedPoint2D<float, LayoutUnit> point_b,
+          Point2D<float> point_c,
+          LayoutPoint2D point_d,
+          TypedRect<float, UnknownUnit> rect_a,
+          TypedRect<float, LayoutUnit> rect_b,
+          Rect<float> rect_c,
+          LayoutRect rect_d,
+          TypedTransform2D<float, UnknownUnit, LayoutUnit> transform_a,
+          TypedTransform2D<float, LayoutUnit, UnknownUnit> transform_b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.pyx b/cbindgen-0.24.5/tests/expectations/euclid.pyx
new file mode 100644
index 0000000..6448584
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.pyx
@@ -0,0 +1,108 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct TypedLength_f32__UnknownUnit:
+    float _0;
+
+  ctypedef struct TypedLength_f32__LayoutUnit:
+    float _0;
+
+  ctypedef TypedLength_f32__UnknownUnit Length_f32;
+
+  ctypedef TypedLength_f32__LayoutUnit LayoutLength;
+
+  ctypedef struct TypedSideOffsets2D_f32__UnknownUnit:
+    float top;
+    float right;
+    float bottom;
+    float left;
+
+  ctypedef struct TypedSideOffsets2D_f32__LayoutUnit:
+    float top;
+    float right;
+    float bottom;
+    float left;
+
+  ctypedef TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+  ctypedef TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+  ctypedef struct TypedSize2D_f32__UnknownUnit:
+    float width;
+    float height;
+
+  ctypedef struct TypedSize2D_f32__LayoutUnit:
+    float width;
+    float height;
+
+  ctypedef TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+  ctypedef TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+  ctypedef struct TypedPoint2D_f32__UnknownUnit:
+    float x;
+    float y;
+
+  ctypedef struct TypedPoint2D_f32__LayoutUnit:
+    float x;
+    float y;
+
+  ctypedef TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+  ctypedef TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+  ctypedef struct TypedRect_f32__UnknownUnit:
+    TypedPoint2D_f32__UnknownUnit origin;
+    TypedSize2D_f32__UnknownUnit size;
+
+  ctypedef struct TypedRect_f32__LayoutUnit:
+    TypedPoint2D_f32__LayoutUnit origin;
+    TypedSize2D_f32__LayoutUnit size;
+
+  ctypedef TypedRect_f32__UnknownUnit Rect_f32;
+
+  ctypedef TypedRect_f32__LayoutUnit LayoutRect;
+
+  ctypedef struct TypedTransform2D_f32__UnknownUnit__LayoutUnit:
+    float m11;
+    float m12;
+    float m21;
+    float m22;
+    float m31;
+    float m32;
+
+  ctypedef struct TypedTransform2D_f32__LayoutUnit__UnknownUnit:
+    float m11;
+    float m12;
+    float m21;
+    float m22;
+    float m31;
+    float m32;
+
+  void root(TypedLength_f32__UnknownUnit length_a,
+            TypedLength_f32__LayoutUnit length_b,
+            Length_f32 length_c,
+            LayoutLength length_d,
+            TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+            TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+            SideOffsets2D_f32 side_offsets_c,
+            LayoutSideOffsets2D side_offsets_d,
+            TypedSize2D_f32__UnknownUnit size_a,
+            TypedSize2D_f32__LayoutUnit size_b,
+            Size2D_f32 size_c,
+            LayoutSize2D size_d,
+            TypedPoint2D_f32__UnknownUnit point_a,
+            TypedPoint2D_f32__LayoutUnit point_b,
+            Point2D_f32 point_c,
+            LayoutPoint2D point_d,
+            TypedRect_f32__UnknownUnit rect_a,
+            TypedRect_f32__LayoutUnit rect_b,
+            Rect_f32 rect_c,
+            LayoutRect rect_d,
+            TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+            TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.tag.c b/cbindgen-0.24.5/tests/expectations/euclid.tag.c
new file mode 100644
index 0000000..5f0e124
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.tag.c
@@ -0,0 +1,117 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct TypedLength_f32__UnknownUnit {
+  float _0;
+};
+
+struct TypedLength_f32__LayoutUnit {
+  float _0;
+};
+
+typedef struct TypedLength_f32__UnknownUnit Length_f32;
+
+typedef struct TypedLength_f32__LayoutUnit LayoutLength;
+
+struct TypedSideOffsets2D_f32__UnknownUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+};
+
+struct TypedSideOffsets2D_f32__LayoutUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+};
+
+typedef struct TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+typedef struct TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+struct TypedSize2D_f32__UnknownUnit {
+  float width;
+  float height;
+};
+
+struct TypedSize2D_f32__LayoutUnit {
+  float width;
+  float height;
+};
+
+typedef struct TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+typedef struct TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+struct TypedPoint2D_f32__UnknownUnit {
+  float x;
+  float y;
+};
+
+struct TypedPoint2D_f32__LayoutUnit {
+  float x;
+  float y;
+};
+
+typedef struct TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+typedef struct TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+struct TypedRect_f32__UnknownUnit {
+  struct TypedPoint2D_f32__UnknownUnit origin;
+  struct TypedSize2D_f32__UnknownUnit size;
+};
+
+struct TypedRect_f32__LayoutUnit {
+  struct TypedPoint2D_f32__LayoutUnit origin;
+  struct TypedSize2D_f32__LayoutUnit size;
+};
+
+typedef struct TypedRect_f32__UnknownUnit Rect_f32;
+
+typedef struct TypedRect_f32__LayoutUnit LayoutRect;
+
+struct TypedTransform2D_f32__UnknownUnit__LayoutUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+};
+
+struct TypedTransform2D_f32__LayoutUnit__UnknownUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+};
+
+void root(struct TypedLength_f32__UnknownUnit length_a,
+          struct TypedLength_f32__LayoutUnit length_b,
+          Length_f32 length_c,
+          LayoutLength length_d,
+          struct TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+          struct TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+          SideOffsets2D_f32 side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          struct TypedSize2D_f32__UnknownUnit size_a,
+          struct TypedSize2D_f32__LayoutUnit size_b,
+          Size2D_f32 size_c,
+          LayoutSize2D size_d,
+          struct TypedPoint2D_f32__UnknownUnit point_a,
+          struct TypedPoint2D_f32__LayoutUnit point_b,
+          Point2D_f32 point_c,
+          LayoutPoint2D point_d,
+          struct TypedRect_f32__UnknownUnit rect_a,
+          struct TypedRect_f32__LayoutUnit rect_b,
+          Rect_f32 rect_c,
+          LayoutRect rect_d,
+          struct TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+          struct TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.tag.compat.c b/cbindgen-0.24.5/tests/expectations/euclid.tag.compat.c
new file mode 100644
index 0000000..61f6c04
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.tag.compat.c
@@ -0,0 +1,125 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct TypedLength_f32__UnknownUnit {
+  float _0;
+};
+
+struct TypedLength_f32__LayoutUnit {
+  float _0;
+};
+
+typedef struct TypedLength_f32__UnknownUnit Length_f32;
+
+typedef struct TypedLength_f32__LayoutUnit LayoutLength;
+
+struct TypedSideOffsets2D_f32__UnknownUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+};
+
+struct TypedSideOffsets2D_f32__LayoutUnit {
+  float top;
+  float right;
+  float bottom;
+  float left;
+};
+
+typedef struct TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+typedef struct TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+struct TypedSize2D_f32__UnknownUnit {
+  float width;
+  float height;
+};
+
+struct TypedSize2D_f32__LayoutUnit {
+  float width;
+  float height;
+};
+
+typedef struct TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+typedef struct TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+struct TypedPoint2D_f32__UnknownUnit {
+  float x;
+  float y;
+};
+
+struct TypedPoint2D_f32__LayoutUnit {
+  float x;
+  float y;
+};
+
+typedef struct TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+typedef struct TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+struct TypedRect_f32__UnknownUnit {
+  struct TypedPoint2D_f32__UnknownUnit origin;
+  struct TypedSize2D_f32__UnknownUnit size;
+};
+
+struct TypedRect_f32__LayoutUnit {
+  struct TypedPoint2D_f32__LayoutUnit origin;
+  struct TypedSize2D_f32__LayoutUnit size;
+};
+
+typedef struct TypedRect_f32__UnknownUnit Rect_f32;
+
+typedef struct TypedRect_f32__LayoutUnit LayoutRect;
+
+struct TypedTransform2D_f32__UnknownUnit__LayoutUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+};
+
+struct TypedTransform2D_f32__LayoutUnit__UnknownUnit {
+  float m11;
+  float m12;
+  float m21;
+  float m22;
+  float m31;
+  float m32;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct TypedLength_f32__UnknownUnit length_a,
+          struct TypedLength_f32__LayoutUnit length_b,
+          Length_f32 length_c,
+          LayoutLength length_d,
+          struct TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+          struct TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+          SideOffsets2D_f32 side_offsets_c,
+          LayoutSideOffsets2D side_offsets_d,
+          struct TypedSize2D_f32__UnknownUnit size_a,
+          struct TypedSize2D_f32__LayoutUnit size_b,
+          Size2D_f32 size_c,
+          LayoutSize2D size_d,
+          struct TypedPoint2D_f32__UnknownUnit point_a,
+          struct TypedPoint2D_f32__LayoutUnit point_b,
+          Point2D_f32 point_c,
+          LayoutPoint2D point_d,
+          struct TypedRect_f32__UnknownUnit rect_a,
+          struct TypedRect_f32__LayoutUnit rect_b,
+          Rect_f32 rect_c,
+          LayoutRect rect_d,
+          struct TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+          struct TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/euclid.tag.pyx b/cbindgen-0.24.5/tests/expectations/euclid.tag.pyx
new file mode 100644
index 0000000..ed420a4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/euclid.tag.pyx
@@ -0,0 +1,108 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct TypedLength_f32__UnknownUnit:
+    float _0;
+
+  cdef struct TypedLength_f32__LayoutUnit:
+    float _0;
+
+  ctypedef TypedLength_f32__UnknownUnit Length_f32;
+
+  ctypedef TypedLength_f32__LayoutUnit LayoutLength;
+
+  cdef struct TypedSideOffsets2D_f32__UnknownUnit:
+    float top;
+    float right;
+    float bottom;
+    float left;
+
+  cdef struct TypedSideOffsets2D_f32__LayoutUnit:
+    float top;
+    float right;
+    float bottom;
+    float left;
+
+  ctypedef TypedSideOffsets2D_f32__UnknownUnit SideOffsets2D_f32;
+
+  ctypedef TypedSideOffsets2D_f32__LayoutUnit LayoutSideOffsets2D;
+
+  cdef struct TypedSize2D_f32__UnknownUnit:
+    float width;
+    float height;
+
+  cdef struct TypedSize2D_f32__LayoutUnit:
+    float width;
+    float height;
+
+  ctypedef TypedSize2D_f32__UnknownUnit Size2D_f32;
+
+  ctypedef TypedSize2D_f32__LayoutUnit LayoutSize2D;
+
+  cdef struct TypedPoint2D_f32__UnknownUnit:
+    float x;
+    float y;
+
+  cdef struct TypedPoint2D_f32__LayoutUnit:
+    float x;
+    float y;
+
+  ctypedef TypedPoint2D_f32__UnknownUnit Point2D_f32;
+
+  ctypedef TypedPoint2D_f32__LayoutUnit LayoutPoint2D;
+
+  cdef struct TypedRect_f32__UnknownUnit:
+    TypedPoint2D_f32__UnknownUnit origin;
+    TypedSize2D_f32__UnknownUnit size;
+
+  cdef struct TypedRect_f32__LayoutUnit:
+    TypedPoint2D_f32__LayoutUnit origin;
+    TypedSize2D_f32__LayoutUnit size;
+
+  ctypedef TypedRect_f32__UnknownUnit Rect_f32;
+
+  ctypedef TypedRect_f32__LayoutUnit LayoutRect;
+
+  cdef struct TypedTransform2D_f32__UnknownUnit__LayoutUnit:
+    float m11;
+    float m12;
+    float m21;
+    float m22;
+    float m31;
+    float m32;
+
+  cdef struct TypedTransform2D_f32__LayoutUnit__UnknownUnit:
+    float m11;
+    float m12;
+    float m21;
+    float m22;
+    float m31;
+    float m32;
+
+  void root(TypedLength_f32__UnknownUnit length_a,
+            TypedLength_f32__LayoutUnit length_b,
+            Length_f32 length_c,
+            LayoutLength length_d,
+            TypedSideOffsets2D_f32__UnknownUnit side_offsets_a,
+            TypedSideOffsets2D_f32__LayoutUnit side_offsets_b,
+            SideOffsets2D_f32 side_offsets_c,
+            LayoutSideOffsets2D side_offsets_d,
+            TypedSize2D_f32__UnknownUnit size_a,
+            TypedSize2D_f32__LayoutUnit size_b,
+            Size2D_f32 size_c,
+            LayoutSize2D size_d,
+            TypedPoint2D_f32__UnknownUnit point_a,
+            TypedPoint2D_f32__LayoutUnit point_b,
+            Point2D_f32 point_c,
+            LayoutPoint2D point_d,
+            TypedRect_f32__UnknownUnit rect_a,
+            TypedRect_f32__LayoutUnit rect_b,
+            Rect_f32 rect_c,
+            LayoutRect rect_d,
+            TypedTransform2D_f32__UnknownUnit__LayoutUnit transform_a,
+            TypedTransform2D_f32__LayoutUnit__UnknownUnit transform_b);
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.both.c b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.both.c
new file mode 100644
index 0000000..09b5455
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.both.c
@@ -0,0 +1,28 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar {
+  Option_Foo foo;
+} Bar;
+
+void root(struct Bar f);
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.both.compat.c b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.both.compat.c
new file mode 100644
index 0000000..3c1037e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.both.compat.c
@@ -0,0 +1,36 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar {
+  Option_Foo foo;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Bar f);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.c b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.c
new file mode 100644
index 0000000..a593dd7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.c
@@ -0,0 +1,28 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  Option_Foo foo;
+} Bar;
+
+void root(Bar f);
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.compat.c b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.compat.c
new file mode 100644
index 0000000..5c10d43
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.compat.c
@@ -0,0 +1,36 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  Option_Foo foo;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Bar f);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.cpp b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.cpp
new file mode 100644
index 0000000..09b5455
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.cpp
@@ -0,0 +1,28 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar {
+  Option_Foo foo;
+} Bar;
+
+void root(struct Bar f);
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.pyx b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.pyx
new file mode 100644
index 0000000..48cd1e2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.pyx
@@ -0,0 +1,30 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Bar:
+    Option_Foo foo;
+
+  void root(Bar f);
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.c b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.c
new file mode 100644
index 0000000..116a170
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.c
@@ -0,0 +1,28 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar {
+  Option_Foo foo;
+};
+
+void root(struct Bar f);
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.compat.c b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.compat.c
new file mode 100644
index 0000000..fa8e3a1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.compat.c
@@ -0,0 +1,36 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar {
+  Option_Foo foo;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Bar f);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.pyx b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.pyx
new file mode 100644
index 0000000..934536f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/exclude_generic_monomorph.tag.pyx
@@ -0,0 +1,30 @@
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Bar:
+    Option_Foo foo;
+
+  void root(Bar f);
diff --git a/cbindgen-0.24.5/tests/expectations/expand.both.c b/cbindgen-0.24.5/tests/expectations/expand.both.c
new file mode 100644
index 0000000..7c7e0c9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.both.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand.both.compat.c b/cbindgen-0.24.5/tests/expectations/expand.both.compat.c
new file mode 100644
index 0000000..5a235ae
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.both.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand.c b/cbindgen-0.24.5/tests/expectations/expand.c
new file mode 100644
index 0000000..c1a9aeb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand.compat.c b/cbindgen-0.24.5/tests/expectations/expand.compat.c
new file mode 100644
index 0000000..173a130
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand.cpp b/cbindgen-0.24.5/tests/expectations/expand.cpp
new file mode 100644
index 0000000..da67d07
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+
+};
+
+extern "C" {
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/expand.pyx b/cbindgen-0.24.5/tests/expectations/expand.pyx
new file mode 100644
index 0000000..9543018
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    pass
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand.tag.c b/cbindgen-0.24.5/tests/expectations/expand.tag.c
new file mode 100644
index 0000000..96ededa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.tag.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand.tag.compat.c b/cbindgen-0.24.5/tests/expectations/expand.tag.compat.c
new file mode 100644
index 0000000..144f9d2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.tag.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand.tag.pyx b/cbindgen-0.24.5/tests/expectations/expand.tag.pyx
new file mode 100644
index 0000000..977a424
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand.tag.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    pass
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.both.c b/cbindgen-0.24.5/tests/expectations/expand_default_features.both.c
new file mode 100644
index 0000000..7029413
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.both.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+void extra_debug_fn(void);
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.both.compat.c b/cbindgen-0.24.5/tests/expectations/expand_default_features.both.compat.c
new file mode 100644
index 0000000..ce7318c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void extra_debug_fn(void);
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.c b/cbindgen-0.24.5/tests/expectations/expand_default_features.c
new file mode 100644
index 0000000..d55c8eb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+void extra_debug_fn(void);
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.compat.c b/cbindgen-0.24.5/tests/expectations/expand_default_features.compat.c
new file mode 100644
index 0000000..a35c097
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void extra_debug_fn(void);
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.cpp b/cbindgen-0.24.5/tests/expectations/expand_default_features.cpp
new file mode 100644
index 0000000..57b6e2c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+
+};
+
+extern "C" {
+
+void extra_debug_fn();
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.pyx b/cbindgen-0.24.5/tests/expectations/expand_default_features.pyx
new file mode 100644
index 0000000..e7c0dbb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    pass
+
+  void extra_debug_fn();
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.c b/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.c
new file mode 100644
index 0000000..d9d10b5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+void extra_debug_fn(void);
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.compat.c b/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.compat.c
new file mode 100644
index 0000000..8180ac6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void extra_debug_fn(void);
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.pyx b/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.pyx
new file mode 100644
index 0000000..0699dbc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_default_features.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    pass
+
+  void extra_debug_fn();
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.both.c b/cbindgen-0.24.5/tests/expectations/expand_dep.both.c
new file mode 100644
index 0000000..9a91a4f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct dep_struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+uint32_t get_x(const struct dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.both.compat.c b/cbindgen-0.24.5/tests/expectations/expand_dep.both.compat.c
new file mode 100644
index 0000000..9cd14e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct dep_struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const struct dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.c b/cbindgen-0.24.5/tests/expectations/expand_dep.c
new file mode 100644
index 0000000..3d2cf8e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.compat.c b/cbindgen-0.24.5/tests/expectations/expand_dep.compat.c
new file mode 100644
index 0000000..4dc7fb3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.cpp b/cbindgen-0.24.5/tests/expectations/expand_dep.cpp
new file mode 100644
index 0000000..914b798
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+extern "C" {
+
+uint32_t get_x(const dep_struct *dep_struct);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.pyx b/cbindgen-0.24.5/tests/expectations/expand_dep.pyx
new file mode 100644
index 0000000..038a566
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct dep_struct:
+    uint32_t x;
+    double y;
+
+  uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.tag.c b/cbindgen-0.24.5/tests/expectations/expand_dep.tag.c
new file mode 100644
index 0000000..45fcba6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+uint32_t get_x(const struct dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.tag.compat.c b/cbindgen-0.24.5/tests/expectations/expand_dep.tag.compat.c
new file mode 100644
index 0000000..344af64
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const struct dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep.tag.pyx b/cbindgen-0.24.5/tests/expectations/expand_dep.tag.pyx
new file mode 100644
index 0000000..74d296b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct dep_struct:
+    uint32_t x;
+    double y;
+
+  uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.both.c b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.both.c
new file mode 100644
index 0000000..9a91a4f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct dep_struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+uint32_t get_x(const struct dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.both.compat.c b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.both.compat.c
new file mode 100644
index 0000000..9cd14e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct dep_struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const struct dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.c b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.c
new file mode 100644
index 0000000..3d2cf8e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.compat.c b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.compat.c
new file mode 100644
index 0000000..4dc7fb3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t x;
+  double y;
+} dep_struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.cpp b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.cpp
new file mode 100644
index 0000000..914b798
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+extern "C" {
+
+uint32_t get_x(const dep_struct *dep_struct);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.pyx b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.pyx
new file mode 100644
index 0000000..038a566
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct dep_struct:
+    uint32_t x;
+    double y;
+
+  uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.c b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.c
new file mode 100644
index 0000000..45fcba6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+uint32_t get_x(const struct dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.compat.c b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.compat.c
new file mode 100644
index 0000000..344af64
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct dep_struct {
+  uint32_t x;
+  double y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+uint32_t get_x(const struct dep_struct *dep_struct);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.pyx b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.pyx
new file mode 100644
index 0000000..74d296b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_dep_v2.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct dep_struct:
+    uint32_t x;
+    double y;
+
+  uint32_t get_x(const dep_struct *dep_struct);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.both.c b/cbindgen-0.24.5/tests/expectations/expand_features.both.c
new file mode 100644
index 0000000..210c897
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+void extra_debug_fn(void);
+
+void cbindgen(void);
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.both.compat.c b/cbindgen-0.24.5/tests/expectations/expand_features.both.compat.c
new file mode 100644
index 0000000..e3ef2a6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.both.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void extra_debug_fn(void);
+
+void cbindgen(void);
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.c b/cbindgen-0.24.5/tests/expectations/expand_features.c
new file mode 100644
index 0000000..e0a440c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+void extra_debug_fn(void);
+
+void cbindgen(void);
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.compat.c b/cbindgen-0.24.5/tests/expectations/expand_features.compat.c
new file mode 100644
index 0000000..b65adc0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void extra_debug_fn(void);
+
+void cbindgen(void);
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.cpp b/cbindgen-0.24.5/tests/expectations/expand_features.cpp
new file mode 100644
index 0000000..9174b12
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.cpp
@@ -0,0 +1,19 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+
+};
+
+extern "C" {
+
+void extra_debug_fn();
+
+void cbindgen();
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.pyx b/cbindgen-0.24.5/tests/expectations/expand_features.pyx
new file mode 100644
index 0000000..e04531c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    pass
+
+  void extra_debug_fn();
+
+  void cbindgen();
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.tag.c b/cbindgen-0.24.5/tests/expectations/expand_features.tag.c
new file mode 100644
index 0000000..e04b151
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+void extra_debug_fn(void);
+
+void cbindgen(void);
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.tag.compat.c b/cbindgen-0.24.5/tests/expectations/expand_features.tag.compat.c
new file mode 100644
index 0000000..ee9d430
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.tag.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void extra_debug_fn(void);
+
+void cbindgen(void);
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_features.tag.pyx b/cbindgen-0.24.5/tests/expectations/expand_features.tag.pyx
new file mode 100644
index 0000000..e1adc67
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_features.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    pass
+
+  void extra_debug_fn();
+
+  void cbindgen();
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.both.c b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.both.c
new file mode 100644
index 0000000..7c7e0c9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.both.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.both.compat.c b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.both.compat.c
new file mode 100644
index 0000000..5a235ae
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.both.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.c b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.c
new file mode 100644
index 0000000..c1a9aeb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.compat.c b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.compat.c
new file mode 100644
index 0000000..173a130
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.cpp b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.cpp
new file mode 100644
index 0000000..da67d07
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+
+};
+
+extern "C" {
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.pyx b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.pyx
new file mode 100644
index 0000000..9543018
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    pass
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.c b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.c
new file mode 100644
index 0000000..96ededa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.compat.c b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.compat.c
new file mode 100644
index 0000000..144f9d2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.pyx b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.pyx
new file mode 100644
index 0000000..977a424
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/expand_no_default_features.tag.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    pass
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/export_name.c b/cbindgen-0.24.5/tests/expectations/export_name.c
new file mode 100644
index 0000000..5ec561e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/export_name.c
@@ -0,0 +1,6 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void do_the_thing_with_export_name(void);
diff --git a/cbindgen-0.24.5/tests/expectations/export_name.compat.c b/cbindgen-0.24.5/tests/expectations/export_name.compat.c
new file mode 100644
index 0000000..16e7c09
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/export_name.compat.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void do_the_thing_with_export_name(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/export_name.cpp b/cbindgen-0.24.5/tests/expectations/export_name.cpp
new file mode 100644
index 0000000..0182905
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/export_name.cpp
@@ -0,0 +1,11 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void do_the_thing_with_export_name();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/export_name.pyx b/cbindgen-0.24.5/tests/expectations/export_name.pyx
new file mode 100644
index 0000000..5fb9644
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/export_name.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void do_the_thing_with_export_name();
diff --git a/cbindgen-0.24.5/tests/expectations/extern.both.c b/cbindgen-0.24.5/tests/expectations/extern.both.c
new file mode 100644
index 0000000..026661a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.both.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Normal {
+  int32_t x;
+  float y;
+} Normal;
+
+extern int32_t foo(void);
+
+extern void bar(struct Normal a);
diff --git a/cbindgen-0.24.5/tests/expectations/extern.both.compat.c b/cbindgen-0.24.5/tests/expectations/extern.both.compat.c
new file mode 100644
index 0000000..3c49da3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.both.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Normal {
+  int32_t x;
+  float y;
+} Normal;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern int32_t foo(void);
+
+extern void bar(struct Normal a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/extern.c b/cbindgen-0.24.5/tests/expectations/extern.c
new file mode 100644
index 0000000..6fe9f5b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} Normal;
+
+extern int32_t foo(void);
+
+extern void bar(Normal a);
diff --git a/cbindgen-0.24.5/tests/expectations/extern.compat.c b/cbindgen-0.24.5/tests/expectations/extern.compat.c
new file mode 100644
index 0000000..4f4129a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} Normal;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern int32_t foo(void);
+
+extern void bar(Normal a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/extern.cpp b/cbindgen-0.24.5/tests/expectations/extern.cpp
new file mode 100644
index 0000000..15294c0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.cpp
@@ -0,0 +1,18 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Normal {
+  int32_t x;
+  float y;
+};
+
+extern "C" {
+
+extern int32_t foo();
+
+extern void bar(Normal a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/extern.pyx b/cbindgen-0.24.5/tests/expectations/extern.pyx
new file mode 100644
index 0000000..dca17ac
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Normal:
+    int32_t x;
+    float y;
+
+  extern int32_t foo();
+
+  extern void bar(Normal a);
diff --git a/cbindgen-0.24.5/tests/expectations/extern.tag.c b/cbindgen-0.24.5/tests/expectations/extern.tag.c
new file mode 100644
index 0000000..5a88d1a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.tag.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Normal {
+  int32_t x;
+  float y;
+};
+
+extern int32_t foo(void);
+
+extern void bar(struct Normal a);
diff --git a/cbindgen-0.24.5/tests/expectations/extern.tag.compat.c b/cbindgen-0.24.5/tests/expectations/extern.tag.compat.c
new file mode 100644
index 0000000..3ca1625
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.tag.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Normal {
+  int32_t x;
+  float y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern int32_t foo(void);
+
+extern void bar(struct Normal a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/extern.tag.pyx b/cbindgen-0.24.5/tests/expectations/extern.tag.pyx
new file mode 100644
index 0000000..9cb7214
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern.tag.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Normal:
+    int32_t x;
+    float y;
+
+  extern int32_t foo();
+
+  extern void bar(Normal a);
diff --git a/cbindgen-0.24.5/tests/expectations/extern_2.c b/cbindgen-0.24.5/tests/expectations/extern_2.c
new file mode 100644
index 0000000..c54b519
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern_2.c
@@ -0,0 +1,8 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void first(void);
+
+void second(void);
diff --git a/cbindgen-0.24.5/tests/expectations/extern_2.compat.c b/cbindgen-0.24.5/tests/expectations/extern_2.compat.c
new file mode 100644
index 0000000..53851b3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern_2.compat.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void first(void);
+
+void second(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/extern_2.cpp b/cbindgen-0.24.5/tests/expectations/extern_2.cpp
new file mode 100644
index 0000000..511aa42
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern_2.cpp
@@ -0,0 +1,13 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void first();
+
+void second();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/extern_2.pyx b/cbindgen-0.24.5/tests/expectations/extern_2.pyx
new file mode 100644
index 0000000..bea4ede
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/extern_2.pyx
@@ -0,0 +1,11 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void first();
+
+  void second();
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.both.c b/cbindgen-0.24.5/tests/expectations/external_workspace_child.both.c
new file mode 100644
index 0000000..57bedaa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.both.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct ExtType {
+  uint32_t data;
+} ExtType;
+
+void consume_ext(struct ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.both.compat.c b/cbindgen-0.24.5/tests/expectations/external_workspace_child.both.compat.c
new file mode 100644
index 0000000..1bc8b14
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.both.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct ExtType {
+  uint32_t data;
+} ExtType;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void consume_ext(struct ExtType _ext);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.c b/cbindgen-0.24.5/tests/expectations/external_workspace_child.c
new file mode 100644
index 0000000..04b65dc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t data;
+} ExtType;
+
+void consume_ext(ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.compat.c b/cbindgen-0.24.5/tests/expectations/external_workspace_child.compat.c
new file mode 100644
index 0000000..1529006
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint32_t data;
+} ExtType;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void consume_ext(ExtType _ext);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.cpp b/cbindgen-0.24.5/tests/expectations/external_workspace_child.cpp
new file mode 100644
index 0000000..79e14c0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct ExtType {
+  uint32_t data;
+};
+
+extern "C" {
+
+void consume_ext(ExtType _ext);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.pyx b/cbindgen-0.24.5/tests/expectations/external_workspace_child.pyx
new file mode 100644
index 0000000..d42b68a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct ExtType:
+    uint32_t data;
+
+  void consume_ext(ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.c b/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.c
new file mode 100644
index 0000000..ad7ad56
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct ExtType {
+  uint32_t data;
+};
+
+void consume_ext(struct ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.compat.c b/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.compat.c
new file mode 100644
index 0000000..1591a0a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct ExtType {
+  uint32_t data;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void consume_ext(struct ExtType _ext);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.pyx b/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.pyx
new file mode 100644
index 0000000..6850ae3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/external_workspace_child.tag.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct ExtType:
+    uint32_t data;
+
+  void consume_ext(ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/fns.both.c b/cbindgen-0.24.5/tests/expectations/fns.both.c
new file mode 100644
index 0000000..fcd5116
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.both.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Fns {
+  void (*noArgs)(void);
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)(void);
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+} Fns;
+
+void root(struct Fns _fns);
+
+void no_return(void);
diff --git a/cbindgen-0.24.5/tests/expectations/fns.both.compat.c b/cbindgen-0.24.5/tests/expectations/fns.both.compat.c
new file mode 100644
index 0000000..16c9ee6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.both.compat.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Fns {
+  void (*noArgs)(void);
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)(void);
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+} Fns;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Fns _fns);
+
+void no_return(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/fns.c b/cbindgen-0.24.5/tests/expectations/fns.c
new file mode 100644
index 0000000..e1910f8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  void (*noArgs)(void);
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)(void);
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+} Fns;
+
+void root(Fns _fns);
+
+void no_return(void);
diff --git a/cbindgen-0.24.5/tests/expectations/fns.compat.c b/cbindgen-0.24.5/tests/expectations/fns.compat.c
new file mode 100644
index 0000000..f61419c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.compat.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  void (*noArgs)(void);
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)(void);
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+} Fns;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Fns _fns);
+
+void no_return(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/fns.cpp b/cbindgen-0.24.5/tests/expectations/fns.cpp
new file mode 100644
index 0000000..1e52496
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Fns {
+  void (*noArgs)();
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)();
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+};
+
+extern "C" {
+
+void root(Fns _fns);
+
+void no_return();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/fns.pyx b/cbindgen-0.24.5/tests/expectations/fns.pyx
new file mode 100644
index 0000000..5caad22
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.pyx
@@ -0,0 +1,18 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Fns:
+    void (*noArgs)();
+    void (*anonymousArg)(int32_t);
+    int32_t (*returnsNumber)();
+    int8_t (*namedArgs)(int32_t first, int16_t snd);
+    int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+
+  void root(Fns _fns);
+
+  void no_return();
diff --git a/cbindgen-0.24.5/tests/expectations/fns.tag.c b/cbindgen-0.24.5/tests/expectations/fns.tag.c
new file mode 100644
index 0000000..759080f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.tag.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Fns {
+  void (*noArgs)(void);
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)(void);
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+};
+
+void root(struct Fns _fns);
+
+void no_return(void);
diff --git a/cbindgen-0.24.5/tests/expectations/fns.tag.compat.c b/cbindgen-0.24.5/tests/expectations/fns.tag.compat.c
new file mode 100644
index 0000000..84efce6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.tag.compat.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Fns {
+  void (*noArgs)(void);
+  void (*anonymousArg)(int32_t);
+  int32_t (*returnsNumber)(void);
+  int8_t (*namedArgs)(int32_t first, int16_t snd);
+  int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Fns _fns);
+
+void no_return(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/fns.tag.pyx b/cbindgen-0.24.5/tests/expectations/fns.tag.pyx
new file mode 100644
index 0000000..127da71
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/fns.tag.pyx
@@ -0,0 +1,18 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Fns:
+    void (*noArgs)();
+    void (*anonymousArg)(int32_t);
+    int32_t (*returnsNumber)();
+    int8_t (*namedArgs)(int32_t first, int16_t snd);
+    int8_t (*namedArgsWildcards)(int32_t _, int16_t named, int64_t _1);
+
+  void root(Fns _fns);
+
+  void no_return();
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.both.c b/cbindgen-0.24.5/tests/expectations/forward_declaration.both.c
new file mode 100644
index 0000000..9e88bab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.both.c
@@ -0,0 +1,50 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StructInfo {
+  const struct TypeInfo *const *fields;
+  uintptr_t num_fields;
+} StructInfo;
+
+typedef enum TypeData_Tag {
+  Primitive,
+  Struct,
+} TypeData_Tag;
+
+typedef struct TypeData {
+  TypeData_Tag tag;
+  union {
+    struct {
+      struct StructInfo struct_;
+    };
+  };
+} TypeData;
+
+typedef struct TypeInfo {
+  struct TypeData data;
+} TypeInfo;
+
+void root(struct TypeInfo x);
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.both.compat.c b/cbindgen-0.24.5/tests/expectations/forward_declaration.both.compat.c
new file mode 100644
index 0000000..0cdbd6d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.both.compat.c
@@ -0,0 +1,58 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StructInfo {
+  const struct TypeInfo *const *fields;
+  uintptr_t num_fields;
+} StructInfo;
+
+typedef enum TypeData_Tag {
+  Primitive,
+  Struct,
+} TypeData_Tag;
+
+typedef struct TypeData {
+  TypeData_Tag tag;
+  union {
+    struct {
+      struct StructInfo struct_;
+    };
+  };
+} TypeData;
+
+typedef struct TypeInfo {
+  struct TypeData data;
+} TypeInfo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct TypeInfo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.c b/cbindgen-0.24.5/tests/expectations/forward_declaration.c
new file mode 100644
index 0000000..f77076d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.c
@@ -0,0 +1,50 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const TypeInfo *const *fields;
+  uintptr_t num_fields;
+} StructInfo;
+
+typedef enum {
+  Primitive,
+  Struct,
+} TypeData_Tag;
+
+typedef struct {
+  TypeData_Tag tag;
+  union {
+    struct {
+      StructInfo struct_;
+    };
+  };
+} TypeData;
+
+typedef struct {
+  TypeData data;
+} TypeInfo;
+
+void root(TypeInfo x);
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.compat.c b/cbindgen-0.24.5/tests/expectations/forward_declaration.compat.c
new file mode 100644
index 0000000..c45679a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.compat.c
@@ -0,0 +1,58 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const TypeInfo *const *fields;
+  uintptr_t num_fields;
+} StructInfo;
+
+typedef enum {
+  Primitive,
+  Struct,
+} TypeData_Tag;
+
+typedef struct {
+  TypeData_Tag tag;
+  union {
+    struct {
+      StructInfo struct_;
+    };
+  };
+} TypeData;
+
+typedef struct {
+  TypeData data;
+} TypeInfo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(TypeInfo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.cpp b/cbindgen-0.24.5/tests/expectations/forward_declaration.cpp
new file mode 100644
index 0000000..2d1dfcb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.cpp
@@ -0,0 +1,57 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct StructInfo {
+  const TypeInfo *const *fields;
+  uintptr_t num_fields;
+};
+
+struct TypeData {
+  enum class Tag {
+    Primitive,
+    Struct,
+  };
+
+  struct Struct_Body {
+    StructInfo _0;
+  };
+
+  Tag tag;
+  union {
+    Struct_Body struct_;
+  };
+};
+
+struct TypeInfo {
+  TypeData data;
+};
+
+extern "C" {
+
+void root(TypeInfo x);
+
+} // extern "C"
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.pyx b/cbindgen-0.24.5/tests/expectations/forward_declaration.pyx
new file mode 100644
index 0000000..451852e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.pyx
@@ -0,0 +1,45 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct StructInfo:
+    const TypeInfo *const *fields;
+    uintptr_t num_fields;
+
+  ctypedef enum TypeData_Tag:
+    Primitive,
+    Struct,
+
+  ctypedef struct TypeData:
+    TypeData_Tag tag;
+    StructInfo struct_;
+
+  ctypedef struct TypeInfo:
+    TypeData data;
+
+  void root(TypeInfo x);
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.c b/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.c
new file mode 100644
index 0000000..acd8204
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.c
@@ -0,0 +1,50 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct StructInfo {
+  const struct TypeInfo *const *fields;
+  uintptr_t num_fields;
+};
+
+enum TypeData_Tag {
+  Primitive,
+  Struct,
+};
+
+struct TypeData {
+  enum TypeData_Tag tag;
+  union {
+    struct {
+      struct StructInfo struct_;
+    };
+  };
+};
+
+struct TypeInfo {
+  struct TypeData data;
+};
+
+void root(struct TypeInfo x);
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.compat.c b/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.compat.c
new file mode 100644
index 0000000..f9c2249
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.compat.c
@@ -0,0 +1,58 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct StructInfo {
+  const struct TypeInfo *const *fields;
+  uintptr_t num_fields;
+};
+
+enum TypeData_Tag {
+  Primitive,
+  Struct,
+};
+
+struct TypeData {
+  enum TypeData_Tag tag;
+  union {
+    struct {
+      struct StructInfo struct_;
+    };
+  };
+};
+
+struct TypeInfo {
+  struct TypeData data;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct TypeInfo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.pyx b/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.pyx
new file mode 100644
index 0000000..af110c2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/forward_declaration.tag.pyx
@@ -0,0 +1,45 @@
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct StructInfo:
+    const TypeInfo *const *fields;
+    uintptr_t num_fields;
+
+  cdef enum TypeData_Tag:
+    Primitive,
+    Struct,
+
+  cdef struct TypeData:
+    TypeData_Tag tag;
+    StructInfo struct_;
+
+  cdef struct TypeInfo:
+    TypeData data;
+
+  void root(TypeInfo x);
+
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/function_args.c b/cbindgen-0.24.5/tests/expectations/function_args.c
new file mode 100644
index 0000000..ce46f98
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_args.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void unnamed(const uint64_t*);
+
+void pointer_test(const uint64_t *a);
+
+void print_from_rust(void);
diff --git a/cbindgen-0.24.5/tests/expectations/function_args.compat.c b/cbindgen-0.24.5/tests/expectations/function_args.compat.c
new file mode 100644
index 0000000..7f9f24b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_args.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void unnamed(const uint64_t*);
+
+void pointer_test(const uint64_t *a);
+
+void print_from_rust(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_args.cpp b/cbindgen-0.24.5/tests/expectations/function_args.cpp
new file mode 100644
index 0000000..903f1bb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_args.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void unnamed(const uint64_t*);
+
+void pointer_test(const uint64_t *a);
+
+void print_from_rust();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/function_args.pyx b/cbindgen-0.24.5/tests/expectations/function_args.pyx
new file mode 100644
index 0000000..498360c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_args.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void unnamed(const uint64_t*);
+
+  void pointer_test(const uint64_t *a);
+
+  void print_from_rust();
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.both.c b/cbindgen-0.24.5/tests/expectations/function_noreturn.both.c
new file mode 100644
index 0000000..1a21ba6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.both.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+typedef struct Example {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+} Example;
+
+void loop_forever(void) NO_RETURN_ATTR;
+
+uint8_t normal_return(struct Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.both.compat.c b/cbindgen-0.24.5/tests/expectations/function_noreturn.both.compat.c
new file mode 100644
index 0000000..7336e59
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.both.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+typedef struct Example {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+} Example;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void loop_forever(void) NO_RETURN_ATTR;
+
+uint8_t normal_return(struct Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.c b/cbindgen-0.24.5/tests/expectations/function_noreturn.c
new file mode 100644
index 0000000..ba5c116
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+typedef struct {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+} Example;
+
+void loop_forever(void) NO_RETURN_ATTR;
+
+uint8_t normal_return(Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.compat.c b/cbindgen-0.24.5/tests/expectations/function_noreturn.compat.c
new file mode 100644
index 0000000..6ea836f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+typedef struct {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+} Example;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void loop_forever(void) NO_RETURN_ATTR;
+
+uint8_t normal_return(Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.cpp b/cbindgen-0.24.5/tests/expectations/function_noreturn.cpp
new file mode 100644
index 0000000..5adbe11
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.cpp
@@ -0,0 +1,25 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+struct Example {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+};
+
+extern "C" {
+
+void loop_forever() NO_RETURN_ATTR;
+
+uint8_t normal_return(Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.pyx b/cbindgen-0.24.5/tests/expectations/function_noreturn.pyx
new file mode 100644
index 0000000..21683cb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.pyx
@@ -0,0 +1,22 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+cdef extern from *:
+
+  ctypedef struct Example:
+    void (*f)(uintptr_t, uintptr_t);
+
+  void loop_forever();
+
+  uint8_t normal_return(Example arg, void (*other)(uint8_t));
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.c b/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.c
new file mode 100644
index 0000000..48ead97
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+struct Example {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+};
+
+void loop_forever(void) NO_RETURN_ATTR;
+
+uint8_t normal_return(struct Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.compat.c b/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.compat.c
new file mode 100644
index 0000000..dcb0e5b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+struct Example {
+  void (*f)(uintptr_t, uintptr_t) NO_RETURN_ATTR;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void loop_forever(void) NO_RETURN_ATTR;
+
+uint8_t normal_return(struct Example arg, void (*other)(uint8_t) NO_RETURN_ATTR);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.pyx b/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.pyx
new file mode 100644
index 0000000..6235dca
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_noreturn.tag.pyx
@@ -0,0 +1,22 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+
+
+cdef extern from *:
+
+  cdef struct Example:
+    void (*f)(uintptr_t, uintptr_t);
+
+  void loop_forever();
+
+  uint8_t normal_return(Example arg, void (*other)(uint8_t));
diff --git a/cbindgen-0.24.5/tests/expectations/function_ptr.c b/cbindgen-0.24.5/tests/expectations/function_ptr.c
new file mode 100644
index 0000000..1041a6b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_ptr.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef void (*MyCallback)(uintptr_t a, uintptr_t b);
+
+typedef void (*MyOtherCallback)(uintptr_t a,
+                                uintptr_t lot,
+                                uintptr_t of,
+                                uintptr_t args,
+                                uintptr_t and_then_some);
+
+void my_function(MyCallback a, MyOtherCallback b);
diff --git a/cbindgen-0.24.5/tests/expectations/function_ptr.compat.c b/cbindgen-0.24.5/tests/expectations/function_ptr.compat.c
new file mode 100644
index 0000000..be3870c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_ptr.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef void (*MyCallback)(uintptr_t a, uintptr_t b);
+
+typedef void (*MyOtherCallback)(uintptr_t a,
+                                uintptr_t lot,
+                                uintptr_t of,
+                                uintptr_t args,
+                                uintptr_t and_then_some);
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void my_function(MyCallback a, MyOtherCallback b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_ptr.cpp b/cbindgen-0.24.5/tests/expectations/function_ptr.cpp
new file mode 100644
index 0000000..217a160
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_ptr.cpp
@@ -0,0 +1,19 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+using MyCallback = void(*)(uintptr_t a, uintptr_t b);
+
+using MyOtherCallback = void(*)(uintptr_t a,
+                                uintptr_t lot,
+                                uintptr_t of,
+                                uintptr_t args,
+                                uintptr_t and_then_some);
+
+extern "C" {
+
+void my_function(MyCallback a, MyOtherCallback b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/function_ptr.pyx b/cbindgen-0.24.5/tests/expectations/function_ptr.pyx
new file mode 100644
index 0000000..3717742
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_ptr.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef void (*MyCallback)(uintptr_t a, uintptr_t b);
+
+  ctypedef void (*MyOtherCallback)(uintptr_t a,
+                                   uintptr_t lot,
+                                   uintptr_t of,
+                                   uintptr_t args,
+                                   uintptr_t and_then_some);
+
+  void my_function(MyCallback a, MyOtherCallback b);
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_name.c b/cbindgen-0.24.5/tests/expectations/function_sort_name.c
new file mode 100644
index 0000000..341f6a7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_name.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void A(void);
+
+void B(void);
+
+void C(void);
+
+void D(void);
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_name.compat.c b/cbindgen-0.24.5/tests/expectations/function_sort_name.compat.c
new file mode 100644
index 0000000..9e8c7d6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_name.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void A(void);
+
+void B(void);
+
+void C(void);
+
+void D(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_name.cpp b/cbindgen-0.24.5/tests/expectations/function_sort_name.cpp
new file mode 100644
index 0000000..d9de237
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_name.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void A();
+
+void B();
+
+void C();
+
+void D();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_name.pyx b/cbindgen-0.24.5/tests/expectations/function_sort_name.pyx
new file mode 100644
index 0000000..bda8fc6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_name.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void A();
+
+  void B();
+
+  void C();
+
+  void D();
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_none.c b/cbindgen-0.24.5/tests/expectations/function_sort_none.c
new file mode 100644
index 0000000..c7138c9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_none.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void C(void);
+
+void B(void);
+
+void D(void);
+
+void A(void);
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_none.compat.c b/cbindgen-0.24.5/tests/expectations/function_sort_none.compat.c
new file mode 100644
index 0000000..a6138f7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_none.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void C(void);
+
+void B(void);
+
+void D(void);
+
+void A(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_none.cpp b/cbindgen-0.24.5/tests/expectations/function_sort_none.cpp
new file mode 100644
index 0000000..99b52e5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_none.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void C();
+
+void B();
+
+void D();
+
+void A();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/function_sort_none.pyx b/cbindgen-0.24.5/tests/expectations/function_sort_none.pyx
new file mode 100644
index 0000000..d716783
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/function_sort_none.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void C();
+
+  void B();
+
+  void D();
+
+  void A();
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.both.c b/cbindgen-0.24.5/tests/expectations/generic_pointer.both.c
new file mode 100644
index 0000000..ac51021
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.both.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_____u8 {
+  uint8_t *a;
+} Foo_____u8;
+
+typedef struct Foo_____u8 Boo;
+
+void root(Boo x);
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.both.compat.c b/cbindgen-0.24.5/tests/expectations/generic_pointer.both.compat.c
new file mode 100644
index 0000000..3288ece
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_____u8 {
+  uint8_t *a;
+} Foo_____u8;
+
+typedef struct Foo_____u8 Boo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Boo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.c b/cbindgen-0.24.5/tests/expectations/generic_pointer.c
new file mode 100644
index 0000000..35d430d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t *a;
+} Foo_____u8;
+
+typedef Foo_____u8 Boo;
+
+void root(Boo x);
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.compat.c b/cbindgen-0.24.5/tests/expectations/generic_pointer.compat.c
new file mode 100644
index 0000000..75c1017
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  uint8_t *a;
+} Foo_____u8;
+
+typedef Foo_____u8 Boo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Boo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.cpp b/cbindgen-0.24.5/tests/expectations/generic_pointer.cpp
new file mode 100644
index 0000000..eb1a1ef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.cpp
@@ -0,0 +1,18 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T>
+struct Foo {
+  T a;
+};
+
+using Boo = Foo<uint8_t*>;
+
+extern "C" {
+
+void root(Boo x);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.pyx b/cbindgen-0.24.5/tests/expectations/generic_pointer.pyx
new file mode 100644
index 0000000..4d4e36b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo_____u8:
+    uint8_t *a;
+
+  ctypedef Foo_____u8 Boo;
+
+  void root(Boo x);
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.c b/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.c
new file mode 100644
index 0000000..9c2ea9d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_____u8 {
+  uint8_t *a;
+};
+
+typedef struct Foo_____u8 Boo;
+
+void root(Boo x);
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.compat.c b/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.compat.c
new file mode 100644
index 0000000..0ab9285
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_____u8 {
+  uint8_t *a;
+};
+
+typedef struct Foo_____u8 Boo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Boo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.pyx b/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.pyx
new file mode 100644
index 0000000..0f541a1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/generic_pointer.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo_____u8:
+    uint8_t *a;
+
+  ctypedef Foo_____u8 Boo;
+
+  void root(Boo x);
diff --git a/cbindgen-0.24.5/tests/expectations/global_attr.compat.c b/cbindgen-0.24.5/tests/expectations/global_attr.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_attr.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/global_attr.cpp b/cbindgen-0.24.5/tests/expectations/global_attr.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_attr.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/global_attr.pyx b/cbindgen-0.24.5/tests/expectations/global_attr.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_attr.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/global_variable.c b/cbindgen-0.24.5/tests/expectations/global_variable.c
new file mode 100644
index 0000000..2c165e3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_variable.c
@@ -0,0 +1,8 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+extern char MUT_GLOBAL_ARRAY[128];
+
+extern const char CONST_GLOBAL_ARRAY[128];
diff --git a/cbindgen-0.24.5/tests/expectations/global_variable.compat.c b/cbindgen-0.24.5/tests/expectations/global_variable.compat.c
new file mode 100644
index 0000000..ee7b9d1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_variable.compat.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern char MUT_GLOBAL_ARRAY[128];
+
+extern const char CONST_GLOBAL_ARRAY[128];
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/global_variable.cpp b/cbindgen-0.24.5/tests/expectations/global_variable.cpp
new file mode 100644
index 0000000..727f28b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_variable.cpp
@@ -0,0 +1,13 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+extern char MUT_GLOBAL_ARRAY[128];
+
+extern const char CONST_GLOBAL_ARRAY[128];
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/global_variable.pyx b/cbindgen-0.24.5/tests/expectations/global_variable.pyx
new file mode 100644
index 0000000..2966886
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/global_variable.pyx
@@ -0,0 +1,11 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  extern char MUT_GLOBAL_ARRAY[128];
+
+  extern const char CONST_GLOBAL_ARRAY[128];
diff --git a/cbindgen-0.24.5/tests/expectations/ignore.c b/cbindgen-0.24.5/tests/expectations/ignore.c
new file mode 100644
index 0000000..8e7da96
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ignore.c
@@ -0,0 +1,6 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void no_ignore_root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/ignore.compat.c b/cbindgen-0.24.5/tests/expectations/ignore.compat.c
new file mode 100644
index 0000000..a99dcee
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ignore.compat.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void no_ignore_root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/ignore.cpp b/cbindgen-0.24.5/tests/expectations/ignore.cpp
new file mode 100644
index 0000000..aa7cf51
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ignore.cpp
@@ -0,0 +1,11 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void no_ignore_root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/ignore.pyx b/cbindgen-0.24.5/tests/expectations/ignore.pyx
new file mode 100644
index 0000000..97162bd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ignore.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void no_ignore_root();
diff --git a/cbindgen-0.24.5/tests/expectations/include.compat.c b/cbindgen-0.24.5/tests/expectations/include.compat.c
new file mode 100644
index 0000000..3ec29aa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include.compat.c
@@ -0,0 +1,5 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <math.h>
diff --git a/cbindgen-0.24.5/tests/expectations/include.cpp b/cbindgen-0.24.5/tests/expectations/include.cpp
new file mode 100644
index 0000000..e99fc73
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include.cpp
@@ -0,0 +1,6 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+#include <math.h>
diff --git a/cbindgen-0.24.5/tests/expectations/include.pyx b/cbindgen-0.24.5/tests/expectations/include.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/include_guard.c b/cbindgen-0.24.5/tests/expectations/include_guard.c
new file mode 100644
index 0000000..eeecd48
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_guard.c
@@ -0,0 +1,6 @@
+#ifndef INCLUDE_GUARD_H
+#define INCLUDE_GUARD_H
+
+void root(void);
+
+#endif /* INCLUDE_GUARD_H */
diff --git a/cbindgen-0.24.5/tests/expectations/include_guard.compat.c b/cbindgen-0.24.5/tests/expectations/include_guard.compat.c
new file mode 100644
index 0000000..af1548f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_guard.compat.c
@@ -0,0 +1,14 @@
+#ifndef INCLUDE_GUARD_H
+#define INCLUDE_GUARD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif /* INCLUDE_GUARD_H */
diff --git a/cbindgen-0.24.5/tests/expectations/include_guard.cpp b/cbindgen-0.24.5/tests/expectations/include_guard.cpp
new file mode 100644
index 0000000..5600fd3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_guard.cpp
@@ -0,0 +1,10 @@
+#ifndef INCLUDE_GUARD_H
+#define INCLUDE_GUARD_H
+
+extern "C" {
+
+void root();
+
+} // extern "C"
+
+#endif // INCLUDE_GUARD_H
diff --git a/cbindgen-0.24.5/tests/expectations/include_guard.pyx b/cbindgen-0.24.5/tests/expectations/include_guard.pyx
new file mode 100644
index 0000000..d5f4496
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_guard.pyx
@@ -0,0 +1,4 @@
+
+cdef extern from *:
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/include_item.both.compat.c b/cbindgen-0.24.5/tests/expectations/include_item.both.compat.c
new file mode 100644
index 0000000..75ba4f4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_item.both.compat.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A {
+  int32_t x;
+  float y;
+} A;
+
+typedef struct B {
+  struct A data;
+} B;
diff --git a/cbindgen-0.24.5/tests/expectations/include_item.compat.c b/cbindgen-0.24.5/tests/expectations/include_item.compat.c
new file mode 100644
index 0000000..7b93a77
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_item.compat.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} A;
+
+typedef struct {
+  A data;
+} B;
diff --git a/cbindgen-0.24.5/tests/expectations/include_item.cpp b/cbindgen-0.24.5/tests/expectations/include_item.cpp
new file mode 100644
index 0000000..f3078fc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_item.cpp
@@ -0,0 +1,14 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct A {
+  int32_t x;
+  float y;
+};
+
+struct B {
+  A data;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/include_item.pyx b/cbindgen-0.24.5/tests/expectations/include_item.pyx
new file mode 100644
index 0000000..b242c5c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_item.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct A:
+    int32_t x;
+    float y;
+
+  ctypedef struct B:
+    A data;
diff --git a/cbindgen-0.24.5/tests/expectations/include_item.tag.compat.c b/cbindgen-0.24.5/tests/expectations/include_item.tag.compat.c
new file mode 100644
index 0000000..8cb7c10
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_item.tag.compat.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A {
+  int32_t x;
+  float y;
+};
+
+struct B {
+  struct A data;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/include_item.tag.pyx b/cbindgen-0.24.5/tests/expectations/include_item.tag.pyx
new file mode 100644
index 0000000..47a81c6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_item.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct A:
+    int32_t x;
+    float y;
+
+  cdef struct B:
+    A data;
diff --git a/cbindgen-0.24.5/tests/expectations/include_specific.compat.c b/cbindgen-0.24.5/tests/expectations/include_specific.compat.c
new file mode 100644
index 0000000..a84546e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_specific.compat.c
@@ -0,0 +1 @@
+#include <math.h>
diff --git a/cbindgen-0.24.5/tests/expectations/include_specific.cpp b/cbindgen-0.24.5/tests/expectations/include_specific.cpp
new file mode 100644
index 0000000..a84546e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_specific.cpp
@@ -0,0 +1 @@
+#include <math.h>
diff --git a/cbindgen-0.24.5/tests/expectations/include_specific.pyx b/cbindgen-0.24.5/tests/expectations/include_specific.pyx
new file mode 100644
index 0000000..fac918e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/include_specific.pyx
@@ -0,0 +1,3 @@
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.compat.c b/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.cpp b/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.pyx b/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/infinite-recursion-typedef-monomorph.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.compat.c b/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.cpp b/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.pyx b/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/infinite_recursion_typedef_monomorph.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.both.c b/cbindgen-0.24.5/tests/expectations/inner_mod.both.c
new file mode 100644
index 0000000..6035e3d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.both.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  float x;
+} Foo;
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.both.compat.c b/cbindgen-0.24.5/tests/expectations/inner_mod.both.compat.c
new file mode 100644
index 0000000..d46bb80
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.both.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  float x;
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.c b/cbindgen-0.24.5/tests/expectations/inner_mod.c
new file mode 100644
index 0000000..5caa0ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float x;
+} Foo;
+
+void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.compat.c b/cbindgen-0.24.5/tests/expectations/inner_mod.compat.c
new file mode 100644
index 0000000..6096ce2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float x;
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.cpp b/cbindgen-0.24.5/tests/expectations/inner_mod.cpp
new file mode 100644
index 0000000..66afbba
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.cpp
@@ -0,0 +1,15 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+  float x;
+};
+
+extern "C" {
+
+void root(Foo a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.pyx b/cbindgen-0.24.5/tests/expectations/inner_mod.pyx
new file mode 100644
index 0000000..d287a70
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    float x;
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.tag.c b/cbindgen-0.24.5/tests/expectations/inner_mod.tag.c
new file mode 100644
index 0000000..455e311
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.tag.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  float x;
+};
+
+void root(struct Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.tag.compat.c b/cbindgen-0.24.5/tests/expectations/inner_mod.tag.compat.c
new file mode 100644
index 0000000..fff900a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.tag.compat.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  float x;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/inner_mod.tag.pyx b/cbindgen-0.24.5/tests/expectations/inner_mod.tag.pyx
new file mode 100644
index 0000000..05ef846
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/inner_mod.tag.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    float x;
+
+  void root(Foo a);
diff --git a/cbindgen-0.24.5/tests/expectations/item_types.c b/cbindgen-0.24.5/tests/expectations/item_types.c
new file mode 100644
index 0000000..3d033a8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum OnlyThisShouldBeGenerated {
+  Foo,
+  Bar,
+};
+typedef uint8_t OnlyThisShouldBeGenerated;
diff --git a/cbindgen-0.24.5/tests/expectations/item_types.compat.c b/cbindgen-0.24.5/tests/expectations/item_types.compat.c
new file mode 100644
index 0000000..6eab9e0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types.compat.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum OnlyThisShouldBeGenerated
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+};
+#ifndef __cplusplus
+typedef uint8_t OnlyThisShouldBeGenerated;
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/item_types.cpp b/cbindgen-0.24.5/tests/expectations/item_types.cpp
new file mode 100644
index 0000000..2ca1437
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types.cpp
@@ -0,0 +1,10 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class OnlyThisShouldBeGenerated : uint8_t {
+  Foo,
+  Bar,
+};
diff --git a/cbindgen-0.24.5/tests/expectations/item_types.pyx b/cbindgen-0.24.5/tests/expectations/item_types.pyx
new file mode 100644
index 0000000..740710c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Foo,
+    Bar,
+  ctypedef uint8_t OnlyThisShouldBeGenerated;
diff --git a/cbindgen-0.24.5/tests/expectations/item_types_renamed.c b/cbindgen-0.24.5/tests/expectations/item_types_renamed.c
new file mode 100644
index 0000000..ffa3eaa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types_renamed.c
@@ -0,0 +1,10 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum StyleOnlyThisShouldBeGenerated {
+  Foo,
+  Bar,
+};
+typedef uint8_t StyleOnlyThisShouldBeGenerated;
diff --git a/cbindgen-0.24.5/tests/expectations/item_types_renamed.compat.c b/cbindgen-0.24.5/tests/expectations/item_types_renamed.compat.c
new file mode 100644
index 0000000..4912fa7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types_renamed.compat.c
@@ -0,0 +1,16 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum StyleOnlyThisShouldBeGenerated
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo,
+  Bar,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleOnlyThisShouldBeGenerated;
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/item_types_renamed.cpp b/cbindgen-0.24.5/tests/expectations/item_types_renamed.cpp
new file mode 100644
index 0000000..a80f128
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types_renamed.cpp
@@ -0,0 +1,10 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class StyleOnlyThisShouldBeGenerated : uint8_t {
+  Foo,
+  Bar,
+};
diff --git a/cbindgen-0.24.5/tests/expectations/item_types_renamed.pyx b/cbindgen-0.24.5/tests/expectations/item_types_renamed.pyx
new file mode 100644
index 0000000..c922a7f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/item_types_renamed.pyx
@@ -0,0 +1,12 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Foo,
+    Bar,
+  ctypedef uint8_t StyleOnlyThisShouldBeGenerated;
diff --git a/cbindgen-0.24.5/tests/expectations/layout.both.compat.c b/cbindgen-0.24.5/tests/expectations/layout.both.compat.c
new file mode 100644
index 0000000..2a16ca2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout.both.compat.c
@@ -0,0 +1,72 @@
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct RustAlign4Struct RustAlign4Struct;
+
+typedef struct RustAlign4Union RustAlign4Union;
+
+typedef struct RustPackedStruct RustPackedStruct;
+
+typedef struct RustPackedUnion RustPackedUnion;
+
+typedef struct UnsupportedAlign4Enum UnsupportedAlign4Enum;
+
+typedef struct UnsupportedPacked4Struct UnsupportedPacked4Struct;
+
+typedef struct UnsupportedPacked4Union UnsupportedPacked4Union;
+
+typedef struct CBINDGEN_ALIGNED(1) Align1Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align1Struct;
+
+typedef struct CBINDGEN_ALIGNED(2) Align2Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align2Struct;
+
+typedef struct CBINDGEN_ALIGNED(4) Align4Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align4Struct;
+
+typedef struct CBINDGEN_ALIGNED(8) Align8Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align8Struct;
+
+typedef struct CBINDGEN_ALIGNED(32) Align32Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align32Struct;
+
+typedef struct CBINDGEN_PACKED PackedStruct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} PackedStruct;
+
+typedef union CBINDGEN_ALIGNED(1) Align1Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align1Union;
+
+typedef union CBINDGEN_ALIGNED(4) Align4Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align4Union;
+
+typedef union CBINDGEN_ALIGNED(16) Align16Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align16Union;
+
+typedef union CBINDGEN_PACKED PackedUnion {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} PackedUnion;
diff --git a/cbindgen-0.24.5/tests/expectations/layout.compat.c b/cbindgen-0.24.5/tests/expectations/layout.compat.c
new file mode 100644
index 0000000..bd06ba5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout.compat.c
@@ -0,0 +1,72 @@
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct RustAlign4Struct RustAlign4Struct;
+
+typedef struct RustAlign4Union RustAlign4Union;
+
+typedef struct RustPackedStruct RustPackedStruct;
+
+typedef struct RustPackedUnion RustPackedUnion;
+
+typedef struct UnsupportedAlign4Enum UnsupportedAlign4Enum;
+
+typedef struct UnsupportedPacked4Struct UnsupportedPacked4Struct;
+
+typedef struct UnsupportedPacked4Union UnsupportedPacked4Union;
+
+typedef struct CBINDGEN_ALIGNED(1) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align1Struct;
+
+typedef struct CBINDGEN_ALIGNED(2) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align2Struct;
+
+typedef struct CBINDGEN_ALIGNED(4) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align4Struct;
+
+typedef struct CBINDGEN_ALIGNED(8) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align8Struct;
+
+typedef struct CBINDGEN_ALIGNED(32) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align32Struct;
+
+typedef struct CBINDGEN_PACKED {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} PackedStruct;
+
+typedef union CBINDGEN_ALIGNED(1) {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align1Union;
+
+typedef union CBINDGEN_ALIGNED(4) {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align4Union;
+
+typedef union CBINDGEN_ALIGNED(16) {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align16Union;
+
+typedef union CBINDGEN_PACKED {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} PackedUnion;
diff --git a/cbindgen-0.24.5/tests/expectations/layout.cpp b/cbindgen-0.24.5/tests/expectations/layout.cpp
new file mode 100644
index 0000000..153b8f6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout.cpp
@@ -0,0 +1,73 @@
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct RustAlign4Struct;
+
+struct RustAlign4Union;
+
+struct RustPackedStruct;
+
+struct RustPackedUnion;
+
+struct UnsupportedAlign4Enum;
+
+struct UnsupportedPacked4Struct;
+
+struct UnsupportedPacked4Union;
+
+struct CBINDGEN_ALIGNED(1) Align1Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(2) Align2Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(4) Align4Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(8) Align8Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(32) Align32Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_PACKED PackedStruct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+union CBINDGEN_ALIGNED(1) Align1Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(4) Align4Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(16) Align16Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_PACKED PackedUnion {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/layout.pyx b/cbindgen-0.24.5/tests/expectations/layout.pyx
new file mode 100644
index 0000000..f5ec67f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout.pyx
@@ -0,0 +1,72 @@
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct RustAlign4Struct:
+    pass
+
+  ctypedef struct RustAlign4Union:
+    pass
+
+  ctypedef struct RustPackedStruct:
+    pass
+
+  ctypedef struct RustPackedUnion:
+    pass
+
+  ctypedef struct UnsupportedAlign4Enum:
+    pass
+
+  ctypedef struct UnsupportedPacked4Struct:
+    pass
+
+  ctypedef struct UnsupportedPacked4Union:
+    pass
+
+  ctypedef struct Align1Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align2Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align4Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align8Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align32Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef packed struct PackedStruct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef union Align1Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  ctypedef union Align4Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  ctypedef union Align16Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  ctypedef union PackedUnion:
+    uintptr_t variant1;
+    uint8_t *variant2;
diff --git a/cbindgen-0.24.5/tests/expectations/layout.tag.compat.c b/cbindgen-0.24.5/tests/expectations/layout.tag.compat.c
new file mode 100644
index 0000000..347af27
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout.tag.compat.c
@@ -0,0 +1,72 @@
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct RustAlign4Struct;
+
+struct RustAlign4Union;
+
+struct RustPackedStruct;
+
+struct RustPackedUnion;
+
+struct UnsupportedAlign4Enum;
+
+struct UnsupportedPacked4Struct;
+
+struct UnsupportedPacked4Union;
+
+struct CBINDGEN_ALIGNED(1) Align1Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(2) Align2Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(4) Align4Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(8) Align8Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(32) Align32Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_PACKED PackedStruct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+union CBINDGEN_ALIGNED(1) Align1Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(4) Align4Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(16) Align16Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_PACKED PackedUnion {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/layout.tag.pyx b/cbindgen-0.24.5/tests/expectations/layout.tag.pyx
new file mode 100644
index 0000000..c16711e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout.tag.pyx
@@ -0,0 +1,72 @@
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct RustAlign4Struct:
+    pass
+
+  cdef struct RustAlign4Union:
+    pass
+
+  cdef struct RustPackedStruct:
+    pass
+
+  cdef struct RustPackedUnion:
+    pass
+
+  cdef struct UnsupportedAlign4Enum:
+    pass
+
+  cdef struct UnsupportedPacked4Struct:
+    pass
+
+  cdef struct UnsupportedPacked4Union:
+    pass
+
+  cdef struct Align1Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align2Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align4Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align8Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align32Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef packed struct PackedStruct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef union Align1Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  cdef union Align4Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  cdef union Align16Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  cdef union PackedUnion:
+    uintptr_t variant1;
+    uint8_t *variant2;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.both.compat.c b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.both.compat.c
new file mode 100644
index 0000000..cc28914
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.both.compat.c
@@ -0,0 +1,34 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct OpaqueAlign16Union OpaqueAlign16Union;
+
+typedef struct OpaqueAlign1Struct OpaqueAlign1Struct;
+
+typedef struct OpaqueAlign1Union OpaqueAlign1Union;
+
+typedef struct OpaqueAlign2Struct OpaqueAlign2Struct;
+
+typedef struct OpaqueAlign32Struct OpaqueAlign32Struct;
+
+typedef struct OpaqueAlign4Struct OpaqueAlign4Struct;
+
+typedef struct OpaqueAlign4Union OpaqueAlign4Union;
+
+typedef struct OpaqueAlign8Struct OpaqueAlign8Struct;
+
+typedef struct CBINDGEN_PACKED PackedStruct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} PackedStruct;
+
+typedef union CBINDGEN_PACKED PackedUnion {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} PackedUnion;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.compat.c b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.compat.c
new file mode 100644
index 0000000..276173b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.compat.c
@@ -0,0 +1,34 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct OpaqueAlign16Union OpaqueAlign16Union;
+
+typedef struct OpaqueAlign1Struct OpaqueAlign1Struct;
+
+typedef struct OpaqueAlign1Union OpaqueAlign1Union;
+
+typedef struct OpaqueAlign2Struct OpaqueAlign2Struct;
+
+typedef struct OpaqueAlign32Struct OpaqueAlign32Struct;
+
+typedef struct OpaqueAlign4Struct OpaqueAlign4Struct;
+
+typedef struct OpaqueAlign4Union OpaqueAlign4Union;
+
+typedef struct OpaqueAlign8Struct OpaqueAlign8Struct;
+
+typedef struct CBINDGEN_PACKED {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} PackedStruct;
+
+typedef union CBINDGEN_PACKED {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} PackedUnion;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.cpp b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.cpp
new file mode 100644
index 0000000..3642e1c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.cpp
@@ -0,0 +1,35 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct OpaqueAlign16Union;
+
+struct OpaqueAlign1Struct;
+
+struct OpaqueAlign1Union;
+
+struct OpaqueAlign2Struct;
+
+struct OpaqueAlign32Struct;
+
+struct OpaqueAlign4Struct;
+
+struct OpaqueAlign4Union;
+
+struct OpaqueAlign8Struct;
+
+struct CBINDGEN_PACKED PackedStruct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+union CBINDGEN_PACKED PackedUnion {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.pyx b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.pyx
new file mode 100644
index 0000000..8c3f6ee
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.pyx
@@ -0,0 +1,43 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct OpaqueAlign16Union:
+    pass
+
+  ctypedef struct OpaqueAlign1Struct:
+    pass
+
+  ctypedef struct OpaqueAlign1Union:
+    pass
+
+  ctypedef struct OpaqueAlign2Struct:
+    pass
+
+  ctypedef struct OpaqueAlign32Struct:
+    pass
+
+  ctypedef struct OpaqueAlign4Struct:
+    pass
+
+  ctypedef struct OpaqueAlign4Union:
+    pass
+
+  ctypedef struct OpaqueAlign8Struct:
+    pass
+
+  ctypedef packed struct PackedStruct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef union PackedUnion:
+    uintptr_t variant1;
+    uint8_t *variant2;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.tag.compat.c b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.tag.compat.c
new file mode 100644
index 0000000..0c5def9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.tag.compat.c
@@ -0,0 +1,34 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct OpaqueAlign16Union;
+
+struct OpaqueAlign1Struct;
+
+struct OpaqueAlign1Union;
+
+struct OpaqueAlign2Struct;
+
+struct OpaqueAlign32Struct;
+
+struct OpaqueAlign4Struct;
+
+struct OpaqueAlign4Union;
+
+struct OpaqueAlign8Struct;
+
+struct CBINDGEN_PACKED PackedStruct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+union CBINDGEN_PACKED PackedUnion {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.tag.pyx b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.tag.pyx
new file mode 100644
index 0000000..a5515a0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_aligned_opaque.tag.pyx
@@ -0,0 +1,43 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct OpaqueAlign16Union:
+    pass
+
+  cdef struct OpaqueAlign1Struct:
+    pass
+
+  cdef struct OpaqueAlign1Union:
+    pass
+
+  cdef struct OpaqueAlign2Struct:
+    pass
+
+  cdef struct OpaqueAlign32Struct:
+    pass
+
+  cdef struct OpaqueAlign4Struct:
+    pass
+
+  cdef struct OpaqueAlign4Union:
+    pass
+
+  cdef struct OpaqueAlign8Struct:
+    pass
+
+  cdef packed struct PackedStruct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef union PackedUnion:
+    uintptr_t variant1;
+    uint8_t *variant2;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.both.compat.c b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.both.compat.c
new file mode 100644
index 0000000..ff9053f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.both.compat.c
@@ -0,0 +1,52 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct OpaquePackedStruct OpaquePackedStruct;
+
+typedef struct OpaquePackedUnion OpaquePackedUnion;
+
+typedef union CBINDGEN_ALIGNED(1) Align1Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align1Union;
+
+typedef union CBINDGEN_ALIGNED(4) Align4Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align4Union;
+
+typedef union CBINDGEN_ALIGNED(16) Align16Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align16Union;
+
+typedef struct CBINDGEN_ALIGNED(1) Align1Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align1Struct;
+
+typedef struct CBINDGEN_ALIGNED(2) Align2Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align2Struct;
+
+typedef struct CBINDGEN_ALIGNED(4) Align4Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align4Struct;
+
+typedef struct CBINDGEN_ALIGNED(8) Align8Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align8Struct;
+
+typedef struct CBINDGEN_ALIGNED(32) Align32Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align32Struct;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.compat.c b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.compat.c
new file mode 100644
index 0000000..b4018da
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.compat.c
@@ -0,0 +1,52 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct OpaquePackedStruct OpaquePackedStruct;
+
+typedef struct OpaquePackedUnion OpaquePackedUnion;
+
+typedef union CBINDGEN_ALIGNED(1) {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align1Union;
+
+typedef union CBINDGEN_ALIGNED(4) {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align4Union;
+
+typedef union CBINDGEN_ALIGNED(16) {
+  uintptr_t variant1;
+  uint8_t *variant2;
+} Align16Union;
+
+typedef struct CBINDGEN_ALIGNED(1) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align1Struct;
+
+typedef struct CBINDGEN_ALIGNED(2) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align2Struct;
+
+typedef struct CBINDGEN_ALIGNED(4) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align4Struct;
+
+typedef struct CBINDGEN_ALIGNED(8) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align8Struct;
+
+typedef struct CBINDGEN_ALIGNED(32) {
+  uintptr_t arg1;
+  uint8_t *arg2;
+} Align32Struct;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.cpp b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.cpp
new file mode 100644
index 0000000..ce6aed9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.cpp
@@ -0,0 +1,53 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct OpaquePackedStruct;
+
+struct OpaquePackedUnion;
+
+union CBINDGEN_ALIGNED(1) Align1Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(4) Align4Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(16) Align16Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+struct CBINDGEN_ALIGNED(1) Align1Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(2) Align2Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(4) Align4Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(8) Align8Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(32) Align32Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.pyx b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.pyx
new file mode 100644
index 0000000..5b84f93
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.pyx
@@ -0,0 +1,49 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct OpaquePackedStruct:
+    pass
+
+  ctypedef struct OpaquePackedUnion:
+    pass
+
+  ctypedef union Align1Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  ctypedef union Align4Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  ctypedef union Align16Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  ctypedef struct Align1Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align2Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align4Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align8Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  ctypedef struct Align32Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
diff --git a/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.tag.compat.c b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.tag.compat.c
new file mode 100644
index 0000000..8191f57
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.tag.compat.c
@@ -0,0 +1,52 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct OpaquePackedStruct;
+
+struct OpaquePackedUnion;
+
+union CBINDGEN_ALIGNED(1) Align1Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(4) Align4Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+union CBINDGEN_ALIGNED(16) Align16Union {
+  uintptr_t variant1;
+  uint8_t *variant2;
+};
+
+struct CBINDGEN_ALIGNED(1) Align1Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(2) Align2Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(4) Align4Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(8) Align8Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
+
+struct CBINDGEN_ALIGNED(32) Align32Struct {
+  uintptr_t arg1;
+  uint8_t *arg2;
+};
diff --git a/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.tag.pyx b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.tag.pyx
new file mode 100644
index 0000000..548b112
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/layout_packed_opaque.tag.pyx
@@ -0,0 +1,49 @@
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct OpaquePackedStruct:
+    pass
+
+  cdef struct OpaquePackedUnion:
+    pass
+
+  cdef union Align1Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  cdef union Align4Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  cdef union Align16Union:
+    uintptr_t variant1;
+    uint8_t *variant2;
+
+  cdef struct Align1Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align2Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align4Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align8Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
+
+  cdef struct Align32Struct:
+    uintptr_t arg1;
+    uint8_t *arg2;
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.both.c b/cbindgen-0.24.5/tests/expectations/lifetime_arg.both.c
new file mode 100644
index 0000000..071e566
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.both.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A {
+  const int32_t *data;
+} A;
+
+typedef enum E_Tag {
+  V,
+  U,
+} E_Tag;
+
+typedef struct E {
+  E_Tag tag;
+  union {
+    struct {
+      const uint8_t *u;
+    };
+  };
+} E;
+
+void root(struct A _a, struct E _e);
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.both.compat.c b/cbindgen-0.24.5/tests/expectations/lifetime_arg.both.compat.c
new file mode 100644
index 0000000..ab713cc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.both.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A {
+  const int32_t *data;
+} A;
+
+typedef enum E_Tag {
+  V,
+  U,
+} E_Tag;
+
+typedef struct E {
+  E_Tag tag;
+  union {
+    struct {
+      const uint8_t *u;
+    };
+  };
+} E;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A _a, struct E _e);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.c b/cbindgen-0.24.5/tests/expectations/lifetime_arg.c
new file mode 100644
index 0000000..06473a8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *data;
+} A;
+
+typedef enum {
+  V,
+  U,
+} E_Tag;
+
+typedef struct {
+  E_Tag tag;
+  union {
+    struct {
+      const uint8_t *u;
+    };
+  };
+} E;
+
+void root(A _a, E _e);
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.compat.c b/cbindgen-0.24.5/tests/expectations/lifetime_arg.compat.c
new file mode 100644
index 0000000..573f498
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *data;
+} A;
+
+typedef enum {
+  V,
+  U,
+} E_Tag;
+
+typedef struct {
+  E_Tag tag;
+  union {
+    struct {
+      const uint8_t *u;
+    };
+  };
+} E;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A _a, E _e);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.cpp b/cbindgen-0.24.5/tests/expectations/lifetime_arg.cpp
new file mode 100644
index 0000000..dc5ed99
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.cpp
@@ -0,0 +1,31 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct A {
+  const int32_t *data;
+};
+
+struct E {
+  enum class Tag {
+    V,
+    U,
+  };
+
+  struct U_Body {
+    const uint8_t *_0;
+  };
+
+  Tag tag;
+  union {
+    U_Body u;
+  };
+};
+
+extern "C" {
+
+void root(A _a, E _e);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.pyx b/cbindgen-0.24.5/tests/expectations/lifetime_arg.pyx
new file mode 100644
index 0000000..36c6cef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.pyx
@@ -0,0 +1,20 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct A:
+    const int32_t *data;
+
+  ctypedef enum E_Tag:
+    V,
+    U,
+
+  ctypedef struct E:
+    E_Tag tag;
+    const uint8_t *u;
+
+  void root(A _a, E _e);
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.c b/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.c
new file mode 100644
index 0000000..f024829
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A {
+  const int32_t *data;
+};
+
+enum E_Tag {
+  V,
+  U,
+};
+
+struct E {
+  enum E_Tag tag;
+  union {
+    struct {
+      const uint8_t *u;
+    };
+  };
+};
+
+void root(struct A _a, struct E _e);
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.compat.c b/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.compat.c
new file mode 100644
index 0000000..68b078c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A {
+  const int32_t *data;
+};
+
+enum E_Tag {
+  V,
+  U,
+};
+
+struct E {
+  enum E_Tag tag;
+  union {
+    struct {
+      const uint8_t *u;
+    };
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A _a, struct E _e);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.pyx b/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.pyx
new file mode 100644
index 0000000..a81108b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/lifetime_arg.tag.pyx
@@ -0,0 +1,20 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct A:
+    const int32_t *data;
+
+  cdef enum E_Tag:
+    V,
+    U,
+
+  cdef struct E:
+    E_Tag tag;
+    const uint8_t *u;
+
+  void root(A _a, E _e);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.both.c b/cbindgen-0.24.5/tests/expectations/linestyle_cr.both.c
new file mode 100644
index 0000000..b6e8e40
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.both.c
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.both.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_cr.both.compat.c
new file mode 100644
index 0000000..2af7888
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.both.compat.c
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.c b/cbindgen-0.24.5/tests/expectations/linestyle_cr.c
new file mode 100644
index 0000000..cd4c9e7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.c
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_cr.compat.c
new file mode 100644
index 0000000..e8b5e52
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.compat.c
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.cpp b/cbindgen-0.24.5/tests/expectations/linestyle_cr.cpp
new file mode 100644
index 0000000..b307d57
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.cpp
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.pyx b/cbindgen-0.24.5/tests/expectations/linestyle_cr.pyx
new file mode 100644
index 0000000..945bc0e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.pyx
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.c b/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.c
new file mode 100644
index 0000000..583f681
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.c
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.compat.c
new file mode 100644
index 0000000..01708bd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.compat.c
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.pyx b/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.pyx
new file mode 100644
index 0000000..4918d64
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_cr.tag.pyx
Binary files differ
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.both.c b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.both.c
new file mode 100644
index 0000000..028d85b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Dummy {
+  int32_t x;
+  float y;
+} Dummy;
+
+void root(struct Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.both.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.both.compat.c
new file mode 100644
index 0000000..fa16a15
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Dummy {
+  int32_t x;
+  float y;
+} Dummy;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Dummy d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.c b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.c
new file mode 100644
index 0000000..16fca1c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} Dummy;
+
+void root(Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.compat.c
new file mode 100644
index 0000000..e105589
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} Dummy;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Dummy d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.cpp b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.cpp
new file mode 100644
index 0000000..648188c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Dummy {
+  int32_t x;
+  float y;
+};
+
+extern "C" {
+
+void root(Dummy d);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.pyx b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.pyx
new file mode 100644
index 0000000..830158e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Dummy:
+    int32_t x;
+    float y;
+
+  void root(Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.c b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.c
new file mode 100644
index 0000000..2ee5ff1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Dummy {
+  int32_t x;
+  float y;
+};
+
+void root(struct Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.compat.c
new file mode 100644
index 0000000..8be6001
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Dummy {
+  int32_t x;
+  float y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Dummy d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.pyx b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.pyx
new file mode 100644
index 0000000..60cc864
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_crlf.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Dummy:
+    int32_t x;
+    float y;
+
+  void root(Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.both.c b/cbindgen-0.24.5/tests/expectations/linestyle_lf.both.c
new file mode 100644
index 0000000..dc6b06f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Dummy {
+  int32_t x;
+  float y;
+} Dummy;
+
+void root(struct Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.both.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_lf.both.compat.c
new file mode 100644
index 0000000..715acd1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Dummy {
+  int32_t x;
+  float y;
+} Dummy;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Dummy d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.c b/cbindgen-0.24.5/tests/expectations/linestyle_lf.c
new file mode 100644
index 0000000..b848a63
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} Dummy;
+
+void root(Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_lf.compat.c
new file mode 100644
index 0000000..41aeec9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  float y;
+} Dummy;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Dummy d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.cpp b/cbindgen-0.24.5/tests/expectations/linestyle_lf.cpp
new file mode 100644
index 0000000..d02b607
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Dummy {
+  int32_t x;
+  float y;
+};
+
+extern "C" {
+
+void root(Dummy d);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.pyx b/cbindgen-0.24.5/tests/expectations/linestyle_lf.pyx
new file mode 100644
index 0000000..9a2a90e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Dummy:
+    int32_t x;
+    float y;
+
+  void root(Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.c b/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.c
new file mode 100644
index 0000000..8cb9bb9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Dummy {
+  int32_t x;
+  float y;
+};
+
+void root(struct Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.compat.c b/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.compat.c
new file mode 100644
index 0000000..8d53f1c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Dummy {
+  int32_t x;
+  float y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Dummy d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.pyx b/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.pyx
new file mode 100644
index 0000000..afb0b5d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/linestyle_lf.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Dummy:
+    int32_t x;
+    float y;
+
+  void root(Dummy d);
diff --git a/cbindgen-0.24.5/tests/expectations/literal_target.compat.c b/cbindgen-0.24.5/tests/expectations/literal_target.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/literal_target.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/literal_target.cpp b/cbindgen-0.24.5/tests/expectations/literal_target.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/literal_target.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/literal_target.pyx b/cbindgen-0.24.5/tests/expectations/literal_target.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/literal_target.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.both.c b/cbindgen-0.24.5/tests/expectations/mangle.both.c
new file mode 100644
index 0000000..71408c8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.both.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum Bar {
+  BarSome,
+  BarThing,
+} Bar;
+
+typedef struct FooU8 {
+  uint8_t a;
+} FooU8;
+
+typedef struct FooU8 Boo;
+
+void root(Boo x, enum Bar y);
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.both.compat.c b/cbindgen-0.24.5/tests/expectations/mangle.both.compat.c
new file mode 100644
index 0000000..ceefcc8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.both.compat.c
@@ -0,0 +1,25 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum Bar {
+  BarSome,
+  BarThing,
+} Bar;
+
+typedef struct FooU8 {
+  uint8_t a;
+} FooU8;
+
+typedef struct FooU8 Boo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Boo x, enum Bar y);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.c b/cbindgen-0.24.5/tests/expectations/mangle.c
new file mode 100644
index 0000000..ccd8117
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  BarSome,
+  BarThing,
+} Bar;
+
+typedef struct {
+  uint8_t a;
+} FooU8;
+
+typedef FooU8 Boo;
+
+void root(Boo x, Bar y);
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.compat.c b/cbindgen-0.24.5/tests/expectations/mangle.compat.c
new file mode 100644
index 0000000..2bfe97a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.compat.c
@@ -0,0 +1,25 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef enum {
+  BarSome,
+  BarThing,
+} Bar;
+
+typedef struct {
+  uint8_t a;
+} FooU8;
+
+typedef FooU8 Boo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Boo x, Bar y);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.cpp b/cbindgen-0.24.5/tests/expectations/mangle.cpp
new file mode 100644
index 0000000..95224c9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class Bar {
+  BarSome,
+  BarThing,
+};
+
+template<typename T>
+struct Foo {
+  T a;
+};
+
+using Boo = Foo<uint8_t>;
+
+extern "C" {
+
+void root(Boo x, Bar y);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.pyx b/cbindgen-0.24.5/tests/expectations/mangle.pyx
new file mode 100644
index 0000000..ddb1977
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.pyx
@@ -0,0 +1,18 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef enum Bar:
+    BarSome,
+    BarThing,
+
+  ctypedef struct FooU8:
+    uint8_t a;
+
+  ctypedef FooU8 Boo;
+
+  void root(Boo x, Bar y);
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.tag.c b/cbindgen-0.24.5/tests/expectations/mangle.tag.c
new file mode 100644
index 0000000..caa759c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.tag.c
@@ -0,0 +1,17 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Bar {
+  BarSome,
+  BarThing,
+};
+
+struct FooU8 {
+  uint8_t a;
+};
+
+typedef struct FooU8 Boo;
+
+void root(Boo x, enum Bar y);
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.tag.compat.c b/cbindgen-0.24.5/tests/expectations/mangle.tag.compat.c
new file mode 100644
index 0000000..7d7e992
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.tag.compat.c
@@ -0,0 +1,25 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Bar {
+  BarSome,
+  BarThing,
+};
+
+struct FooU8 {
+  uint8_t a;
+};
+
+typedef struct FooU8 Boo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Boo x, enum Bar y);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mangle.tag.pyx b/cbindgen-0.24.5/tests/expectations/mangle.tag.pyx
new file mode 100644
index 0000000..4a54cc8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mangle.tag.pyx
@@ -0,0 +1,18 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum Bar:
+    BarSome,
+    BarThing,
+
+  cdef struct FooU8:
+    uint8_t a;
+
+  ctypedef FooU8 Boo;
+
+  void root(Boo x, Bar y);
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.both.c b/cbindgen-0.24.5/tests/expectations/manuallydrop.both.c
new file mode 100644
index 0000000..255f4f5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.both.c
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_Point NotReprC_Point;
+
+typedef struct NotReprC_Point Foo;
+
+typedef struct Point {
+  int32_t x;
+  int32_t y;
+} Point;
+
+typedef struct MyStruct {
+  struct Point point;
+} MyStruct;
+
+void root(const Foo *a, const struct MyStruct *with_manual_drop);
+
+void take(struct Point with_manual_drop);
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.both.compat.c b/cbindgen-0.24.5/tests/expectations/manuallydrop.both.compat.c
new file mode 100644
index 0000000..9b9c26b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.both.compat.c
@@ -0,0 +1,43 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_Point NotReprC_Point;
+
+typedef struct NotReprC_Point Foo;
+
+typedef struct Point {
+  int32_t x;
+  int32_t y;
+} Point;
+
+typedef struct MyStruct {
+  struct Point point;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_manual_drop);
+
+void take(struct Point with_manual_drop);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.c b/cbindgen-0.24.5/tests/expectations/manuallydrop.c
new file mode 100644
index 0000000..869dea7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.c
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_Point NotReprC_Point;
+
+typedef NotReprC_Point Foo;
+
+typedef struct {
+  int32_t x;
+  int32_t y;
+} Point;
+
+typedef struct {
+  Point point;
+} MyStruct;
+
+void root(const Foo *a, const MyStruct *with_manual_drop);
+
+void take(Point with_manual_drop);
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.compat.c b/cbindgen-0.24.5/tests/expectations/manuallydrop.compat.c
new file mode 100644
index 0000000..0615661
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.compat.c
@@ -0,0 +1,43 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC_Point NotReprC_Point;
+
+typedef NotReprC_Point Foo;
+
+typedef struct {
+  int32_t x;
+  int32_t y;
+} Point;
+
+typedef struct {
+  Point point;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const MyStruct *with_manual_drop);
+
+void take(Point with_manual_drop);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.cpp b/cbindgen-0.24.5/tests/expectations/manuallydrop.cpp
new file mode 100644
index 0000000..3f46196
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.cpp
@@ -0,0 +1,41 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct NotReprC;
+
+struct Point {
+  int32_t x;
+  int32_t y;
+};
+
+using Foo = NotReprC<ManuallyDrop<Point>>;
+
+struct MyStruct {
+  ManuallyDrop<Point> point;
+};
+
+extern "C" {
+
+void root(const Foo *a, const MyStruct *with_manual_drop);
+
+void take(ManuallyDrop<Point> with_manual_drop);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.pyx b/cbindgen-0.24.5/tests/expectations/manuallydrop.pyx
new file mode 100644
index 0000000..370d0df
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.pyx
@@ -0,0 +1,37 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct NotReprC_Point:
+    pass
+
+  ctypedef NotReprC_Point Foo;
+
+  ctypedef struct Point:
+    int32_t x;
+    int32_t y;
+
+  ctypedef struct MyStruct:
+    Point point;
+
+  void root(const Foo *a, const MyStruct *with_manual_drop);
+
+  void take(Point with_manual_drop);
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.c b/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.c
new file mode 100644
index 0000000..5d44aa2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.c
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC_Point;
+
+typedef struct NotReprC_Point Foo;
+
+struct Point {
+  int32_t x;
+  int32_t y;
+};
+
+struct MyStruct {
+  struct Point point;
+};
+
+void root(const Foo *a, const struct MyStruct *with_manual_drop);
+
+void take(struct Point with_manual_drop);
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.compat.c b/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.compat.c
new file mode 100644
index 0000000..b66146f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.compat.c
@@ -0,0 +1,43 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC_Point;
+
+typedef struct NotReprC_Point Foo;
+
+struct Point {
+  int32_t x;
+  int32_t y;
+};
+
+struct MyStruct {
+  struct Point point;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_manual_drop);
+
+void take(struct Point with_manual_drop);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.pyx b/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.pyx
new file mode 100644
index 0000000..388c3ef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/manuallydrop.tag.pyx
@@ -0,0 +1,37 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct NotReprC_Point:
+    pass
+
+  ctypedef NotReprC_Point Foo;
+
+  cdef struct Point:
+    int32_t x;
+    int32_t y;
+
+  cdef struct MyStruct:
+    Point point;
+
+  void root(const Foo *a, const MyStruct *with_manual_drop);
+
+  void take(Point with_manual_drop);
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.both.c b/cbindgen-0.24.5/tests/expectations/maybeuninit.both.c
new file mode 100644
index 0000000..850e3eb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.both.c
@@ -0,0 +1,28 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC______i32 NotReprC______i32;
+
+typedef struct NotReprC______i32 Foo;
+
+typedef struct MyStruct {
+  const int32_t *number;
+} MyStruct;
+
+void root(const Foo *a, const struct MyStruct *with_maybe_uninit);
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.both.compat.c b/cbindgen-0.24.5/tests/expectations/maybeuninit.both.compat.c
new file mode 100644
index 0000000..31d3b81
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.both.compat.c
@@ -0,0 +1,36 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC______i32 NotReprC______i32;
+
+typedef struct NotReprC______i32 Foo;
+
+typedef struct MyStruct {
+  const int32_t *number;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_maybe_uninit);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.c b/cbindgen-0.24.5/tests/expectations/maybeuninit.c
new file mode 100644
index 0000000..1eddcdc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.c
@@ -0,0 +1,28 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC______i32 NotReprC______i32;
+
+typedef NotReprC______i32 Foo;
+
+typedef struct {
+  const int32_t *number;
+} MyStruct;
+
+void root(const Foo *a, const MyStruct *with_maybe_uninit);
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.compat.c b/cbindgen-0.24.5/tests/expectations/maybeuninit.compat.c
new file mode 100644
index 0000000..c218fc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.compat.c
@@ -0,0 +1,36 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct NotReprC______i32 NotReprC______i32;
+
+typedef NotReprC______i32 Foo;
+
+typedef struct {
+  const int32_t *number;
+} MyStruct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const MyStruct *with_maybe_uninit);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.cpp b/cbindgen-0.24.5/tests/expectations/maybeuninit.cpp
new file mode 100644
index 0000000..83d8515
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.cpp
@@ -0,0 +1,34 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct NotReprC;
+
+using Foo = NotReprC<MaybeUninit<const int32_t*>>;
+
+struct MyStruct {
+  MaybeUninit<const int32_t*> number;
+};
+
+extern "C" {
+
+void root(const Foo *a, const MyStruct *with_maybe_uninit);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.pyx b/cbindgen-0.24.5/tests/expectations/maybeuninit.pyx
new file mode 100644
index 0000000..75d82b3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.pyx
@@ -0,0 +1,31 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct NotReprC______i32:
+    pass
+
+  ctypedef NotReprC______i32 Foo;
+
+  ctypedef struct MyStruct:
+    const int32_t *number;
+
+  void root(const Foo *a, const MyStruct *with_maybe_uninit);
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.c b/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.c
new file mode 100644
index 0000000..a2f5a08
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.c
@@ -0,0 +1,28 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC______i32;
+
+typedef struct NotReprC______i32 Foo;
+
+struct MyStruct {
+  const int32_t *number;
+};
+
+void root(const Foo *a, const struct MyStruct *with_maybe_uninit);
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.compat.c b/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.compat.c
new file mode 100644
index 0000000..e788a4b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.compat.c
@@ -0,0 +1,36 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct NotReprC______i32;
+
+typedef struct NotReprC______i32 Foo;
+
+struct MyStruct {
+  const int32_t *number;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const struct MyStruct *with_maybe_uninit);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.pyx b/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.pyx
new file mode 100644
index 0000000..82497d8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/maybeuninit.tag.pyx
@@ -0,0 +1,31 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct NotReprC______i32:
+    pass
+
+  ctypedef NotReprC______i32 Foo;
+
+  cdef struct MyStruct:
+    const int32_t *number;
+
+  void root(const Foo *a, const MyStruct *with_maybe_uninit);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.both.c b/cbindgen-0.24.5/tests/expectations/mod_2015.both.c
new file mode 100644
index 0000000..a9c3d2d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct ExportMe {
+  uint64_t val;
+} ExportMe;
+
+void export_me(struct ExportMe *val);
+
+void from_really_nested_mod(void);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.both.compat.c b/cbindgen-0.24.5/tests/expectations/mod_2015.both.compat.c
new file mode 100644
index 0000000..264f020
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.both.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct ExportMe {
+  uint64_t val;
+} ExportMe;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(struct ExportMe *val);
+
+void from_really_nested_mod(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.c b/cbindgen-0.24.5/tests/expectations/mod_2015.c
new file mode 100644
index 0000000..f67ddcc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct {
+  uint64_t val;
+} ExportMe;
+
+void export_me(ExportMe *val);
+
+void from_really_nested_mod(void);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.compat.c b/cbindgen-0.24.5/tests/expectations/mod_2015.compat.c
new file mode 100644
index 0000000..4f49992
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct {
+  uint64_t val;
+} ExportMe;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(ExportMe *val);
+
+void from_really_nested_mod(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.cpp b/cbindgen-0.24.5/tests/expectations/mod_2015.cpp
new file mode 100644
index 0000000..b3caaed
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.cpp
@@ -0,0 +1,19 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint8_t EXPORT_ME_TOO = 42;
+
+struct ExportMe {
+  uint64_t val;
+};
+
+extern "C" {
+
+void export_me(ExportMe *val);
+
+void from_really_nested_mod();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.pyx b/cbindgen-0.24.5/tests/expectations/mod_2015.pyx
new file mode 100644
index 0000000..c8f9cbc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t EXPORT_ME_TOO # = 42
+
+  ctypedef struct ExportMe:
+    uint64_t val;
+
+  void export_me(ExportMe *val);
+
+  void from_really_nested_mod();
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.tag.c b/cbindgen-0.24.5/tests/expectations/mod_2015.tag.c
new file mode 100644
index 0000000..42233d4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+struct ExportMe {
+  uint64_t val;
+};
+
+void export_me(struct ExportMe *val);
+
+void from_really_nested_mod(void);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.tag.compat.c b/cbindgen-0.24.5/tests/expectations/mod_2015.tag.compat.c
new file mode 100644
index 0000000..606808c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.tag.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+struct ExportMe {
+  uint64_t val;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(struct ExportMe *val);
+
+void from_really_nested_mod(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2015.tag.pyx b/cbindgen-0.24.5/tests/expectations/mod_2015.tag.pyx
new file mode 100644
index 0000000..35cd4ab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2015.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t EXPORT_ME_TOO # = 42
+
+  cdef struct ExportMe:
+    uint64_t val;
+
+  void export_me(ExportMe *val);
+
+  void from_really_nested_mod();
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.both.c b/cbindgen-0.24.5/tests/expectations/mod_2018.both.c
new file mode 100644
index 0000000..8c48f88
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.both.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct ExportMe {
+  uint64_t val;
+} ExportMe;
+
+typedef struct ExportMe2 {
+  uint64_t val;
+} ExportMe2;
+
+void export_me(struct ExportMe *val);
+
+void export_me_2(struct ExportMe2*);
+
+void from_really_nested_mod(void);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.both.compat.c b/cbindgen-0.24.5/tests/expectations/mod_2018.both.compat.c
new file mode 100644
index 0000000..b87a85e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.both.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct ExportMe {
+  uint64_t val;
+} ExportMe;
+
+typedef struct ExportMe2 {
+  uint64_t val;
+} ExportMe2;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(struct ExportMe *val);
+
+void export_me_2(struct ExportMe2*);
+
+void from_really_nested_mod(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.c b/cbindgen-0.24.5/tests/expectations/mod_2018.c
new file mode 100644
index 0000000..45def6c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct {
+  uint64_t val;
+} ExportMe;
+
+typedef struct {
+  uint64_t val;
+} ExportMe2;
+
+void export_me(ExportMe *val);
+
+void export_me_2(ExportMe2*);
+
+void from_really_nested_mod(void);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.compat.c b/cbindgen-0.24.5/tests/expectations/mod_2018.compat.c
new file mode 100644
index 0000000..2af05c2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct {
+  uint64_t val;
+} ExportMe;
+
+typedef struct {
+  uint64_t val;
+} ExportMe2;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(ExportMe *val);
+
+void export_me_2(ExportMe2*);
+
+void from_really_nested_mod(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.cpp b/cbindgen-0.24.5/tests/expectations/mod_2018.cpp
new file mode 100644
index 0000000..cd3ca85
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.cpp
@@ -0,0 +1,25 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint8_t EXPORT_ME_TOO = 42;
+
+struct ExportMe {
+  uint64_t val;
+};
+
+struct ExportMe2 {
+  uint64_t val;
+};
+
+extern "C" {
+
+void export_me(ExportMe *val);
+
+void export_me_2(ExportMe2*);
+
+void from_really_nested_mod();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.pyx b/cbindgen-0.24.5/tests/expectations/mod_2018.pyx
new file mode 100644
index 0000000..1c79c69
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t EXPORT_ME_TOO # = 42
+
+  ctypedef struct ExportMe:
+    uint64_t val;
+
+  ctypedef struct ExportMe2:
+    uint64_t val;
+
+  void export_me(ExportMe *val);
+
+  void export_me_2(ExportMe2*);
+
+  void from_really_nested_mod();
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.tag.c b/cbindgen-0.24.5/tests/expectations/mod_2018.tag.c
new file mode 100644
index 0000000..70d9a22
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.tag.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+struct ExportMe {
+  uint64_t val;
+};
+
+struct ExportMe2 {
+  uint64_t val;
+};
+
+void export_me(struct ExportMe *val);
+
+void export_me_2(struct ExportMe2*);
+
+void from_really_nested_mod(void);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.tag.compat.c b/cbindgen-0.24.5/tests/expectations/mod_2018.tag.compat.c
new file mode 100644
index 0000000..051cb67
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.tag.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+struct ExportMe {
+  uint64_t val;
+};
+
+struct ExportMe2 {
+  uint64_t val;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(struct ExportMe *val);
+
+void export_me_2(struct ExportMe2*);
+
+void from_really_nested_mod(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_2018.tag.pyx b/cbindgen-0.24.5/tests/expectations/mod_2018.tag.pyx
new file mode 100644
index 0000000..eb78cb4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_2018.tag.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t EXPORT_ME_TOO # = 42
+
+  cdef struct ExportMe:
+    uint64_t val;
+
+  cdef struct ExportMe2:
+    uint64_t val;
+
+  void export_me(ExportMe *val);
+
+  void export_me_2(ExportMe2*);
+
+  void from_really_nested_mod();
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.both.c b/cbindgen-0.24.5/tests/expectations/mod_attr.both.c
new file mode 100644
index 0000000..5bedae0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.both.c
@@ -0,0 +1,38 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(FOO)
+#define FOO 1
+#endif
+
+#if defined(BAR)
+#define BAR 2
+#endif
+
+#if defined(FOO)
+typedef struct Foo {
+
+} Foo;
+#endif
+
+#if defined(BAR)
+typedef struct Bar {
+
+} Bar;
+#endif
+
+#if defined(FOO)
+void foo(const struct Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const struct Bar *bar);
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.both.compat.c b/cbindgen-0.24.5/tests/expectations/mod_attr.both.compat.c
new file mode 100644
index 0000000..78ca229
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.both.compat.c
@@ -0,0 +1,46 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(FOO)
+#define FOO 1
+#endif
+
+#if defined(BAR)
+#define BAR 2
+#endif
+
+#if defined(FOO)
+typedef struct Foo {
+
+} Foo;
+#endif
+
+#if defined(BAR)
+typedef struct Bar {
+
+} Bar;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#if defined(FOO)
+void foo(const struct Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const struct Bar *bar);
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.c b/cbindgen-0.24.5/tests/expectations/mod_attr.c
new file mode 100644
index 0000000..63c36be
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.c
@@ -0,0 +1,38 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(FOO)
+#define FOO 1
+#endif
+
+#if defined(BAR)
+#define BAR 2
+#endif
+
+#if defined(FOO)
+typedef struct {
+
+} Foo;
+#endif
+
+#if defined(BAR)
+typedef struct {
+
+} Bar;
+#endif
+
+#if defined(FOO)
+void foo(const Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const Bar *bar);
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.compat.c b/cbindgen-0.24.5/tests/expectations/mod_attr.compat.c
new file mode 100644
index 0000000..0098503
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.compat.c
@@ -0,0 +1,46 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(FOO)
+#define FOO 1
+#endif
+
+#if defined(BAR)
+#define BAR 2
+#endif
+
+#if defined(FOO)
+typedef struct {
+
+} Foo;
+#endif
+
+#if defined(BAR)
+typedef struct {
+
+} Bar;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#if defined(FOO)
+void foo(const Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const Bar *bar);
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.cpp b/cbindgen-0.24.5/tests/expectations/mod_attr.cpp
new file mode 100644
index 0000000..10d0fe8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.cpp
@@ -0,0 +1,43 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+#if defined(FOO)
+constexpr static const int32_t FOO = 1;
+#endif
+
+#if defined(BAR)
+constexpr static const int32_t BAR = 2;
+#endif
+
+#if defined(FOO)
+struct Foo {
+
+};
+#endif
+
+#if defined(BAR)
+struct Bar {
+
+};
+#endif
+
+extern "C" {
+
+#if defined(FOO)
+void foo(const Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const Bar *bar);
+#endif
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.pyx b/cbindgen-0.24.5/tests/expectations/mod_attr.pyx
new file mode 100644
index 0000000..09e66fa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.pyx
@@ -0,0 +1,33 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  IF FOO:
+    const int32_t FOO # = 1
+
+  IF BAR:
+    const int32_t BAR # = 2
+
+  IF FOO:
+    ctypedef struct Foo:
+      pass
+
+  IF BAR:
+    ctypedef struct Bar:
+      pass
+
+  IF FOO:
+    void foo(const Foo *foo);
+
+  IF BAR:
+    void bar(const Bar *bar);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.tag.c b/cbindgen-0.24.5/tests/expectations/mod_attr.tag.c
new file mode 100644
index 0000000..0627aeb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.tag.c
@@ -0,0 +1,38 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(FOO)
+#define FOO 1
+#endif
+
+#if defined(BAR)
+#define BAR 2
+#endif
+
+#if defined(FOO)
+struct Foo {
+
+};
+#endif
+
+#if defined(BAR)
+struct Bar {
+
+};
+#endif
+
+#if defined(FOO)
+void foo(const struct Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const struct Bar *bar);
+#endif
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.tag.compat.c b/cbindgen-0.24.5/tests/expectations/mod_attr.tag.compat.c
new file mode 100644
index 0000000..aba6a6a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.tag.compat.c
@@ -0,0 +1,46 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if defined(FOO)
+#define FOO 1
+#endif
+
+#if defined(BAR)
+#define BAR 2
+#endif
+
+#if defined(FOO)
+struct Foo {
+
+};
+#endif
+
+#if defined(BAR)
+struct Bar {
+
+};
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#if defined(FOO)
+void foo(const struct Foo *foo);
+#endif
+
+#if defined(BAR)
+void bar(const struct Bar *bar);
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_attr.tag.pyx b/cbindgen-0.24.5/tests/expectations/mod_attr.tag.pyx
new file mode 100644
index 0000000..3158396
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_attr.tag.pyx
@@ -0,0 +1,33 @@
+#if 0
+DEF FOO = 0
+DEF BAR = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  IF FOO:
+    const int32_t FOO # = 1
+
+  IF BAR:
+    const int32_t BAR # = 2
+
+  IF FOO:
+    cdef struct Foo:
+      pass
+
+  IF BAR:
+    cdef struct Bar:
+      pass
+
+  IF FOO:
+    void foo(const Foo *foo);
+
+  IF BAR:
+    void bar(const Bar *bar);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.both.c b/cbindgen-0.24.5/tests/expectations/mod_path.both.c
new file mode 100644
index 0000000..387edf8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.both.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct ExportMe {
+  uint64_t val;
+} ExportMe;
+
+void export_me(struct ExportMe *val);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.both.compat.c b/cbindgen-0.24.5/tests/expectations/mod_path.both.compat.c
new file mode 100644
index 0000000..3d090e5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct ExportMe {
+  uint64_t val;
+} ExportMe;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(struct ExportMe *val);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.c b/cbindgen-0.24.5/tests/expectations/mod_path.c
new file mode 100644
index 0000000..7ffa5ee
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct {
+  uint64_t val;
+} ExportMe;
+
+void export_me(ExportMe *val);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.compat.c b/cbindgen-0.24.5/tests/expectations/mod_path.compat.c
new file mode 100644
index 0000000..1527af6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+typedef struct {
+  uint64_t val;
+} ExportMe;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(ExportMe *val);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.cpp b/cbindgen-0.24.5/tests/expectations/mod_path.cpp
new file mode 100644
index 0000000..0cda2e6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const uint8_t EXPORT_ME_TOO = 42;
+
+struct ExportMe {
+  uint64_t val;
+};
+
+extern "C" {
+
+void export_me(ExportMe *val);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.pyx b/cbindgen-0.24.5/tests/expectations/mod_path.pyx
new file mode 100644
index 0000000..4398e5d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t EXPORT_ME_TOO # = 42
+
+  ctypedef struct ExportMe:
+    uint64_t val;
+
+  void export_me(ExportMe *val);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.tag.c b/cbindgen-0.24.5/tests/expectations/mod_path.tag.c
new file mode 100644
index 0000000..01a8d59
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.tag.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+struct ExportMe {
+  uint64_t val;
+};
+
+void export_me(struct ExportMe *val);
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.tag.compat.c b/cbindgen-0.24.5/tests/expectations/mod_path.tag.compat.c
new file mode 100644
index 0000000..097697e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXPORT_ME_TOO 42
+
+struct ExportMe {
+  uint64_t val;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void export_me(struct ExportMe *val);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/mod_path.tag.pyx b/cbindgen-0.24.5/tests/expectations/mod_path.tag.pyx
new file mode 100644
index 0000000..4838320
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/mod_path.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const uint8_t EXPORT_ME_TOO # = 42
+
+  cdef struct ExportMe:
+    uint64_t val;
+
+  void export_me(ExportMe *val);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.both.c b/cbindgen-0.24.5/tests/expectations/monomorph_1.both.c
new file mode 100644
index 0000000..8c3eda6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.both.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef struct Foo_i32 {
+  const int32_t *data;
+} Foo_i32;
+
+typedef struct Foo_f32 {
+  const float *data;
+} Foo_f32;
+
+typedef struct Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef struct Tuple_Foo_f32_____f32 {
+  const struct Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef struct Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef struct Tuple_f32__f32 Indirection_f32;
+
+void root(struct Foo_i32 a,
+          struct Foo_f32 b,
+          struct Bar_f32 c,
+          struct Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          struct Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.both.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_1.both.compat.c
new file mode 100644
index 0000000..b7de1da
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.both.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef struct Foo_i32 {
+  const int32_t *data;
+} Foo_i32;
+
+typedef struct Foo_f32 {
+  const float *data;
+} Foo_f32;
+
+typedef struct Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef struct Tuple_Foo_f32_____f32 {
+  const struct Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef struct Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef struct Tuple_f32__f32 Indirection_f32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo_i32 a,
+          struct Foo_f32 b,
+          struct Bar_f32 c,
+          struct Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          struct Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.c b/cbindgen-0.24.5/tests/expectations/monomorph_1.c
new file mode 100644
index 0000000..e7cd4e7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef struct {
+  const int32_t *data;
+} Foo_i32;
+
+typedef struct {
+  const float *data;
+} Foo_f32;
+
+typedef struct {
+  const Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef struct {
+  const Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef struct {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef Tuple_f32__f32 Indirection_f32;
+
+void root(Foo_i32 a,
+          Foo_f32 b,
+          Bar_f32 c,
+          Foo_Bar_f32 d,
+          Bar_Foo_f32 e,
+          Bar_Bar_f32 f,
+          Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_1.compat.c
new file mode 100644
index 0000000..d94ddec
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef struct {
+  const int32_t *data;
+} Foo_i32;
+
+typedef struct {
+  const float *data;
+} Foo_f32;
+
+typedef struct {
+  const Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef struct {
+  const Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef struct {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef Tuple_f32__f32 Indirection_f32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo_i32 a,
+          Foo_f32 b,
+          Bar_f32 c,
+          Foo_Bar_f32 d,
+          Bar_Foo_f32 e,
+          Bar_Bar_f32 f,
+          Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.cpp b/cbindgen-0.24.5/tests/expectations/monomorph_1.cpp
new file mode 100644
index 0000000..35904f9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.cpp
@@ -0,0 +1,35 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct Bar;
+
+template<typename T>
+struct Foo {
+  const T *data;
+};
+
+template<typename T, typename E>
+struct Tuple {
+  const T *a;
+  const E *b;
+};
+
+template<typename T>
+using Indirection = Tuple<T, float>;
+
+extern "C" {
+
+void root(Foo<int32_t> a,
+          Foo<float> b,
+          Bar<float> c,
+          Foo<Bar<float>> d,
+          Bar<Foo<float>> e,
+          Bar<Bar<float>> f,
+          Tuple<Foo<float>, float> g,
+          Indirection<float> h);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.pyx b/cbindgen-0.24.5/tests/expectations/monomorph_1.pyx
new file mode 100644
index 0000000..df95cb7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.pyx
@@ -0,0 +1,44 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Bar_Bar_f32:
+    pass
+
+  ctypedef struct Bar_Foo_f32:
+    pass
+
+  ctypedef struct Bar_f32:
+    pass
+
+  ctypedef struct Foo_i32:
+    const int32_t *data;
+
+  ctypedef struct Foo_f32:
+    const float *data;
+
+  ctypedef struct Foo_Bar_f32:
+    const Bar_f32 *data;
+
+  ctypedef struct Tuple_Foo_f32_____f32:
+    const Foo_f32 *a;
+    const float *b;
+
+  ctypedef struct Tuple_f32__f32:
+    const float *a;
+    const float *b;
+
+  ctypedef Tuple_f32__f32 Indirection_f32;
+
+  void root(Foo_i32 a,
+            Foo_f32 b,
+            Bar_f32 c,
+            Foo_Bar_f32 d,
+            Bar_Foo_f32 e,
+            Bar_Bar_f32 f,
+            Tuple_Foo_f32_____f32 g,
+            Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.c b/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.c
new file mode 100644
index 0000000..4bc47ca
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar_Bar_f32;
+
+struct Bar_Foo_f32;
+
+struct Bar_f32;
+
+struct Foo_i32 {
+  const int32_t *data;
+};
+
+struct Foo_f32 {
+  const float *data;
+};
+
+struct Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+};
+
+struct Tuple_Foo_f32_____f32 {
+  const struct Foo_f32 *a;
+  const float *b;
+};
+
+struct Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+};
+
+typedef struct Tuple_f32__f32 Indirection_f32;
+
+void root(struct Foo_i32 a,
+          struct Foo_f32 b,
+          struct Bar_f32 c,
+          struct Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          struct Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.compat.c
new file mode 100644
index 0000000..17b9a08
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar_Bar_f32;
+
+struct Bar_Foo_f32;
+
+struct Bar_f32;
+
+struct Foo_i32 {
+  const int32_t *data;
+};
+
+struct Foo_f32 {
+  const float *data;
+};
+
+struct Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+};
+
+struct Tuple_Foo_f32_____f32 {
+  const struct Foo_f32 *a;
+  const float *b;
+};
+
+struct Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+};
+
+typedef struct Tuple_f32__f32 Indirection_f32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo_i32 a,
+          struct Foo_f32 b,
+          struct Bar_f32 c,
+          struct Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          struct Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.pyx b/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.pyx
new file mode 100644
index 0000000..2727476
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_1.tag.pyx
@@ -0,0 +1,44 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Bar_Bar_f32:
+    pass
+
+  cdef struct Bar_Foo_f32:
+    pass
+
+  cdef struct Bar_f32:
+    pass
+
+  cdef struct Foo_i32:
+    const int32_t *data;
+
+  cdef struct Foo_f32:
+    const float *data;
+
+  cdef struct Foo_Bar_f32:
+    const Bar_f32 *data;
+
+  cdef struct Tuple_Foo_f32_____f32:
+    const Foo_f32 *a;
+    const float *b;
+
+  cdef struct Tuple_f32__f32:
+    const float *a;
+    const float *b;
+
+  ctypedef Tuple_f32__f32 Indirection_f32;
+
+  void root(Foo_i32 a,
+            Foo_f32 b,
+            Bar_f32 c,
+            Foo_Bar_f32 d,
+            Bar_Foo_f32 e,
+            Bar_Bar_f32 f,
+            Tuple_Foo_f32_____f32 g,
+            Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.both.c b/cbindgen-0.24.5/tests/expectations/monomorph_2.both.c
new file mode 100644
index 0000000..b104c58
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.both.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A A;
+
+typedef struct B B;
+
+typedef struct List_A {
+  struct A *members;
+  uintptr_t count;
+} List_A;
+
+typedef struct List_B {
+  struct B *members;
+  uintptr_t count;
+} List_B;
+
+void foo(struct List_A a);
+
+void bar(struct List_B b);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.both.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_2.both.compat.c
new file mode 100644
index 0000000..8f2b0be
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.both.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A A;
+
+typedef struct B B;
+
+typedef struct List_A {
+  struct A *members;
+  uintptr_t count;
+} List_A;
+
+typedef struct List_B {
+  struct B *members;
+  uintptr_t count;
+} List_B;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(struct List_A a);
+
+void bar(struct List_B b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.c b/cbindgen-0.24.5/tests/expectations/monomorph_2.c
new file mode 100644
index 0000000..010a335
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A A;
+
+typedef struct B B;
+
+typedef struct {
+  A *members;
+  uintptr_t count;
+} List_A;
+
+typedef struct {
+  B *members;
+  uintptr_t count;
+} List_B;
+
+void foo(List_A a);
+
+void bar(List_B b);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_2.compat.c
new file mode 100644
index 0000000..30c66ab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A A;
+
+typedef struct B B;
+
+typedef struct {
+  A *members;
+  uintptr_t count;
+} List_A;
+
+typedef struct {
+  B *members;
+  uintptr_t count;
+} List_B;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(List_A a);
+
+void bar(List_B b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.cpp b/cbindgen-0.24.5/tests/expectations/monomorph_2.cpp
new file mode 100644
index 0000000..41dde1b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct A;
+
+struct B;
+
+template<typename T>
+struct List {
+  T *members;
+  uintptr_t count;
+};
+
+extern "C" {
+
+void foo(List<A> a);
+
+void bar(List<B> b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.pyx b/cbindgen-0.24.5/tests/expectations/monomorph_2.pyx
new file mode 100644
index 0000000..00f8e7d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.pyx
@@ -0,0 +1,25 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct A:
+    pass
+
+  ctypedef struct B:
+    pass
+
+  ctypedef struct List_A:
+    A *members;
+    uintptr_t count;
+
+  ctypedef struct List_B:
+    B *members;
+    uintptr_t count;
+
+  void foo(List_A a);
+
+  void bar(List_B b);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.c b/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.c
new file mode 100644
index 0000000..e5a212a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A;
+
+struct B;
+
+struct List_A {
+  struct A *members;
+  uintptr_t count;
+};
+
+struct List_B {
+  struct B *members;
+  uintptr_t count;
+};
+
+void foo(struct List_A a);
+
+void bar(struct List_B b);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.compat.c
new file mode 100644
index 0000000..4d5fb0d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A;
+
+struct B;
+
+struct List_A {
+  struct A *members;
+  uintptr_t count;
+};
+
+struct List_B {
+  struct B *members;
+  uintptr_t count;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(struct List_A a);
+
+void bar(struct List_B b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.pyx b/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.pyx
new file mode 100644
index 0000000..98732a1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_2.tag.pyx
@@ -0,0 +1,25 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct A:
+    pass
+
+  cdef struct B:
+    pass
+
+  cdef struct List_A:
+    A *members;
+    uintptr_t count;
+
+  cdef struct List_B:
+    B *members;
+    uintptr_t count;
+
+  void foo(List_A a);
+
+  void bar(List_B b);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.both.c b/cbindgen-0.24.5/tests/expectations/monomorph_3.both.c
new file mode 100644
index 0000000..28d5013
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.both.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef union Foo_i32 {
+  const int32_t *data;
+} Foo_i32;
+
+typedef union Foo_f32 {
+  const float *data;
+} Foo_f32;
+
+typedef union Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef union Tuple_Foo_f32_____f32 {
+  const union Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef union Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef union Tuple_f32__f32 Indirection_f32;
+
+void root(union Foo_i32 a,
+          union Foo_f32 b,
+          struct Bar_f32 c,
+          union Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          union Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.both.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_3.both.compat.c
new file mode 100644
index 0000000..0ff0be2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.both.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef union Foo_i32 {
+  const int32_t *data;
+} Foo_i32;
+
+typedef union Foo_f32 {
+  const float *data;
+} Foo_f32;
+
+typedef union Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef union Tuple_Foo_f32_____f32 {
+  const union Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef union Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef union Tuple_f32__f32 Indirection_f32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(union Foo_i32 a,
+          union Foo_f32 b,
+          struct Bar_f32 c,
+          union Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          union Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.c b/cbindgen-0.24.5/tests/expectations/monomorph_3.c
new file mode 100644
index 0000000..bbe9cdc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef union {
+  const int32_t *data;
+} Foo_i32;
+
+typedef union {
+  const float *data;
+} Foo_f32;
+
+typedef union {
+  const Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef union {
+  const Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef union {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef Tuple_f32__f32 Indirection_f32;
+
+void root(Foo_i32 a,
+          Foo_f32 b,
+          Bar_f32 c,
+          Foo_Bar_f32 d,
+          Bar_Foo_f32 e,
+          Bar_Bar_f32 f,
+          Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_3.compat.c
new file mode 100644
index 0000000..b2fbd8d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar_Bar_f32 Bar_Bar_f32;
+
+typedef struct Bar_Foo_f32 Bar_Foo_f32;
+
+typedef struct Bar_f32 Bar_f32;
+
+typedef union {
+  const int32_t *data;
+} Foo_i32;
+
+typedef union {
+  const float *data;
+} Foo_f32;
+
+typedef union {
+  const Bar_f32 *data;
+} Foo_Bar_f32;
+
+typedef union {
+  const Foo_f32 *a;
+  const float *b;
+} Tuple_Foo_f32_____f32;
+
+typedef union {
+  const float *a;
+  const float *b;
+} Tuple_f32__f32;
+
+typedef Tuple_f32__f32 Indirection_f32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo_i32 a,
+          Foo_f32 b,
+          Bar_f32 c,
+          Foo_Bar_f32 d,
+          Bar_Foo_f32 e,
+          Bar_Bar_f32 f,
+          Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.cpp b/cbindgen-0.24.5/tests/expectations/monomorph_3.cpp
new file mode 100644
index 0000000..d833b32
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.cpp
@@ -0,0 +1,35 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct Bar;
+
+template<typename T>
+union Foo {
+  const T *data;
+};
+
+template<typename T, typename E>
+union Tuple {
+  const T *a;
+  const E *b;
+};
+
+template<typename T>
+using Indirection = Tuple<T, float>;
+
+extern "C" {
+
+void root(Foo<int32_t> a,
+          Foo<float> b,
+          Bar<float> c,
+          Foo<Bar<float>> d,
+          Bar<Foo<float>> e,
+          Bar<Bar<float>> f,
+          Tuple<Foo<float>, float> g,
+          Indirection<float> h);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.pyx b/cbindgen-0.24.5/tests/expectations/monomorph_3.pyx
new file mode 100644
index 0000000..b8de095
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.pyx
@@ -0,0 +1,44 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Bar_Bar_f32:
+    pass
+
+  ctypedef struct Bar_Foo_f32:
+    pass
+
+  ctypedef struct Bar_f32:
+    pass
+
+  ctypedef union Foo_i32:
+    const int32_t *data;
+
+  ctypedef union Foo_f32:
+    const float *data;
+
+  ctypedef union Foo_Bar_f32:
+    const Bar_f32 *data;
+
+  ctypedef union Tuple_Foo_f32_____f32:
+    const Foo_f32 *a;
+    const float *b;
+
+  ctypedef union Tuple_f32__f32:
+    const float *a;
+    const float *b;
+
+  ctypedef Tuple_f32__f32 Indirection_f32;
+
+  void root(Foo_i32 a,
+            Foo_f32 b,
+            Bar_f32 c,
+            Foo_Bar_f32 d,
+            Bar_Foo_f32 e,
+            Bar_Bar_f32 f,
+            Tuple_Foo_f32_____f32 g,
+            Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.c b/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.c
new file mode 100644
index 0000000..b5dd0a1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar_Bar_f32;
+
+struct Bar_Foo_f32;
+
+struct Bar_f32;
+
+union Foo_i32 {
+  const int32_t *data;
+};
+
+union Foo_f32 {
+  const float *data;
+};
+
+union Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+};
+
+union Tuple_Foo_f32_____f32 {
+  const union Foo_f32 *a;
+  const float *b;
+};
+
+union Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+};
+
+typedef union Tuple_f32__f32 Indirection_f32;
+
+void root(union Foo_i32 a,
+          union Foo_f32 b,
+          struct Bar_f32 c,
+          union Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          union Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.compat.c b/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.compat.c
new file mode 100644
index 0000000..7306b59
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.compat.c
@@ -0,0 +1,51 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar_Bar_f32;
+
+struct Bar_Foo_f32;
+
+struct Bar_f32;
+
+union Foo_i32 {
+  const int32_t *data;
+};
+
+union Foo_f32 {
+  const float *data;
+};
+
+union Foo_Bar_f32 {
+  const struct Bar_f32 *data;
+};
+
+union Tuple_Foo_f32_____f32 {
+  const union Foo_f32 *a;
+  const float *b;
+};
+
+union Tuple_f32__f32 {
+  const float *a;
+  const float *b;
+};
+
+typedef union Tuple_f32__f32 Indirection_f32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(union Foo_i32 a,
+          union Foo_f32 b,
+          struct Bar_f32 c,
+          union Foo_Bar_f32 d,
+          struct Bar_Foo_f32 e,
+          struct Bar_Bar_f32 f,
+          union Tuple_Foo_f32_____f32 g,
+          Indirection_f32 h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.pyx b/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.pyx
new file mode 100644
index 0000000..93690a6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/monomorph_3.tag.pyx
@@ -0,0 +1,44 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Bar_Bar_f32:
+    pass
+
+  cdef struct Bar_Foo_f32:
+    pass
+
+  cdef struct Bar_f32:
+    pass
+
+  cdef union Foo_i32:
+    const int32_t *data;
+
+  cdef union Foo_f32:
+    const float *data;
+
+  cdef union Foo_Bar_f32:
+    const Bar_f32 *data;
+
+  cdef union Tuple_Foo_f32_____f32:
+    const Foo_f32 *a;
+    const float *b;
+
+  cdef union Tuple_f32__f32:
+    const float *a;
+    const float *b;
+
+  ctypedef Tuple_f32__f32 Indirection_f32;
+
+  void root(Foo_i32 a,
+            Foo_f32 b,
+            Bar_f32 c,
+            Foo_Bar_f32 d,
+            Bar_Foo_f32 e,
+            Bar_Bar_f32 f,
+            Tuple_Foo_f32_____f32 g,
+            Indirection_f32 h);
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.both.c b/cbindgen-0.24.5/tests/expectations/must_use.both.c
new file mode 100644
index 0000000..c55ce31
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.both.c
@@ -0,0 +1,30 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MaybeOwnedPtr_i32_Tag {
+  Owned_i32,
+  None_i32,
+};
+typedef uint8_t MaybeOwnedPtr_i32_Tag;
+
+typedef struct MUST_USE_STRUCT MaybeOwnedPtr_i32 {
+  MaybeOwnedPtr_i32_Tag tag;
+  union {
+    struct {
+      int32_t *owned;
+    };
+  };
+} MaybeOwnedPtr_i32;
+
+typedef struct MUST_USE_STRUCT OwnedPtr_i32 {
+  int32_t *ptr;
+} OwnedPtr_i32;
+
+MUST_USE_FUNC struct MaybeOwnedPtr_i32 maybe_consume(struct OwnedPtr_i32 input);
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.both.compat.c b/cbindgen-0.24.5/tests/expectations/must_use.both.compat.c
new file mode 100644
index 0000000..cf5fafb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.both.compat.c
@@ -0,0 +1,44 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MaybeOwnedPtr_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Owned_i32,
+  None_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t MaybeOwnedPtr_i32_Tag;
+#endif // __cplusplus
+
+typedef struct MUST_USE_STRUCT MaybeOwnedPtr_i32 {
+  MaybeOwnedPtr_i32_Tag tag;
+  union {
+    struct {
+      int32_t *owned;
+    };
+  };
+} MaybeOwnedPtr_i32;
+
+typedef struct MUST_USE_STRUCT OwnedPtr_i32 {
+  int32_t *ptr;
+} OwnedPtr_i32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+MUST_USE_FUNC struct MaybeOwnedPtr_i32 maybe_consume(struct OwnedPtr_i32 input);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.c b/cbindgen-0.24.5/tests/expectations/must_use.c
new file mode 100644
index 0000000..1ecad72
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.c
@@ -0,0 +1,30 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MaybeOwnedPtr_i32_Tag {
+  Owned_i32,
+  None_i32,
+};
+typedef uint8_t MaybeOwnedPtr_i32_Tag;
+
+typedef struct MUST_USE_STRUCT {
+  MaybeOwnedPtr_i32_Tag tag;
+  union {
+    struct {
+      int32_t *owned;
+    };
+  };
+} MaybeOwnedPtr_i32;
+
+typedef struct MUST_USE_STRUCT {
+  int32_t *ptr;
+} OwnedPtr_i32;
+
+MUST_USE_FUNC MaybeOwnedPtr_i32 maybe_consume(OwnedPtr_i32 input);
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.compat.c b/cbindgen-0.24.5/tests/expectations/must_use.compat.c
new file mode 100644
index 0000000..d233a02
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.compat.c
@@ -0,0 +1,44 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MaybeOwnedPtr_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Owned_i32,
+  None_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t MaybeOwnedPtr_i32_Tag;
+#endif // __cplusplus
+
+typedef struct MUST_USE_STRUCT {
+  MaybeOwnedPtr_i32_Tag tag;
+  union {
+    struct {
+      int32_t *owned;
+    };
+  };
+} MaybeOwnedPtr_i32;
+
+typedef struct MUST_USE_STRUCT {
+  int32_t *ptr;
+} OwnedPtr_i32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+MUST_USE_FUNC MaybeOwnedPtr_i32 maybe_consume(OwnedPtr_i32 input);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.cpp b/cbindgen-0.24.5/tests/expectations/must_use.cpp
new file mode 100644
index 0000000..f2162cf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.cpp
@@ -0,0 +1,38 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T>
+struct MUST_USE_STRUCT MaybeOwnedPtr {
+  enum class MUST_USE_ENUM Tag : uint8_t {
+    Owned,
+    None,
+  };
+
+  struct Owned_Body {
+    T *_0;
+  };
+
+  Tag tag;
+  union {
+    Owned_Body owned;
+  };
+};
+
+template<typename T>
+struct MUST_USE_STRUCT OwnedPtr {
+  T *ptr;
+};
+
+extern "C" {
+
+MUST_USE_FUNC MaybeOwnedPtr<int32_t> maybe_consume(OwnedPtr<int32_t> input);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.pyx b/cbindgen-0.24.5/tests/expectations/must_use.pyx
new file mode 100644
index 0000000..50f9740
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.pyx
@@ -0,0 +1,26 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Owned_i32,
+    None_i32,
+  ctypedef uint8_t MaybeOwnedPtr_i32_Tag;
+
+  ctypedef struct MaybeOwnedPtr_i32:
+    MaybeOwnedPtr_i32_Tag tag;
+    int32_t *owned;
+
+  ctypedef struct OwnedPtr_i32:
+    int32_t *ptr;
+
+  MaybeOwnedPtr_i32 maybe_consume(OwnedPtr_i32 input);
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.tag.c b/cbindgen-0.24.5/tests/expectations/must_use.tag.c
new file mode 100644
index 0000000..16c3d34
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.tag.c
@@ -0,0 +1,30 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MaybeOwnedPtr_i32_Tag {
+  Owned_i32,
+  None_i32,
+};
+typedef uint8_t MaybeOwnedPtr_i32_Tag;
+
+struct MUST_USE_STRUCT MaybeOwnedPtr_i32 {
+  MaybeOwnedPtr_i32_Tag tag;
+  union {
+    struct {
+      int32_t *owned;
+    };
+  };
+};
+
+struct MUST_USE_STRUCT OwnedPtr_i32 {
+  int32_t *ptr;
+};
+
+MUST_USE_FUNC struct MaybeOwnedPtr_i32 maybe_consume(struct OwnedPtr_i32 input);
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.tag.compat.c b/cbindgen-0.24.5/tests/expectations/must_use.tag.compat.c
new file mode 100644
index 0000000..8bd71a0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.tag.compat.c
@@ -0,0 +1,44 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum MaybeOwnedPtr_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Owned_i32,
+  None_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t MaybeOwnedPtr_i32_Tag;
+#endif // __cplusplus
+
+struct MUST_USE_STRUCT MaybeOwnedPtr_i32 {
+  MaybeOwnedPtr_i32_Tag tag;
+  union {
+    struct {
+      int32_t *owned;
+    };
+  };
+};
+
+struct MUST_USE_STRUCT OwnedPtr_i32 {
+  int32_t *ptr;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+MUST_USE_FUNC struct MaybeOwnedPtr_i32 maybe_consume(struct OwnedPtr_i32 input);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/must_use.tag.pyx b/cbindgen-0.24.5/tests/expectations/must_use.tag.pyx
new file mode 100644
index 0000000..01e9df6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/must_use.tag.pyx
@@ -0,0 +1,26 @@
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    Owned_i32,
+    None_i32,
+  ctypedef uint8_t MaybeOwnedPtr_i32_Tag;
+
+  cdef struct MaybeOwnedPtr_i32:
+    MaybeOwnedPtr_i32_Tag tag;
+    int32_t *owned;
+
+  cdef struct OwnedPtr_i32:
+    int32_t *ptr;
+
+  MaybeOwnedPtr_i32 maybe_consume(OwnedPtr_i32 input);
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.both.c b/cbindgen-0.24.5/tests/expectations/namespace_constant.both.c
new file mode 100644
index 0000000..853713a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct Foo {
+  int32_t x[FOO];
+} Foo;
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.both.compat.c b/cbindgen-0.24.5/tests/expectations/namespace_constant.both.compat.c
new file mode 100644
index 0000000..ca8ddbc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.both.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace constants {
+#endif // __cplusplus
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct Foo {
+  int32_t x[FOO];
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace constants
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.c b/cbindgen-0.24.5/tests/expectations/namespace_constant.c
new file mode 100644
index 0000000..cb6f6cf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct {
+  int32_t x[FOO];
+} Foo;
+
+void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.compat.c b/cbindgen-0.24.5/tests/expectations/namespace_constant.compat.c
new file mode 100644
index 0000000..49e3f65
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace constants {
+#endif // __cplusplus
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct {
+  int32_t x[FOO];
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace constants
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.cpp b/cbindgen-0.24.5/tests/expectations/namespace_constant.cpp
new file mode 100644
index 0000000..889472c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+namespace constants {
+
+constexpr static const int32_t FOO = 10;
+
+constexpr static const float ZOM = 3.14;
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+extern "C" {
+
+void root(Foo x);
+
+} // extern "C"
+
+} // namespace constants
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.pyx b/cbindgen-0.24.5/tests/expectations/namespace_constant.pyx
new file mode 100644
index 0000000..8bc3b8b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t FOO # = 10
+
+  const float ZOM # = 3.14
+
+  ctypedef struct Foo:
+    int32_t x[FOO];
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.c b/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.c
new file mode 100644
index 0000000..80a8ea0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define ZOM 3.14
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.compat.c b/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.compat.c
new file mode 100644
index 0000000..cb599dc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.compat.c
@@ -0,0 +1,30 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace constants {
+#endif // __cplusplus
+
+#define FOO 10
+
+#define ZOM 3.14
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace constants
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.pyx b/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.pyx
new file mode 100644
index 0000000..8c1d8aa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespace_constant.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t FOO # = 10
+
+  const float ZOM # = 3.14
+
+  cdef struct Foo:
+    int32_t x[FOO];
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.both.c b/cbindgen-0.24.5/tests/expectations/namespaces_constant.both.c
new file mode 100644
index 0000000..853713a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct Foo {
+  int32_t x[FOO];
+} Foo;
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.both.compat.c b/cbindgen-0.24.5/tests/expectations/namespaces_constant.both.compat.c
new file mode 100644
index 0000000..c253d74
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.both.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace constants {
+namespace test {
+#endif // __cplusplus
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct Foo {
+  int32_t x[FOO];
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace test
+} // namespace constants
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.c b/cbindgen-0.24.5/tests/expectations/namespaces_constant.c
new file mode 100644
index 0000000..cb6f6cf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct {
+  int32_t x[FOO];
+} Foo;
+
+void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.compat.c b/cbindgen-0.24.5/tests/expectations/namespaces_constant.compat.c
new file mode 100644
index 0000000..5c4a35f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace constants {
+namespace test {
+#endif // __cplusplus
+
+#define FOO 10
+
+#define ZOM 3.14
+
+typedef struct {
+  int32_t x[FOO];
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace test
+} // namespace constants
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.cpp b/cbindgen-0.24.5/tests/expectations/namespaces_constant.cpp
new file mode 100644
index 0000000..2da55d7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.cpp
@@ -0,0 +1,25 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+namespace constants {
+namespace test {
+
+constexpr static const int32_t FOO = 10;
+
+constexpr static const float ZOM = 3.14;
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+extern "C" {
+
+void root(Foo x);
+
+} // extern "C"
+
+} // namespace test
+} // namespace constants
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.pyx b/cbindgen-0.24.5/tests/expectations/namespaces_constant.pyx
new file mode 100644
index 0000000..8bc3b8b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t FOO # = 10
+
+  const float ZOM # = 3.14
+
+  ctypedef struct Foo:
+    int32_t x[FOO];
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.c b/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.c
new file mode 100644
index 0000000..80a8ea0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define FOO 10
+
+#define ZOM 3.14
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+void root(struct Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.compat.c b/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.compat.c
new file mode 100644
index 0000000..fd57fcc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace constants {
+namespace test {
+#endif // __cplusplus
+
+#define FOO 10
+
+#define ZOM 3.14
+
+struct Foo {
+  int32_t x[FOO];
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace test
+} // namespace constants
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.pyx b/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.pyx
new file mode 100644
index 0000000..8c1d8aa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/namespaces_constant.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t FOO # = 10
+
+  const float ZOM # = 3.14
+
+  cdef struct Foo:
+    int32_t x[FOO];
+
+  void root(Foo x);
diff --git a/cbindgen-0.24.5/tests/expectations/nested_import.compat.c b/cbindgen-0.24.5/tests/expectations/nested_import.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nested_import.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/nested_import.cpp b/cbindgen-0.24.5/tests/expectations/nested_import.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nested_import.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/nested_import.pyx b/cbindgen-0.24.5/tests/expectations/nested_import.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nested_import.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/no_includes.c b/cbindgen-0.24.5/tests/expectations/no_includes.c
new file mode 100644
index 0000000..34194d0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/no_includes.c
@@ -0,0 +1 @@
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/no_includes.compat.c b/cbindgen-0.24.5/tests/expectations/no_includes.compat.c
new file mode 100644
index 0000000..cbb5e76
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/no_includes.compat.c
@@ -0,0 +1,9 @@
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/no_includes.cpp b/cbindgen-0.24.5/tests/expectations/no_includes.cpp
new file mode 100644
index 0000000..ba8247b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/no_includes.cpp
@@ -0,0 +1,6 @@
+
+extern "C" {
+
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/no_includes.pyx b/cbindgen-0.24.5/tests/expectations/no_includes.pyx
new file mode 100644
index 0000000..d5f4496
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/no_includes.pyx
@@ -0,0 +1,4 @@
+
+cdef extern from *:
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.both.c b/cbindgen-0.24.5/tests/expectations/nonnull.both.c
new file mode 100644
index 0000000..c4048d3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.both.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Foo_u64 {
+  float *a;
+  uint64_t *b;
+  struct Opaque *c;
+  uint64_t **d;
+  float **e;
+  struct Opaque **f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t **i;
+} Foo_u64;
+
+void root(int32_t *arg, struct Foo_u64 *foo, struct Opaque **d);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.both.compat.c b/cbindgen-0.24.5/tests/expectations/nonnull.both.compat.c
new file mode 100644
index 0000000..018743b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.both.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Foo_u64 {
+  float *a;
+  uint64_t *b;
+  struct Opaque *c;
+  uint64_t **d;
+  float **e;
+  struct Opaque **f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t **i;
+} Foo_u64;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(int32_t *arg, struct Foo_u64 *foo, struct Opaque **d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.c b/cbindgen-0.24.5/tests/expectations/nonnull.c
new file mode 100644
index 0000000..d128664
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  float *a;
+  uint64_t *b;
+  Opaque *c;
+  uint64_t **d;
+  float **e;
+  Opaque **f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t **i;
+} Foo_u64;
+
+void root(int32_t *arg, Foo_u64 *foo, Opaque **d);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.compat.c b/cbindgen-0.24.5/tests/expectations/nonnull.compat.c
new file mode 100644
index 0000000..a2605e0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  float *a;
+  uint64_t *b;
+  Opaque *c;
+  uint64_t **d;
+  float **e;
+  Opaque **f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t **i;
+} Foo_u64;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(int32_t *arg, Foo_u64 *foo, Opaque **d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.cpp b/cbindgen-0.24.5/tests/expectations/nonnull.cpp
new file mode 100644
index 0000000..323949a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.cpp
@@ -0,0 +1,26 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Opaque;
+
+template<typename T>
+struct Foo {
+  float *a;
+  T *b;
+  Opaque *c;
+  T **d;
+  float **e;
+  Opaque **f;
+  T *g;
+  int32_t *h;
+  int32_t **i;
+};
+
+extern "C" {
+
+void root(int32_t *arg, Foo<uint64_t> *foo, Opaque **d);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.pyx b/cbindgen-0.24.5/tests/expectations/nonnull.pyx
new file mode 100644
index 0000000..15ce8b2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.pyx
@@ -0,0 +1,23 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Opaque:
+    pass
+
+  ctypedef struct Foo_u64:
+    float *a;
+    uint64_t *b;
+    Opaque *c;
+    uint64_t **d;
+    float **e;
+    Opaque **f;
+    uint64_t *g;
+    int32_t *h;
+    int32_t **i;
+
+  void root(int32_t *arg, Foo_u64 *foo, Opaque **d);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.tag.c b/cbindgen-0.24.5/tests/expectations/nonnull.tag.c
new file mode 100644
index 0000000..566bb36
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.tag.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct Foo_u64 {
+  float *a;
+  uint64_t *b;
+  struct Opaque *c;
+  uint64_t **d;
+  float **e;
+  struct Opaque **f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t **i;
+};
+
+void root(int32_t *arg, struct Foo_u64 *foo, struct Opaque **d);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.tag.compat.c b/cbindgen-0.24.5/tests/expectations/nonnull.tag.compat.c
new file mode 100644
index 0000000..2a074c8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.tag.compat.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct Foo_u64 {
+  float *a;
+  uint64_t *b;
+  struct Opaque *c;
+  uint64_t **d;
+  float **e;
+  struct Opaque **f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t **i;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(int32_t *arg, struct Foo_u64 *foo, struct Opaque **d);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull.tag.pyx b/cbindgen-0.24.5/tests/expectations/nonnull.tag.pyx
new file mode 100644
index 0000000..ce3e8d2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull.tag.pyx
@@ -0,0 +1,23 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Opaque:
+    pass
+
+  cdef struct Foo_u64:
+    float *a;
+    uint64_t *b;
+    Opaque *c;
+    uint64_t **d;
+    float **e;
+    Opaque **f;
+    uint64_t *g;
+    int32_t *h;
+    int32_t **i;
+
+  void root(int32_t *arg, Foo_u64 *foo, Opaque **d);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.both.c b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.both.c
new file mode 100644
index 0000000..2520f31
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.both.c
@@ -0,0 +1,52 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct References {
+  const struct Opaque *CBINDGEN_NONNULL a;
+  struct Opaque *CBINDGEN_NONNULL b;
+  const struct Opaque *c;
+  struct Opaque *d;
+} References;
+
+typedef struct Pointers_u64 {
+  float *CBINDGEN_NONNULL a;
+  uint64_t *CBINDGEN_NONNULL b;
+  struct Opaque *CBINDGEN_NONNULL c;
+  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const uint64_t *j;
+  uint64_t *k;
+} Pointers_u64;
+
+void value_arg(struct References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    struct Pointers_u64 *foo,
+                    struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const struct Pointers_u64 *arg);
+
+void optional_mut_ref_arg(struct Pointers_u64 *arg);
+
+void nullable_const_ptr(const struct Pointers_u64 *arg);
+
+void nullable_mut_ptr(struct Pointers_u64 *arg);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.both.compat.c b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.both.compat.c
new file mode 100644
index 0000000..4ba7254
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.both.compat.c
@@ -0,0 +1,60 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct References {
+  const struct Opaque *CBINDGEN_NONNULL a;
+  struct Opaque *CBINDGEN_NONNULL b;
+  const struct Opaque *c;
+  struct Opaque *d;
+} References;
+
+typedef struct Pointers_u64 {
+  float *CBINDGEN_NONNULL a;
+  uint64_t *CBINDGEN_NONNULL b;
+  struct Opaque *CBINDGEN_NONNULL c;
+  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const uint64_t *j;
+  uint64_t *k;
+} Pointers_u64;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void value_arg(struct References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    struct Pointers_u64 *foo,
+                    struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const struct Pointers_u64 *arg);
+
+void optional_mut_ref_arg(struct Pointers_u64 *arg);
+
+void nullable_const_ptr(const struct Pointers_u64 *arg);
+
+void nullable_mut_ptr(struct Pointers_u64 *arg);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.c b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.c
new file mode 100644
index 0000000..b48a100
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.c
@@ -0,0 +1,52 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  const Opaque *CBINDGEN_NONNULL a;
+  Opaque *CBINDGEN_NONNULL b;
+  const Opaque *c;
+  Opaque *d;
+} References;
+
+typedef struct {
+  float *CBINDGEN_NONNULL a;
+  uint64_t *CBINDGEN_NONNULL b;
+  Opaque *CBINDGEN_NONNULL c;
+  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const uint64_t *j;
+  uint64_t *k;
+} Pointers_u64;
+
+void value_arg(References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    Pointers_u64 *foo,
+                    Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const Pointers_u64 *arg);
+
+void optional_mut_ref_arg(Pointers_u64 *arg);
+
+void nullable_const_ptr(const Pointers_u64 *arg);
+
+void nullable_mut_ptr(Pointers_u64 *arg);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.compat.c b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.compat.c
new file mode 100644
index 0000000..726b179
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.compat.c
@@ -0,0 +1,60 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  const Opaque *CBINDGEN_NONNULL a;
+  Opaque *CBINDGEN_NONNULL b;
+  const Opaque *c;
+  Opaque *d;
+} References;
+
+typedef struct {
+  float *CBINDGEN_NONNULL a;
+  uint64_t *CBINDGEN_NONNULL b;
+  Opaque *CBINDGEN_NONNULL c;
+  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const uint64_t *j;
+  uint64_t *k;
+} Pointers_u64;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void value_arg(References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    Pointers_u64 *foo,
+                    Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const Pointers_u64 *arg);
+
+void optional_mut_ref_arg(Pointers_u64 *arg);
+
+void nullable_const_ptr(const Pointers_u64 *arg);
+
+void nullable_mut_ptr(Pointers_u64 *arg);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.cpp b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.cpp
new file mode 100644
index 0000000..b57592a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.cpp
@@ -0,0 +1,58 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Opaque;
+
+struct References {
+  const Opaque *CBINDGEN_NONNULL a;
+  Opaque *CBINDGEN_NONNULL b;
+  const Opaque *c;
+  Opaque *d;
+};
+
+template<typename T>
+struct Pointers {
+  float *CBINDGEN_NONNULL a;
+  T *CBINDGEN_NONNULL b;
+  Opaque *CBINDGEN_NONNULL c;
+  T *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  T *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const T *j;
+  T *k;
+};
+
+extern "C" {
+
+void value_arg(References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    Pointers<uint64_t> *foo,
+                    Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const Pointers<uint64_t> *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(Pointers<uint64_t> *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const Pointers<uint64_t> *arg);
+
+void optional_mut_ref_arg(Pointers<uint64_t> *arg);
+
+void nullable_const_ptr(const Pointers<uint64_t> *arg);
+
+void nullable_mut_ptr(Pointers<uint64_t> *arg);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.pyx b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.pyx
new file mode 100644
index 0000000..c6f90fa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.pyx
@@ -0,0 +1,52 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Opaque:
+    pass
+
+  ctypedef struct References:
+    const Opaque *a;
+    Opaque *b;
+    const Opaque *c;
+    Opaque *d;
+
+  ctypedef struct Pointers_u64:
+    float *a;
+    uint64_t *b;
+    Opaque *c;
+    uint64_t **d;
+    float **e;
+    Opaque **f;
+    uint64_t *g;
+    int32_t *h;
+    int32_t **i;
+    const uint64_t *j;
+    uint64_t *k;
+
+  void value_arg(References arg);
+
+  void mutltiple_args(int32_t *arg, Pointers_u64 *foo, Opaque **d);
+
+  void ref_arg(const Pointers_u64 *arg);
+
+  void mut_ref_arg(Pointers_u64 *arg);
+
+  void optional_ref_arg(const Pointers_u64 *arg);
+
+  void optional_mut_ref_arg(Pointers_u64 *arg);
+
+  void nullable_const_ptr(const Pointers_u64 *arg);
+
+  void nullable_mut_ptr(Pointers_u64 *arg);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.c b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.c
new file mode 100644
index 0000000..21d1153
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.c
@@ -0,0 +1,52 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct References {
+  const struct Opaque *CBINDGEN_NONNULL a;
+  struct Opaque *CBINDGEN_NONNULL b;
+  const struct Opaque *c;
+  struct Opaque *d;
+};
+
+struct Pointers_u64 {
+  float *CBINDGEN_NONNULL a;
+  uint64_t *CBINDGEN_NONNULL b;
+  struct Opaque *CBINDGEN_NONNULL c;
+  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const uint64_t *j;
+  uint64_t *k;
+};
+
+void value_arg(struct References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    struct Pointers_u64 *foo,
+                    struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const struct Pointers_u64 *arg);
+
+void optional_mut_ref_arg(struct Pointers_u64 *arg);
+
+void nullable_const_ptr(const struct Pointers_u64 *arg);
+
+void nullable_mut_ptr(struct Pointers_u64 *arg);
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.compat.c b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.compat.c
new file mode 100644
index 0000000..757f572
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.compat.c
@@ -0,0 +1,60 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct References {
+  const struct Opaque *CBINDGEN_NONNULL a;
+  struct Opaque *CBINDGEN_NONNULL b;
+  const struct Opaque *c;
+  struct Opaque *d;
+};
+
+struct Pointers_u64 {
+  float *CBINDGEN_NONNULL a;
+  uint64_t *CBINDGEN_NONNULL b;
+  struct Opaque *CBINDGEN_NONNULL c;
+  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
+  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
+  struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
+  uint64_t *g;
+  int32_t *h;
+  int32_t *CBINDGEN_NONNULL *i;
+  const uint64_t *j;
+  uint64_t *k;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void value_arg(struct References arg);
+
+void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
+                    struct Pointers_u64 *foo,
+                    struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);
+
+void ref_arg(const struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void mut_ref_arg(struct Pointers_u64 *CBINDGEN_NONNULL arg);
+
+void optional_ref_arg(const struct Pointers_u64 *arg);
+
+void optional_mut_ref_arg(struct Pointers_u64 *arg);
+
+void nullable_const_ptr(const struct Pointers_u64 *arg);
+
+void nullable_mut_ptr(struct Pointers_u64 *arg);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.pyx b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.pyx
new file mode 100644
index 0000000..16327ab
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonnull_attribute.tag.pyx
@@ -0,0 +1,52 @@
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Opaque:
+    pass
+
+  cdef struct References:
+    const Opaque *a;
+    Opaque *b;
+    const Opaque *c;
+    Opaque *d;
+
+  cdef struct Pointers_u64:
+    float *a;
+    uint64_t *b;
+    Opaque *c;
+    uint64_t **d;
+    float **e;
+    Opaque **f;
+    uint64_t *g;
+    int32_t *h;
+    int32_t **i;
+    const uint64_t *j;
+    uint64_t *k;
+
+  void value_arg(References arg);
+
+  void mutltiple_args(int32_t *arg, Pointers_u64 *foo, Opaque **d);
+
+  void ref_arg(const Pointers_u64 *arg);
+
+  void mut_ref_arg(Pointers_u64 *arg);
+
+  void optional_ref_arg(const Pointers_u64 *arg);
+
+  void optional_mut_ref_arg(Pointers_u64 *arg);
+
+  void nullable_const_ptr(const Pointers_u64 *arg);
+
+  void nullable_mut_ptr(Pointers_u64 *arg);
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.both.c b/cbindgen-0.24.5/tests/expectations/nonzero.both.c
new file mode 100644
index 0000000..4999765
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.both.c
@@ -0,0 +1,44 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i64 Option_i64;
+
+typedef struct NonZeroTest {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const struct Option_i64 *j;
+} NonZeroTest;
+
+void root(struct NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const struct Option_i64 *j);
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.both.compat.c b/cbindgen-0.24.5/tests/expectations/nonzero.both.compat.c
new file mode 100644
index 0000000..c0dba9e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.both.compat.c
@@ -0,0 +1,52 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i64 Option_i64;
+
+typedef struct NonZeroTest {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const struct Option_i64 *j;
+} NonZeroTest;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const struct Option_i64 *j);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.c b/cbindgen-0.24.5/tests/expectations/nonzero.c
new file mode 100644
index 0000000..aaf47d0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.c
@@ -0,0 +1,44 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i64 Option_i64;
+
+typedef struct {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const Option_i64 *j;
+} NonZeroTest;
+
+void root(NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const Option_i64 *j);
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.compat.c b/cbindgen-0.24.5/tests/expectations/nonzero.compat.c
new file mode 100644
index 0000000..052e573
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.compat.c
@@ -0,0 +1,52 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i64 Option_i64;
+
+typedef struct {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const Option_i64 *j;
+} NonZeroTest;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const Option_i64 *j);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.cpp b/cbindgen-0.24.5/tests/expectations/nonzero.cpp
new file mode 100644
index 0000000..7bae672
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.cpp
@@ -0,0 +1,50 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct Option;
+
+struct NonZeroTest {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const Option<int64_t> *j;
+};
+
+extern "C" {
+
+void root(NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const Option<int64_t> *j);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.pyx b/cbindgen-0.24.5/tests/expectations/nonzero.pyx
new file mode 100644
index 0000000..84b9cb9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.pyx
@@ -0,0 +1,47 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Option_i64:
+    pass
+
+  ctypedef struct NonZeroTest:
+    uint8_t a;
+    uint16_t b;
+    uint32_t c;
+    uint64_t d;
+    int8_t e;
+    int16_t f;
+    int32_t g;
+    int64_t h;
+    int64_t i;
+    const Option_i64 *j;
+
+  void root(NonZeroTest test,
+            uint8_t a,
+            uint16_t b,
+            uint32_t c,
+            uint64_t d,
+            int8_t e,
+            int16_t f,
+            int32_t g,
+            int64_t h,
+            int64_t i,
+            const Option_i64 *j);
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.tag.c b/cbindgen-0.24.5/tests/expectations/nonzero.tag.c
new file mode 100644
index 0000000..7a28efd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.tag.c
@@ -0,0 +1,44 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Option_i64;
+
+struct NonZeroTest {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const struct Option_i64 *j;
+};
+
+void root(struct NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const struct Option_i64 *j);
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.tag.compat.c b/cbindgen-0.24.5/tests/expectations/nonzero.tag.compat.c
new file mode 100644
index 0000000..bf9a121
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.tag.compat.c
@@ -0,0 +1,52 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Option_i64;
+
+struct NonZeroTest {
+  uint8_t a;
+  uint16_t b;
+  uint32_t c;
+  uint64_t d;
+  int8_t e;
+  int16_t f;
+  int32_t g;
+  int64_t h;
+  int64_t i;
+  const struct Option_i64 *j;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct NonZeroTest test,
+          uint8_t a,
+          uint16_t b,
+          uint32_t c,
+          uint64_t d,
+          int8_t e,
+          int16_t f,
+          int32_t g,
+          int64_t h,
+          int64_t i,
+          const struct Option_i64 *j);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/nonzero.tag.pyx b/cbindgen-0.24.5/tests/expectations/nonzero.tag.pyx
new file mode 100644
index 0000000..88b309a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/nonzero.tag.pyx
@@ -0,0 +1,47 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Option_i64:
+    pass
+
+  cdef struct NonZeroTest:
+    uint8_t a;
+    uint16_t b;
+    uint32_t c;
+    uint64_t d;
+    int8_t e;
+    int16_t f;
+    int32_t g;
+    int64_t h;
+    int64_t i;
+    const Option_i64 *j;
+
+  void root(NonZeroTest test,
+            uint8_t a,
+            uint16_t b,
+            uint32_t c,
+            uint64_t d,
+            int8_t e,
+            int16_t f,
+            int32_t g,
+            int64_t h,
+            int64_t i,
+            const Option_i64 *j);
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.both.c b/cbindgen-0.24.5/tests/expectations/opaque.both.c
new file mode 100644
index 0000000..6b36d9e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.both.c
@@ -0,0 +1,36 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher HashMap_i32__i32__BuildHasherDefault_DefaultHasher;
+
+typedef struct Result_Foo Result_Foo;
+
+/**
+ * Fast hash map used internally.
+ */
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+typedef FastHashMap_i32__i32 Foo;
+
+typedef struct Result_Foo Bar;
+
+void root(const Foo *a, const Bar *b);
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.both.compat.c b/cbindgen-0.24.5/tests/expectations/opaque.both.compat.c
new file mode 100644
index 0000000..5ca0a79
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.both.compat.c
@@ -0,0 +1,44 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher HashMap_i32__i32__BuildHasherDefault_DefaultHasher;
+
+typedef struct Result_Foo Result_Foo;
+
+/**
+ * Fast hash map used internally.
+ */
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+typedef FastHashMap_i32__i32 Foo;
+
+typedef struct Result_Foo Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const Bar *b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.c b/cbindgen-0.24.5/tests/expectations/opaque.c
new file mode 100644
index 0000000..3a920e5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.c
@@ -0,0 +1,36 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher HashMap_i32__i32__BuildHasherDefault_DefaultHasher;
+
+typedef struct Result_Foo Result_Foo;
+
+/**
+ * Fast hash map used internally.
+ */
+typedef HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+typedef FastHashMap_i32__i32 Foo;
+
+typedef Result_Foo Bar;
+
+void root(const Foo *a, const Bar *b);
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.compat.c b/cbindgen-0.24.5/tests/expectations/opaque.compat.c
new file mode 100644
index 0000000..0efe467
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.compat.c
@@ -0,0 +1,44 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher HashMap_i32__i32__BuildHasherDefault_DefaultHasher;
+
+typedef struct Result_Foo Result_Foo;
+
+/**
+ * Fast hash map used internally.
+ */
+typedef HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+typedef FastHashMap_i32__i32 Foo;
+
+typedef Result_Foo Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const Bar *b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.cpp b/cbindgen-0.24.5/tests/expectations/opaque.cpp
new file mode 100644
index 0000000..ea14421
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.cpp
@@ -0,0 +1,42 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename K = void, typename V = void, typename Hasher = void>
+struct HashMap;
+
+template<typename T = void, typename E = void>
+struct Result;
+
+/// Fast hash map used internally.
+template<typename K, typename V>
+using FastHashMap = HashMap<K, V, BuildHasherDefault<DefaultHasher>>;
+
+using Foo = FastHashMap<int32_t, int32_t>;
+
+using Bar = Result<Foo>;
+
+extern "C" {
+
+void root(const Foo *a, const Bar *b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.pyx b/cbindgen-0.24.5/tests/expectations/opaque.pyx
new file mode 100644
index 0000000..f60cfdb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.pyx
@@ -0,0 +1,39 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher:
+    pass
+
+  ctypedef struct Result_Foo:
+    pass
+
+  # Fast hash map used internally.
+  ctypedef HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+  ctypedef FastHashMap_i32__i32 Foo;
+
+  ctypedef Result_Foo Bar;
+
+  void root(const Foo *a, const Bar *b);
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.tag.c b/cbindgen-0.24.5/tests/expectations/opaque.tag.c
new file mode 100644
index 0000000..67d7740
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.tag.c
@@ -0,0 +1,36 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher;
+
+struct Result_Foo;
+
+/**
+ * Fast hash map used internally.
+ */
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+typedef FastHashMap_i32__i32 Foo;
+
+typedef struct Result_Foo Bar;
+
+void root(const Foo *a, const Bar *b);
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.tag.compat.c b/cbindgen-0.24.5/tests/expectations/opaque.tag.compat.c
new file mode 100644
index 0000000..4fef399
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.tag.compat.c
@@ -0,0 +1,44 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher;
+
+struct Result_Foo;
+
+/**
+ * Fast hash map used internally.
+ */
+typedef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+typedef FastHashMap_i32__i32 Foo;
+
+typedef struct Result_Foo Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Foo *a, const Bar *b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/opaque.tag.pyx b/cbindgen-0.24.5/tests/expectations/opaque.tag.pyx
new file mode 100644
index 0000000..694073f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/opaque.tag.pyx
@@ -0,0 +1,39 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct HashMap_i32__i32__BuildHasherDefault_DefaultHasher:
+    pass
+
+  cdef struct Result_Foo:
+    pass
+
+  # Fast hash map used internally.
+  ctypedef HashMap_i32__i32__BuildHasherDefault_DefaultHasher FastHashMap_i32__i32;
+
+  ctypedef FastHashMap_i32__i32 Foo;
+
+  ctypedef Result_Foo Bar;
+
+  void root(const Foo *a, const Bar *b);
diff --git a/cbindgen-0.24.5/tests/expectations/pin.both.c b/cbindgen-0.24.5/tests/expectations/pin.both.c
new file mode 100644
index 0000000..c43b4c3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.both.c
@@ -0,0 +1,27 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct PinTest {
+  int32_t *pinned_box;
+  int32_t *pinned_ref;
+} PinTest;
+
+void root(int32_t *s, struct PinTest p);
diff --git a/cbindgen-0.24.5/tests/expectations/pin.both.compat.c b/cbindgen-0.24.5/tests/expectations/pin.both.compat.c
new file mode 100644
index 0000000..126cb66
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.both.compat.c
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct PinTest {
+  int32_t *pinned_box;
+  int32_t *pinned_ref;
+} PinTest;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(int32_t *s, struct PinTest p);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/pin.c b/cbindgen-0.24.5/tests/expectations/pin.c
new file mode 100644
index 0000000..df4cd32
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.c
@@ -0,0 +1,27 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t *pinned_box;
+  int32_t *pinned_ref;
+} PinTest;
+
+void root(int32_t *s, PinTest p);
diff --git a/cbindgen-0.24.5/tests/expectations/pin.compat.c b/cbindgen-0.24.5/tests/expectations/pin.compat.c
new file mode 100644
index 0000000..2cccd3e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.compat.c
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t *pinned_box;
+  int32_t *pinned_ref;
+} PinTest;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(int32_t *s, PinTest p);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/pin.cpp b/cbindgen-0.24.5/tests/expectations/pin.cpp
new file mode 100644
index 0000000..8a5bc2c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.cpp
@@ -0,0 +1,32 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct PinTest {
+  Pin<Box<int32_t>> pinned_box;
+  Pin<int32_t*> pinned_ref;
+};
+
+extern "C" {
+
+void root(Pin<int32_t*> s, PinTest p);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/pin.pyx b/cbindgen-0.24.5/tests/expectations/pin.pyx
new file mode 100644
index 0000000..f5336e6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.pyx
@@ -0,0 +1,29 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct PinTest:
+    int32_t *pinned_box;
+    int32_t *pinned_ref;
+
+  void root(int32_t *s, PinTest p);
diff --git a/cbindgen-0.24.5/tests/expectations/pin.tag.c b/cbindgen-0.24.5/tests/expectations/pin.tag.c
new file mode 100644
index 0000000..49fb9d8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.tag.c
@@ -0,0 +1,27 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct PinTest {
+  int32_t *pinned_box;
+  int32_t *pinned_ref;
+};
+
+void root(int32_t *s, struct PinTest p);
diff --git a/cbindgen-0.24.5/tests/expectations/pin.tag.compat.c b/cbindgen-0.24.5/tests/expectations/pin.tag.compat.c
new file mode 100644
index 0000000..ecaae82
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.tag.compat.c
@@ -0,0 +1,35 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct PinTest {
+  int32_t *pinned_box;
+  int32_t *pinned_ref;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(int32_t *s, struct PinTest p);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/pin.tag.pyx b/cbindgen-0.24.5/tests/expectations/pin.tag.pyx
new file mode 100644
index 0000000..04a60d7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pin.tag.pyx
@@ -0,0 +1,29 @@
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct PinTest:
+    int32_t *pinned_box;
+    int32_t *pinned_ref;
+
+  void root(int32_t *s, PinTest p);
diff --git a/cbindgen-0.24.5/tests/expectations/pragma_once.c b/cbindgen-0.24.5/tests/expectations/pragma_once.c
new file mode 100644
index 0000000..d5233c6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pragma_once.c
@@ -0,0 +1,8 @@
+#pragma once
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/pragma_once.compat.c b/cbindgen-0.24.5/tests/expectations/pragma_once.compat.c
new file mode 100644
index 0000000..2a6e9b1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pragma_once.compat.c
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/pragma_once.cpp b/cbindgen-0.24.5/tests/expectations/pragma_once.cpp
new file mode 100644
index 0000000..4d29d96
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pragma_once.cpp
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/pragma_once.pyx b/cbindgen-0.24.5/tests/expectations/pragma_once.pyx
new file mode 100644
index 0000000..133a763
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/pragma_once.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.both.c b/cbindgen-0.24.5/tests/expectations/prefix.both.c
new file mode 100644
index 0000000..1eb9f74
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.both.c
@@ -0,0 +1,31 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define PREFIX_LEN 22
+
+#define PREFIX_X (22 << 22)
+
+#define PREFIX_Y (PREFIX_X + PREFIX_X)
+
+typedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+typedef int32_t PREFIX_ValuedLenArray[22];
+
+enum PREFIX_AbsoluteFontWeight_Tag {
+  Weight,
+  Normal,
+  Bold,
+};
+typedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+
+typedef union PREFIX_AbsoluteFontWeight {
+  PREFIX_AbsoluteFontWeight_Tag tag;
+  struct {
+    PREFIX_AbsoluteFontWeight_Tag weight_tag;
+    float weight;
+  };
+} PREFIX_AbsoluteFontWeight;
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, union PREFIX_AbsoluteFontWeight z);
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.both.compat.c b/cbindgen-0.24.5/tests/expectations/prefix.both.compat.c
new file mode 100644
index 0000000..9f227b9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.both.compat.c
@@ -0,0 +1,45 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define PREFIX_LEN 22
+
+#define PREFIX_X (22 << 22)
+
+#define PREFIX_Y (PREFIX_X + PREFIX_X)
+
+typedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+typedef int32_t PREFIX_ValuedLenArray[22];
+
+enum PREFIX_AbsoluteFontWeight_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Weight,
+  Normal,
+  Bold,
+};
+#ifndef __cplusplus
+typedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+#endif // __cplusplus
+
+typedef union PREFIX_AbsoluteFontWeight {
+  PREFIX_AbsoluteFontWeight_Tag tag;
+  struct {
+    PREFIX_AbsoluteFontWeight_Tag weight_tag;
+    float weight;
+  };
+} PREFIX_AbsoluteFontWeight;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, union PREFIX_AbsoluteFontWeight z);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.c b/cbindgen-0.24.5/tests/expectations/prefix.c
new file mode 100644
index 0000000..4ef6a71
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.c
@@ -0,0 +1,31 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define PREFIX_LEN 22
+
+#define PREFIX_X (22 << 22)
+
+#define PREFIX_Y (PREFIX_X + PREFIX_X)
+
+typedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+typedef int32_t PREFIX_ValuedLenArray[22];
+
+enum PREFIX_AbsoluteFontWeight_Tag {
+  Weight,
+  Normal,
+  Bold,
+};
+typedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+
+typedef union {
+  PREFIX_AbsoluteFontWeight_Tag tag;
+  struct {
+    PREFIX_AbsoluteFontWeight_Tag weight_tag;
+    float weight;
+  };
+} PREFIX_AbsoluteFontWeight;
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, PREFIX_AbsoluteFontWeight z);
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.compat.c b/cbindgen-0.24.5/tests/expectations/prefix.compat.c
new file mode 100644
index 0000000..b307000
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.compat.c
@@ -0,0 +1,45 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define PREFIX_LEN 22
+
+#define PREFIX_X (22 << 22)
+
+#define PREFIX_Y (PREFIX_X + PREFIX_X)
+
+typedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+typedef int32_t PREFIX_ValuedLenArray[22];
+
+enum PREFIX_AbsoluteFontWeight_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Weight,
+  Normal,
+  Bold,
+};
+#ifndef __cplusplus
+typedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+#endif // __cplusplus
+
+typedef union {
+  PREFIX_AbsoluteFontWeight_Tag tag;
+  struct {
+    PREFIX_AbsoluteFontWeight_Tag weight_tag;
+    float weight;
+  };
+} PREFIX_AbsoluteFontWeight;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, PREFIX_AbsoluteFontWeight z);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.cpp b/cbindgen-0.24.5/tests/expectations/prefix.cpp
new file mode 100644
index 0000000..7f2c8ba
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.cpp
@@ -0,0 +1,39 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const int32_t PREFIX_LEN = 22;
+
+constexpr static const int64_t PREFIX_X = (22 << 22);
+
+constexpr static const int64_t PREFIX_Y = (PREFIX_X + PREFIX_X);
+
+using PREFIX_NamedLenArray = int32_t[PREFIX_LEN];
+
+using PREFIX_ValuedLenArray = int32_t[22];
+
+union PREFIX_AbsoluteFontWeight {
+  enum class Tag : uint8_t {
+    Weight,
+    Normal,
+    Bold,
+  };
+
+  struct Weight_Body {
+    Tag tag;
+    float _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Weight_Body weight;
+};
+
+extern "C" {
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, PREFIX_AbsoluteFontWeight z);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.pyx b/cbindgen-0.24.5/tests/expectations/prefix.pyx
new file mode 100644
index 0000000..7d93ed4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.pyx
@@ -0,0 +1,29 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t PREFIX_LEN # = 22
+
+  const int64_t PREFIX_X # = (22 << 22)
+
+  const int64_t PREFIX_Y # = (PREFIX_X + PREFIX_X)
+
+  ctypedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+  ctypedef int32_t PREFIX_ValuedLenArray[22];
+
+  cdef enum:
+    Weight,
+    Normal,
+    Bold,
+  ctypedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+
+  ctypedef union PREFIX_AbsoluteFontWeight:
+    PREFIX_AbsoluteFontWeight_Tag tag;
+    float weight;
+
+  void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, PREFIX_AbsoluteFontWeight z);
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.tag.c b/cbindgen-0.24.5/tests/expectations/prefix.tag.c
new file mode 100644
index 0000000..d23d556
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.tag.c
@@ -0,0 +1,31 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define PREFIX_LEN 22
+
+#define PREFIX_X (22 << 22)
+
+#define PREFIX_Y (PREFIX_X + PREFIX_X)
+
+typedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+typedef int32_t PREFIX_ValuedLenArray[22];
+
+enum PREFIX_AbsoluteFontWeight_Tag {
+  Weight,
+  Normal,
+  Bold,
+};
+typedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+
+union PREFIX_AbsoluteFontWeight {
+  PREFIX_AbsoluteFontWeight_Tag tag;
+  struct {
+    PREFIX_AbsoluteFontWeight_Tag weight_tag;
+    float weight;
+  };
+};
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, union PREFIX_AbsoluteFontWeight z);
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.tag.compat.c b/cbindgen-0.24.5/tests/expectations/prefix.tag.compat.c
new file mode 100644
index 0000000..b5da340
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.tag.compat.c
@@ -0,0 +1,45 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define PREFIX_LEN 22
+
+#define PREFIX_X (22 << 22)
+
+#define PREFIX_Y (PREFIX_X + PREFIX_X)
+
+typedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+typedef int32_t PREFIX_ValuedLenArray[22];
+
+enum PREFIX_AbsoluteFontWeight_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Weight,
+  Normal,
+  Bold,
+};
+#ifndef __cplusplus
+typedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+#endif // __cplusplus
+
+union PREFIX_AbsoluteFontWeight {
+  PREFIX_AbsoluteFontWeight_Tag tag;
+  struct {
+    PREFIX_AbsoluteFontWeight_Tag weight_tag;
+    float weight;
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, union PREFIX_AbsoluteFontWeight z);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefix.tag.pyx b/cbindgen-0.24.5/tests/expectations/prefix.tag.pyx
new file mode 100644
index 0000000..32f38d9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefix.tag.pyx
@@ -0,0 +1,29 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t PREFIX_LEN # = 22
+
+  const int64_t PREFIX_X # = (22 << 22)
+
+  const int64_t PREFIX_Y # = (PREFIX_X + PREFIX_X)
+
+  ctypedef int32_t PREFIX_NamedLenArray[PREFIX_LEN];
+
+  ctypedef int32_t PREFIX_ValuedLenArray[22];
+
+  cdef enum:
+    Weight,
+    Normal,
+    Bold,
+  ctypedef uint8_t PREFIX_AbsoluteFontWeight_Tag;
+
+  cdef union PREFIX_AbsoluteFontWeight:
+    PREFIX_AbsoluteFontWeight_Tag tag;
+    float weight;
+
+  void root(PREFIX_NamedLenArray x, PREFIX_ValuedLenArray y, PREFIX_AbsoluteFontWeight z);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.both.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.both.c
new file mode 100644
index 0000000..099d604
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+} PREFIXFoo;
+#define PREFIXFoo_FOO (PREFIXFoo){ .a = 42, .b = 47 }
+
+#define PREFIXBAR (PREFIXFoo){ .a = 42, .b = 1337 }
+
+void root(struct PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.both.compat.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.both.compat.c
new file mode 100644
index 0000000..71168b5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.both.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+} PREFIXFoo;
+#define PREFIXFoo_FOO (PREFIXFoo){ .a = 42, .b = 47 }
+
+#define PREFIXBAR (PREFIXFoo){ .a = 42, .b = 1337 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct PREFIXFoo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.c
new file mode 100644
index 0000000..d85fd5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t a;
+  uint32_t b;
+} PREFIXFoo;
+#define PREFIXFoo_FOO (PREFIXFoo){ .a = 42, .b = 47 }
+
+#define PREFIXBAR (PREFIXFoo){ .a = 42, .b = 1337 }
+
+void root(PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.compat.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.compat.c
new file mode 100644
index 0000000..46ee66a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t a;
+  uint32_t b;
+} PREFIXFoo;
+#define PREFIXFoo_FOO (PREFIXFoo){ .a = 42, .b = 47 }
+
+#define PREFIXBAR (PREFIXFoo){ .a = 42, .b = 1337 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(PREFIXFoo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.cpp b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.cpp
new file mode 100644
index 0000000..218d1c8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.cpp
@@ -0,0 +1,19 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+};
+constexpr static const PREFIXFoo PREFIXFoo_FOO = PREFIXFoo{ /* .a = */ 42, /* .b = */ 47 };
+
+constexpr static const PREFIXFoo PREFIXBAR = PREFIXFoo{ /* .a = */ 42, /* .b = */ 1337 };
+
+extern "C" {
+
+void root(PREFIXFoo x);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.pyx b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.pyx
new file mode 100644
index 0000000..a21a082
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct PREFIXFoo:
+    int32_t a;
+    uint32_t b;
+  const PREFIXFoo PREFIXFoo_FOO # = <PREFIXFoo>{ 42, 47 }
+
+  const PREFIXFoo PREFIXBAR # = <PREFIXFoo>{ 42, 1337 }
+
+  void root(PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.c
new file mode 100644
index 0000000..fbbd328
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+};
+#define PREFIXFoo_FOO (PREFIXFoo){ .a = 42, .b = 47 }
+
+#define PREFIXBAR (PREFIXFoo){ .a = 42, .b = 1337 }
+
+void root(struct PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.compat.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.compat.c
new file mode 100644
index 0000000..2bd6fa8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+};
+#define PREFIXFoo_FOO (PREFIXFoo){ .a = 42, .b = 47 }
+
+#define PREFIXBAR (PREFIXFoo){ .a = 42, .b = 1337 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct PREFIXFoo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.pyx b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.pyx
new file mode 100644
index 0000000..e2e4808
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct PREFIXFoo:
+    int32_t a;
+    uint32_t b;
+  const PREFIXFoo PREFIXFoo_FOO # = <PREFIXFoo>{ 42, 47 }
+
+  const PREFIXFoo PREFIXBAR # = <PREFIXFoo>{ 42, 1337 }
+
+  void root(PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.both.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.both.c
new file mode 100644
index 0000000..942df26
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.both.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct PREFIXBar {
+  int32_t a;
+} PREFIXBar;
+
+typedef struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+  struct PREFIXBar bar;
+} PREFIXFoo;
+
+#define PREFIXVAL (PREFIXFoo){ .a = 42, .b = 1337, .bar = (PREFIXBar){ .a = 323 } }
+
+void root(struct PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.both.compat.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.both.compat.c
new file mode 100644
index 0000000..f5c0156
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.both.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct PREFIXBar {
+  int32_t a;
+} PREFIXBar;
+
+typedef struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+  struct PREFIXBar bar;
+} PREFIXFoo;
+
+#define PREFIXVAL (PREFIXFoo){ .a = 42, .b = 1337, .bar = (PREFIXBar){ .a = 323 } }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct PREFIXFoo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.c
new file mode 100644
index 0000000..f664a83
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t a;
+} PREFIXBar;
+
+typedef struct {
+  int32_t a;
+  uint32_t b;
+  PREFIXBar bar;
+} PREFIXFoo;
+
+#define PREFIXVAL (PREFIXFoo){ .a = 42, .b = 1337, .bar = (PREFIXBar){ .a = 323 } }
+
+void root(PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.compat.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.compat.c
new file mode 100644
index 0000000..7d3e09e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t a;
+} PREFIXBar;
+
+typedef struct {
+  int32_t a;
+  uint32_t b;
+  PREFIXBar bar;
+} PREFIXFoo;
+
+#define PREFIXVAL (PREFIXFoo){ .a = 42, .b = 1337, .bar = (PREFIXBar){ .a = 323 } }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(PREFIXFoo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.cpp b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.cpp
new file mode 100644
index 0000000..4dbfb7b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct PREFIXBar {
+  int32_t a;
+};
+
+struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+  PREFIXBar bar;
+};
+
+constexpr static const PREFIXFoo PREFIXVAL = PREFIXFoo{ /* .a = */ 42, /* .b = */ 1337, /* .bar = */ PREFIXBar{ /* .a = */ 323 } };
+
+extern "C" {
+
+void root(PREFIXFoo x);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.pyx b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.pyx
new file mode 100644
index 0000000..93dd89e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.pyx
@@ -0,0 +1,19 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct PREFIXBar:
+    int32_t a;
+
+  ctypedef struct PREFIXFoo:
+    int32_t a;
+    uint32_t b;
+    PREFIXBar bar;
+
+  const PREFIXFoo PREFIXVAL # = <PREFIXFoo>{ 42, 1337, <PREFIXBar>{ 323 } }
+
+  void root(PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.c
new file mode 100644
index 0000000..149ab10
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct PREFIXBar {
+  int32_t a;
+};
+
+struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+  struct PREFIXBar bar;
+};
+
+#define PREFIXVAL (PREFIXFoo){ .a = 42, .b = 1337, .bar = (PREFIXBar){ .a = 323 } }
+
+void root(struct PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.compat.c b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.compat.c
new file mode 100644
index 0000000..4fb7c69
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct PREFIXBar {
+  int32_t a;
+};
+
+struct PREFIXFoo {
+  int32_t a;
+  uint32_t b;
+  struct PREFIXBar bar;
+};
+
+#define PREFIXVAL (PREFIXFoo){ .a = 42, .b = 1337, .bar = (PREFIXBar){ .a = 323 } }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct PREFIXFoo x);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.pyx b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.pyx
new file mode 100644
index 0000000..a29bdc4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/prefixed_struct_literal_deep.tag.pyx
@@ -0,0 +1,19 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct PREFIXBar:
+    int32_t a;
+
+  cdef struct PREFIXFoo:
+    int32_t a;
+    uint32_t b;
+    PREFIXBar bar;
+
+  const PREFIXFoo PREFIXVAL # = <PREFIXFoo>{ 42, 1337, <PREFIXBar>{ 323 } }
+
+  void root(PREFIXFoo x);
diff --git a/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.c b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.c
new file mode 100644
index 0000000..4c47d3e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void ptr_as_array(uint32_t n, const uint32_t arg[3], const uint64_t *v);
+
+void ptr_as_array1(uint32_t n, const uint32_t arg[3], uint64_t v[4]);
+
+void ptr_as_array2(uint32_t n, uint32_t arg[], const uint64_t v[]);
+
+void ptr_as_array_wrong_syntax(uint32_t *arg, const uint32_t *v, const uint32_t*);
+
+void ptr_as_array_unnamed(uint32_t*, const uint32_t*);
diff --git a/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.compat.c b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.compat.c
new file mode 100644
index 0000000..ec6b905
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void ptr_as_array(uint32_t n, const uint32_t arg[3], const uint64_t *v);
+
+void ptr_as_array1(uint32_t n, const uint32_t arg[3], uint64_t v[4]);
+
+void ptr_as_array2(uint32_t n, uint32_t arg[], const uint64_t v[]);
+
+void ptr_as_array_wrong_syntax(uint32_t *arg, const uint32_t *v, const uint32_t*);
+
+void ptr_as_array_unnamed(uint32_t*, const uint32_t*);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.cpp b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.cpp
new file mode 100644
index 0000000..a4731a0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.cpp
@@ -0,0 +1,19 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void ptr_as_array(uint32_t n, const uint32_t arg[3], const uint64_t *v);
+
+void ptr_as_array1(uint32_t n, const uint32_t arg[3], uint64_t v[4]);
+
+void ptr_as_array2(uint32_t n, uint32_t arg[], const uint64_t v[]);
+
+void ptr_as_array_wrong_syntax(uint32_t *arg, const uint32_t *v, const uint32_t*);
+
+void ptr_as_array_unnamed(uint32_t*, const uint32_t*);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.pyx b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.pyx
new file mode 100644
index 0000000..333abd1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/ptrs_as_arrays.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void ptr_as_array(uint32_t n, const uint32_t arg[3], const uint64_t *v);
+
+  void ptr_as_array1(uint32_t n, const uint32_t arg[3], uint64_t v[4]);
+
+  void ptr_as_array2(uint32_t n, uint32_t arg[], const uint64_t v[]);
+
+  void ptr_as_array_wrong_syntax(uint32_t *arg, const uint32_t *v, const uint32_t*);
+
+  void ptr_as_array_unnamed(uint32_t*, const uint32_t*);
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.both.c b/cbindgen-0.24.5/tests/expectations/raw_ident.both.c
new file mode 100644
index 0000000..fc302c3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.both.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Enum {
+  a,
+  b,
+};
+typedef uint8_t Enum;
+
+typedef struct Struct {
+  Enum field;
+} Struct;
+
+extern const Enum STATIC;
+
+void fn(struct Struct arg);
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.both.compat.c b/cbindgen-0.24.5/tests/expectations/raw_ident.both.compat.c
new file mode 100644
index 0000000..fcc7cdd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.both.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Enum
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  a,
+  b,
+};
+#ifndef __cplusplus
+typedef uint8_t Enum;
+#endif // __cplusplus
+
+typedef struct Struct {
+  Enum field;
+} Struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const Enum STATIC;
+
+void fn(struct Struct arg);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.c b/cbindgen-0.24.5/tests/expectations/raw_ident.c
new file mode 100644
index 0000000..4b6ccd9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Enum {
+  a,
+  b,
+};
+typedef uint8_t Enum;
+
+typedef struct {
+  Enum field;
+} Struct;
+
+extern const Enum STATIC;
+
+void fn(Struct arg);
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.compat.c b/cbindgen-0.24.5/tests/expectations/raw_ident.compat.c
new file mode 100644
index 0000000..6ae0663
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Enum
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  a,
+  b,
+};
+#ifndef __cplusplus
+typedef uint8_t Enum;
+#endif // __cplusplus
+
+typedef struct {
+  Enum field;
+} Struct;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const Enum STATIC;
+
+void fn(Struct arg);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.cpp b/cbindgen-0.24.5/tests/expectations/raw_ident.cpp
new file mode 100644
index 0000000..60b8e02
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.cpp
@@ -0,0 +1,22 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class Enum : uint8_t {
+  a,
+  b,
+};
+
+struct Struct {
+  Enum field;
+};
+
+extern "C" {
+
+extern const Enum STATIC;
+
+void fn(Struct arg);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.pyx b/cbindgen-0.24.5/tests/expectations/raw_ident.pyx
new file mode 100644
index 0000000..1c194b6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.pyx
@@ -0,0 +1,19 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    a,
+    b,
+  ctypedef uint8_t Enum;
+
+  ctypedef struct Struct:
+    Enum field;
+
+  extern const Enum STATIC;
+
+  void fn(Struct arg);
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.tag.c b/cbindgen-0.24.5/tests/expectations/raw_ident.tag.c
new file mode 100644
index 0000000..ae77cf0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.tag.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Enum {
+  a,
+  b,
+};
+typedef uint8_t Enum;
+
+struct Struct {
+  Enum field;
+};
+
+extern const Enum STATIC;
+
+void fn(struct Struct arg);
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.tag.compat.c b/cbindgen-0.24.5/tests/expectations/raw_ident.tag.compat.c
new file mode 100644
index 0000000..ad38cc7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.tag.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum Enum
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  a,
+  b,
+};
+#ifndef __cplusplus
+typedef uint8_t Enum;
+#endif // __cplusplus
+
+struct Struct {
+  Enum field;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const Enum STATIC;
+
+void fn(struct Struct arg);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/raw_ident.tag.pyx b/cbindgen-0.24.5/tests/expectations/raw_ident.tag.pyx
new file mode 100644
index 0000000..8b11c90
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_ident.tag.pyx
@@ -0,0 +1,19 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    a,
+    b,
+  ctypedef uint8_t Enum;
+
+  cdef struct Struct:
+    Enum field;
+
+  extern const Enum STATIC;
+
+  void fn(Struct arg);
diff --git a/cbindgen-0.24.5/tests/expectations/raw_lines.c b/cbindgen-0.24.5/tests/expectations/raw_lines.c
new file mode 100644
index 0000000..f136292
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_lines.c
@@ -0,0 +1,12 @@
+#ifndef INCLUDE_GUARD_H
+#define INCLUDE_GUARD_H
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#define VERSION 1
+
+void root(void);
+
+#endif /* INCLUDE_GUARD_H */
diff --git a/cbindgen-0.24.5/tests/expectations/raw_lines.compat.c b/cbindgen-0.24.5/tests/expectations/raw_lines.compat.c
new file mode 100644
index 0000000..05f4493
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_lines.compat.c
@@ -0,0 +1,20 @@
+#ifndef INCLUDE_GUARD_H
+#define INCLUDE_GUARD_H
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#define VERSION 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif /* INCLUDE_GUARD_H */
diff --git a/cbindgen-0.24.5/tests/expectations/raw_lines.cpp b/cbindgen-0.24.5/tests/expectations/raw_lines.cpp
new file mode 100644
index 0000000..3619eca
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_lines.cpp
@@ -0,0 +1,17 @@
+#ifndef INCLUDE_GUARD_H
+#define INCLUDE_GUARD_H
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+#define VERSION 1
+
+extern "C" {
+
+void root();
+
+} // extern "C"
+
+#endif // INCLUDE_GUARD_H
diff --git a/cbindgen-0.24.5/tests/expectations/raw_lines.pyx b/cbindgen-0.24.5/tests/expectations/raw_lines.pyx
new file mode 100644
index 0000000..3a6b9ec
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/raw_lines.pyx
@@ -0,0 +1,10 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+#define VERSION 1
+
+cdef extern from *:
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/rename.both.c b/cbindgen-0.24.5/tests/expectations/rename.both.c
new file mode 100644
index 0000000..6c6e9a5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.both.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define C_H 10
+
+enum C_E {
+  x = 0,
+  y = 1,
+};
+typedef uint8_t C_E;
+
+typedef struct C_A C_A;
+
+typedef struct C_C C_C;
+
+typedef struct C_AwesomeB {
+  int32_t x;
+  float y;
+} C_AwesomeB;
+
+typedef union C_D {
+  int32_t x;
+  float y;
+} C_D;
+
+typedef struct C_A C_F;
+
+#define C_I (intptr_t)(C_F*)10
+
+extern const int32_t G;
+
+void root(const struct C_A *a, struct C_AwesomeB b, struct C_C c, union C_D d, C_E e, C_F f);
diff --git a/cbindgen-0.24.5/tests/expectations/rename.both.compat.c b/cbindgen-0.24.5/tests/expectations/rename.both.compat.c
new file mode 100644
index 0000000..bc44047
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.both.compat.c
@@ -0,0 +1,48 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define C_H 10
+
+enum C_E
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  x = 0,
+  y = 1,
+};
+#ifndef __cplusplus
+typedef uint8_t C_E;
+#endif // __cplusplus
+
+typedef struct C_A C_A;
+
+typedef struct C_C C_C;
+
+typedef struct C_AwesomeB {
+  int32_t x;
+  float y;
+} C_AwesomeB;
+
+typedef union C_D {
+  int32_t x;
+  float y;
+} C_D;
+
+typedef struct C_A C_F;
+
+#define C_I (intptr_t)(C_F*)10
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const int32_t G;
+
+void root(const struct C_A *a, struct C_AwesomeB b, struct C_C c, union C_D d, C_E e, C_F f);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename.c b/cbindgen-0.24.5/tests/expectations/rename.c
new file mode 100644
index 0000000..738907d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define C_H 10
+
+enum C_E {
+  x = 0,
+  y = 1,
+};
+typedef uint8_t C_E;
+
+typedef struct C_A C_A;
+
+typedef struct C_C C_C;
+
+typedef struct {
+  int32_t x;
+  float y;
+} C_AwesomeB;
+
+typedef union {
+  int32_t x;
+  float y;
+} C_D;
+
+typedef C_A C_F;
+
+#define C_I (intptr_t)(C_F*)10
+
+extern const int32_t G;
+
+void root(const C_A *a, C_AwesomeB b, C_C c, C_D d, C_E e, C_F f);
diff --git a/cbindgen-0.24.5/tests/expectations/rename.compat.c b/cbindgen-0.24.5/tests/expectations/rename.compat.c
new file mode 100644
index 0000000..1394860
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.compat.c
@@ -0,0 +1,48 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define C_H 10
+
+enum C_E
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  x = 0,
+  y = 1,
+};
+#ifndef __cplusplus
+typedef uint8_t C_E;
+#endif // __cplusplus
+
+typedef struct C_A C_A;
+
+typedef struct C_C C_C;
+
+typedef struct {
+  int32_t x;
+  float y;
+} C_AwesomeB;
+
+typedef union {
+  int32_t x;
+  float y;
+} C_D;
+
+typedef C_A C_F;
+
+#define C_I (intptr_t)(C_F*)10
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const int32_t G;
+
+void root(const C_A *a, C_AwesomeB b, C_C c, C_D d, C_E e, C_F f);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename.cpp b/cbindgen-0.24.5/tests/expectations/rename.cpp
new file mode 100644
index 0000000..cfa3285
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.cpp
@@ -0,0 +1,38 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const int32_t C_H = 10;
+
+enum class C_E : uint8_t {
+  x = 0,
+  y = 1,
+};
+
+struct C_A;
+
+struct C_C;
+
+struct C_AwesomeB {
+  int32_t x;
+  float y;
+};
+
+union C_D {
+  int32_t x;
+  float y;
+};
+
+using C_F = C_A;
+
+static const intptr_t C_I = (intptr_t)(C_F*)10;
+
+extern "C" {
+
+extern const int32_t G;
+
+void root(const C_A *a, C_AwesomeB b, C_C c, C_D d, C_E e, C_F f);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/rename.pyx b/cbindgen-0.24.5/tests/expectations/rename.pyx
new file mode 100644
index 0000000..9911089
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.pyx
@@ -0,0 +1,36 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t C_H # = 10
+
+  cdef enum:
+    x # = 0,
+    y # = 1,
+  ctypedef uint8_t C_E;
+
+  ctypedef struct C_A:
+    pass
+
+  ctypedef struct C_C:
+    pass
+
+  ctypedef struct C_AwesomeB:
+    int32_t x;
+    float y;
+
+  ctypedef union C_D:
+    int32_t x;
+    float y;
+
+  ctypedef C_A C_F;
+
+  const intptr_t C_I # = <intptr_t><C_F*>10
+
+  extern const int32_t G;
+
+  void root(const C_A *a, C_AwesomeB b, C_C c, C_D d, C_E e, C_F f);
diff --git a/cbindgen-0.24.5/tests/expectations/rename.tag.c b/cbindgen-0.24.5/tests/expectations/rename.tag.c
new file mode 100644
index 0000000..ca12718
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.tag.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define C_H 10
+
+enum C_E {
+  x = 0,
+  y = 1,
+};
+typedef uint8_t C_E;
+
+struct C_A;
+
+struct C_C;
+
+struct C_AwesomeB {
+  int32_t x;
+  float y;
+};
+
+union C_D {
+  int32_t x;
+  float y;
+};
+
+typedef struct C_A C_F;
+
+#define C_I (intptr_t)(C_F*)10
+
+extern const int32_t G;
+
+void root(const struct C_A *a, struct C_AwesomeB b, struct C_C c, union C_D d, C_E e, C_F f);
diff --git a/cbindgen-0.24.5/tests/expectations/rename.tag.compat.c b/cbindgen-0.24.5/tests/expectations/rename.tag.compat.c
new file mode 100644
index 0000000..d7cf1c8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.tag.compat.c
@@ -0,0 +1,48 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define C_H 10
+
+enum C_E
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  x = 0,
+  y = 1,
+};
+#ifndef __cplusplus
+typedef uint8_t C_E;
+#endif // __cplusplus
+
+struct C_A;
+
+struct C_C;
+
+struct C_AwesomeB {
+  int32_t x;
+  float y;
+};
+
+union C_D {
+  int32_t x;
+  float y;
+};
+
+typedef struct C_A C_F;
+
+#define C_I (intptr_t)(C_F*)10
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const int32_t G;
+
+void root(const struct C_A *a, struct C_AwesomeB b, struct C_C c, union C_D d, C_E e, C_F f);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename.tag.pyx b/cbindgen-0.24.5/tests/expectations/rename.tag.pyx
new file mode 100644
index 0000000..e9abd0f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename.tag.pyx
@@ -0,0 +1,36 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t C_H # = 10
+
+  cdef enum:
+    x # = 0,
+    y # = 1,
+  ctypedef uint8_t C_E;
+
+  cdef struct C_A:
+    pass
+
+  cdef struct C_C:
+    pass
+
+  cdef struct C_AwesomeB:
+    int32_t x;
+    float y;
+
+  cdef union C_D:
+    int32_t x;
+    float y;
+
+  ctypedef C_A C_F;
+
+  const intptr_t C_I # = <intptr_t><C_F*>10
+
+  extern const int32_t G;
+
+  void root(const C_A *a, C_AwesomeB b, C_C c, C_D d, C_E e, C_F f);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_case.c b/cbindgen-0.24.5/tests/expectations/rename_case.c
new file mode 100644
index 0000000..c574823
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_case.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void test_camel_case(int32_t fooBar);
+
+void test_pascal_case(int32_t FooBar);
+
+void test_snake_case(int32_t foo_bar);
+
+void test_screaming_snake_case(int32_t FOO_BAR);
+
+void test_gecko_case(int32_t aFooBar);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_case.compat.c b/cbindgen-0.24.5/tests/expectations/rename_case.compat.c
new file mode 100644
index 0000000..61e3310
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_case.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void test_camel_case(int32_t fooBar);
+
+void test_pascal_case(int32_t FooBar);
+
+void test_snake_case(int32_t foo_bar);
+
+void test_screaming_snake_case(int32_t FOO_BAR);
+
+void test_gecko_case(int32_t aFooBar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename_case.cpp b/cbindgen-0.24.5/tests/expectations/rename_case.cpp
new file mode 100644
index 0000000..794fa0c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_case.cpp
@@ -0,0 +1,19 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+void test_camel_case(int32_t fooBar);
+
+void test_pascal_case(int32_t FooBar);
+
+void test_snake_case(int32_t foo_bar);
+
+void test_screaming_snake_case(int32_t FOO_BAR);
+
+void test_gecko_case(int32_t aFooBar);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/rename_case.pyx b/cbindgen-0.24.5/tests/expectations/rename_case.pyx
new file mode 100644
index 0000000..5fd35fc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_case.pyx
@@ -0,0 +1,17 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void test_camel_case(int32_t fooBar);
+
+  void test_pascal_case(int32_t FooBar);
+
+  void test_snake_case(int32_t foo_bar);
+
+  void test_screaming_snake_case(int32_t FOO_BAR);
+
+  void test_gecko_case(int32_t aFooBar);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.both.c b/cbindgen-0.24.5/tests/expectations/rename_crate.both.c
new file mode 100644
index 0000000..6f96b06
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.both.c
@@ -0,0 +1,41 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  int32_t x;
+} Foo;
+
+typedef struct RenamedTy {
+  uint64_t y;
+} RenamedTy;
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct NoExternTy {
+  uint8_t field;
+} NoExternTy;
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct ContainsNoExternTy {
+  struct NoExternTy field;
+} ContainsNoExternTy;
+#endif
+
+#if defined(DEFINE_FREEBSD)
+typedef struct ContainsNoExternTy {
+  uint64_t field;
+} ContainsNoExternTy;
+#endif
+
+void root(struct Foo a);
+
+void renamed_func(struct RenamedTy a);
+
+void no_extern_func(struct ContainsNoExternTy a);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.both.compat.c b/cbindgen-0.24.5/tests/expectations/rename_crate.both.compat.c
new file mode 100644
index 0000000..49e703c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.both.compat.c
@@ -0,0 +1,49 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo {
+  int32_t x;
+} Foo;
+
+typedef struct RenamedTy {
+  uint64_t y;
+} RenamedTy;
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct NoExternTy {
+  uint8_t field;
+} NoExternTy;
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct ContainsNoExternTy {
+  struct NoExternTy field;
+} ContainsNoExternTy;
+#endif
+
+#if defined(DEFINE_FREEBSD)
+typedef struct ContainsNoExternTy {
+  uint64_t field;
+} ContainsNoExternTy;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+void renamed_func(struct RenamedTy a);
+
+void no_extern_func(struct ContainsNoExternTy a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.c b/cbindgen-0.24.5/tests/expectations/rename_crate.c
new file mode 100644
index 0000000..395aaf3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.c
@@ -0,0 +1,41 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+} Foo;
+
+typedef struct {
+  uint64_t y;
+} RenamedTy;
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct {
+  uint8_t field;
+} NoExternTy;
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct {
+  NoExternTy field;
+} ContainsNoExternTy;
+#endif
+
+#if defined(DEFINE_FREEBSD)
+typedef struct {
+  uint64_t field;
+} ContainsNoExternTy;
+#endif
+
+void root(Foo a);
+
+void renamed_func(RenamedTy a);
+
+void no_extern_func(ContainsNoExternTy a);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.compat.c b/cbindgen-0.24.5/tests/expectations/rename_crate.compat.c
new file mode 100644
index 0000000..89ffcc4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.compat.c
@@ -0,0 +1,49 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+} Foo;
+
+typedef struct {
+  uint64_t y;
+} RenamedTy;
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct {
+  uint8_t field;
+} NoExternTy;
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+typedef struct {
+  NoExternTy field;
+} ContainsNoExternTy;
+#endif
+
+#if defined(DEFINE_FREEBSD)
+typedef struct {
+  uint64_t field;
+} ContainsNoExternTy;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo a);
+
+void renamed_func(RenamedTy a);
+
+void no_extern_func(ContainsNoExternTy a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.cpp b/cbindgen-0.24.5/tests/expectations/rename_crate.cpp
new file mode 100644
index 0000000..3f15d72
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.cpp
@@ -0,0 +1,46 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Foo {
+  int32_t x;
+};
+
+struct RenamedTy {
+  uint64_t y;
+};
+
+#if !defined(DEFINE_FREEBSD)
+struct NoExternTy {
+  uint8_t field;
+};
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+struct ContainsNoExternTy {
+  NoExternTy field;
+};
+#endif
+
+#if defined(DEFINE_FREEBSD)
+struct ContainsNoExternTy {
+  uint64_t field;
+};
+#endif
+
+extern "C" {
+
+void root(Foo a);
+
+void renamed_func(RenamedTy a);
+
+void no_extern_func(ContainsNoExternTy a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.pyx b/cbindgen-0.24.5/tests/expectations/rename_crate.pyx
new file mode 100644
index 0000000..b7fa45f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.pyx
@@ -0,0 +1,36 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo:
+    int32_t x;
+
+  ctypedef struct RenamedTy:
+    uint64_t y;
+
+  IF not DEFINE_FREEBSD:
+    ctypedef struct NoExternTy:
+      uint8_t field;
+
+  IF not DEFINE_FREEBSD:
+    ctypedef struct ContainsNoExternTy:
+      NoExternTy field;
+
+  IF DEFINE_FREEBSD:
+    ctypedef struct ContainsNoExternTy:
+      uint64_t field;
+
+  void root(Foo a);
+
+  void renamed_func(RenamedTy a);
+
+  void no_extern_func(ContainsNoExternTy a);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.tag.c b/cbindgen-0.24.5/tests/expectations/rename_crate.tag.c
new file mode 100644
index 0000000..c91fa60
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.tag.c
@@ -0,0 +1,41 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  int32_t x;
+};
+
+struct RenamedTy {
+  uint64_t y;
+};
+
+#if !defined(DEFINE_FREEBSD)
+struct NoExternTy {
+  uint8_t field;
+};
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+struct ContainsNoExternTy {
+  struct NoExternTy field;
+};
+#endif
+
+#if defined(DEFINE_FREEBSD)
+struct ContainsNoExternTy {
+  uint64_t field;
+};
+#endif
+
+void root(struct Foo a);
+
+void renamed_func(struct RenamedTy a);
+
+void no_extern_func(struct ContainsNoExternTy a);
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.tag.compat.c b/cbindgen-0.24.5/tests/expectations/rename_crate.tag.compat.c
new file mode 100644
index 0000000..71bf78e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.tag.compat.c
@@ -0,0 +1,49 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo {
+  int32_t x;
+};
+
+struct RenamedTy {
+  uint64_t y;
+};
+
+#if !defined(DEFINE_FREEBSD)
+struct NoExternTy {
+  uint8_t field;
+};
+#endif
+
+#if !defined(DEFINE_FREEBSD)
+struct ContainsNoExternTy {
+  struct NoExternTy field;
+};
+#endif
+
+#if defined(DEFINE_FREEBSD)
+struct ContainsNoExternTy {
+  uint64_t field;
+};
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo a);
+
+void renamed_func(struct RenamedTy a);
+
+void no_extern_func(struct ContainsNoExternTy a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/rename_crate.tag.pyx b/cbindgen-0.24.5/tests/expectations/rename_crate.tag.pyx
new file mode 100644
index 0000000..b7f4332
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/rename_crate.tag.pyx
@@ -0,0 +1,36 @@
+#if 0
+DEF DEFINE_FREEBSD = 0
+#endif
+
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo:
+    int32_t x;
+
+  cdef struct RenamedTy:
+    uint64_t y;
+
+  IF not DEFINE_FREEBSD:
+    cdef struct NoExternTy:
+      uint8_t field;
+
+  IF not DEFINE_FREEBSD:
+    cdef struct ContainsNoExternTy:
+      NoExternTy field;
+
+  IF DEFINE_FREEBSD:
+    cdef struct ContainsNoExternTy:
+      uint64_t field;
+
+  void root(Foo a);
+
+  void renamed_func(RenamedTy a);
+
+  void no_extern_func(ContainsNoExternTy a);
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.both.c b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.both.c
new file mode 100644
index 0000000..e112efa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.both.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StyleA StyleA;
+
+typedef struct B {
+  int32_t x;
+  float y;
+} B;
+
+void root(const struct StyleA *a, struct B b);
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.both.compat.c b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.both.compat.c
new file mode 100644
index 0000000..1fa7b8b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.both.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StyleA StyleA;
+
+typedef struct B {
+  int32_t x;
+  float y;
+} B;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct StyleA *a, struct B b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.c b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.c
new file mode 100644
index 0000000..7131a14
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StyleA StyleA;
+
+typedef struct {
+  int32_t x;
+  float y;
+} B;
+
+void root(const StyleA *a, B b);
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.compat.c b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.compat.c
new file mode 100644
index 0000000..5d16b2d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StyleA StyleA;
+
+typedef struct {
+  int32_t x;
+  float y;
+} B;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const StyleA *a, B b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.cpp b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.cpp
new file mode 100644
index 0000000..1a2a6d2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.cpp
@@ -0,0 +1,18 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct StyleA;
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+extern "C" {
+
+void root(const StyleA *a, B b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.pyx b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.pyx
new file mode 100644
index 0000000..f857c8e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct StyleA:
+    pass
+
+  ctypedef struct B:
+    int32_t x;
+    float y;
+
+  void root(const StyleA *a, B b);
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.c b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.c
new file mode 100644
index 0000000..3c24f27
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct StyleA;
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+void root(const struct StyleA *a, struct B b);
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.compat.c b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.compat.c
new file mode 100644
index 0000000..15d1cc8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct StyleA;
+
+struct B {
+  int32_t x;
+  float y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct StyleA *a, struct B b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.pyx b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.pyx
new file mode 100644
index 0000000..812a652
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/renaming_overrides_prefixing.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct StyleA:
+    pass
+
+  cdef struct B:
+    int32_t x;
+    float y;
+
+  void root(const StyleA *a, B b);
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.both.c b/cbindgen-0.24.5/tests/expectations/reserved.both.c
new file mode 100644
index 0000000..ce7d6e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.both.c
@@ -0,0 +1,75 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A {
+  int32_t namespace_;
+  float float_;
+} A;
+
+typedef struct B {
+  int32_t namespace_;
+  float float_;
+} B;
+
+enum C_Tag {
+  D,
+};
+typedef uint8_t C_Tag;
+
+typedef struct D_Body {
+  int32_t namespace_;
+  float float_;
+} D_Body;
+
+typedef struct C {
+  C_Tag tag;
+  union {
+    D_Body d;
+  };
+} C;
+
+enum E_Tag {
+  Double,
+  Float,
+};
+typedef uint8_t E_Tag;
+
+typedef struct E {
+  E_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} E;
+
+enum F_Tag {
+  double_,
+  float_,
+};
+typedef uint8_t F_Tag;
+
+typedef struct F {
+  F_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} F;
+
+void root(struct A a,
+          struct B b,
+          struct C c,
+          struct E e,
+          struct F f,
+          int32_t namespace_,
+          float float_);
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.both.compat.c b/cbindgen-0.24.5/tests/expectations/reserved.both.compat.c
new file mode 100644
index 0000000..149b2a4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.both.compat.c
@@ -0,0 +1,101 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct A {
+  int32_t namespace_;
+  float float_;
+} A;
+
+typedef struct B {
+  int32_t namespace_;
+  float float_;
+} B;
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  D,
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+typedef struct D_Body {
+  int32_t namespace_;
+  float float_;
+} D_Body;
+
+typedef struct C {
+  C_Tag tag;
+  union {
+    D_Body d;
+  };
+} C;
+
+enum E_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Double,
+  Float,
+};
+#ifndef __cplusplus
+typedef uint8_t E_Tag;
+#endif // __cplusplus
+
+typedef struct E {
+  E_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} E;
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  double_,
+  float_,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+typedef struct F {
+  F_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} F;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A a,
+          struct B b,
+          struct C c,
+          struct E e,
+          struct F f,
+          int32_t namespace_,
+          float float_);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.c b/cbindgen-0.24.5/tests/expectations/reserved.c
new file mode 100644
index 0000000..d4c81c6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.c
@@ -0,0 +1,69 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t namespace_;
+  float float_;
+} A;
+
+typedef struct {
+  int32_t namespace_;
+  float float_;
+} B;
+
+enum C_Tag {
+  D,
+};
+typedef uint8_t C_Tag;
+
+typedef struct {
+  int32_t namespace_;
+  float float_;
+} D_Body;
+
+typedef struct {
+  C_Tag tag;
+  union {
+    D_Body d;
+  };
+} C;
+
+enum E_Tag {
+  Double,
+  Float,
+};
+typedef uint8_t E_Tag;
+
+typedef struct {
+  E_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} E;
+
+enum F_Tag {
+  double_,
+  float_,
+};
+typedef uint8_t F_Tag;
+
+typedef struct {
+  F_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} F;
+
+void root(A a, B b, C c, E e, F f, int32_t namespace_, float float_);
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.compat.c b/cbindgen-0.24.5/tests/expectations/reserved.compat.c
new file mode 100644
index 0000000..8bbbdf3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.compat.c
@@ -0,0 +1,95 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t namespace_;
+  float float_;
+} A;
+
+typedef struct {
+  int32_t namespace_;
+  float float_;
+} B;
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  D,
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  int32_t namespace_;
+  float float_;
+} D_Body;
+
+typedef struct {
+  C_Tag tag;
+  union {
+    D_Body d;
+  };
+} C;
+
+enum E_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Double,
+  Float,
+};
+#ifndef __cplusplus
+typedef uint8_t E_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  E_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} E;
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  double_,
+  float_,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  F_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+} F;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A a, B b, C c, E e, F f, int32_t namespace_, float float_);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.cpp b/cbindgen-0.24.5/tests/expectations/reserved.cpp
new file mode 100644
index 0000000..c4bc9fb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.cpp
@@ -0,0 +1,79 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct A {
+  int32_t namespace_;
+  float float_;
+};
+
+struct B {
+  int32_t namespace_;
+  float float_;
+};
+
+struct C {
+  enum class Tag : uint8_t {
+    D,
+  };
+
+  struct D_Body {
+    int32_t namespace_;
+    float float_;
+  };
+
+  Tag tag;
+  union {
+    D_Body d;
+  };
+};
+
+struct E {
+  enum class Tag : uint8_t {
+    Double,
+    Float,
+  };
+
+  struct Double_Body {
+    double _0;
+  };
+
+  struct Float_Body {
+    float _0;
+  };
+
+  Tag tag;
+  union {
+    Double_Body double_;
+    Float_Body float_;
+  };
+};
+
+struct F {
+  enum class Tag : uint8_t {
+    double_,
+    float_,
+  };
+
+  struct double_Body {
+    double _0;
+  };
+
+  struct float_Body {
+    float _0;
+  };
+
+  Tag tag;
+  union {
+    double_Body double_;
+    float_Body float_;
+  };
+};
+
+extern "C" {
+
+void root(A a, B b, C c, E e, F f, int32_t namespace_, float float_);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.pyx b/cbindgen-0.24.5/tests/expectations/reserved.pyx
new file mode 100644
index 0000000..65e0da9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.pyx
@@ -0,0 +1,49 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct A:
+    int32_t namespace_;
+    float float_;
+
+  ctypedef struct B:
+    int32_t namespace_;
+    float float_;
+
+  cdef enum:
+    D,
+  ctypedef uint8_t C_Tag;
+
+  ctypedef struct D_Body:
+    int32_t namespace_;
+    float float_;
+
+  ctypedef struct C:
+    C_Tag tag;
+    D_Body d;
+
+  cdef enum:
+    Double,
+    Float,
+  ctypedef uint8_t E_Tag;
+
+  ctypedef struct E:
+    E_Tag tag;
+    double double_;
+    float float_;
+
+  cdef enum:
+    double_,
+    float_,
+  ctypedef uint8_t F_Tag;
+
+  ctypedef struct F:
+    F_Tag tag;
+    double double_;
+    float float_;
+
+  void root(A a, B b, C c, E e, F f, int32_t namespace_, float float_);
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.tag.c b/cbindgen-0.24.5/tests/expectations/reserved.tag.c
new file mode 100644
index 0000000..d81f89e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.tag.c
@@ -0,0 +1,75 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A {
+  int32_t namespace_;
+  float float_;
+};
+
+struct B {
+  int32_t namespace_;
+  float float_;
+};
+
+enum C_Tag {
+  D,
+};
+typedef uint8_t C_Tag;
+
+struct D_Body {
+  int32_t namespace_;
+  float float_;
+};
+
+struct C {
+  C_Tag tag;
+  union {
+    struct D_Body d;
+  };
+};
+
+enum E_Tag {
+  Double,
+  Float,
+};
+typedef uint8_t E_Tag;
+
+struct E {
+  E_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+};
+
+enum F_Tag {
+  double_,
+  float_,
+};
+typedef uint8_t F_Tag;
+
+struct F {
+  F_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+};
+
+void root(struct A a,
+          struct B b,
+          struct C c,
+          struct E e,
+          struct F f,
+          int32_t namespace_,
+          float float_);
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.tag.compat.c b/cbindgen-0.24.5/tests/expectations/reserved.tag.compat.c
new file mode 100644
index 0000000..fc6064f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.tag.compat.c
@@ -0,0 +1,101 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct A {
+  int32_t namespace_;
+  float float_;
+};
+
+struct B {
+  int32_t namespace_;
+  float float_;
+};
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  D,
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+struct D_Body {
+  int32_t namespace_;
+  float float_;
+};
+
+struct C {
+  C_Tag tag;
+  union {
+    struct D_Body d;
+  };
+};
+
+enum E_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Double,
+  Float,
+};
+#ifndef __cplusplus
+typedef uint8_t E_Tag;
+#endif // __cplusplus
+
+struct E {
+  E_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+};
+
+enum F_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  double_,
+  float_,
+};
+#ifndef __cplusplus
+typedef uint8_t F_Tag;
+#endif // __cplusplus
+
+struct F {
+  F_Tag tag;
+  union {
+    struct {
+      double double_;
+    };
+    struct {
+      float float_;
+    };
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct A a,
+          struct B b,
+          struct C c,
+          struct E e,
+          struct F f,
+          int32_t namespace_,
+          float float_);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/reserved.tag.pyx b/cbindgen-0.24.5/tests/expectations/reserved.tag.pyx
new file mode 100644
index 0000000..b3aefec
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/reserved.tag.pyx
@@ -0,0 +1,49 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct A:
+    int32_t namespace_;
+    float float_;
+
+  cdef struct B:
+    int32_t namespace_;
+    float float_;
+
+  cdef enum:
+    D,
+  ctypedef uint8_t C_Tag;
+
+  cdef struct D_Body:
+    int32_t namespace_;
+    float float_;
+
+  cdef struct C:
+    C_Tag tag;
+    D_Body d;
+
+  cdef enum:
+    Double,
+    Float,
+  ctypedef uint8_t E_Tag;
+
+  cdef struct E:
+    E_Tag tag;
+    double double_;
+    float float_;
+
+  cdef enum:
+    double_,
+    float_,
+  ctypedef uint8_t F_Tag;
+
+  cdef struct F:
+    F_Tag tag;
+    double double_;
+    float float_;
+
+  void root(A a, B b, C c, E e, F f, int32_t namespace_, float float_);
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.both.c b/cbindgen-0.24.5/tests/expectations/sentinel.both.c
new file mode 100644
index 0000000..0ffb5af
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.both.c
@@ -0,0 +1,55 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A {
+  A_A1,
+  A_A2,
+  A_A3,
+  /**
+   * Must be last for serialization purposes
+   */
+  A_Sentinel,
+};
+typedef uint8_t A;
+
+enum B {
+  B_B1,
+  B_B2,
+  B_B3,
+  /**
+   * Must be last for serialization purposes
+   */
+  B_Sentinel,
+};
+typedef uint8_t B;
+
+enum C_Tag {
+  C_C1,
+  C_C2,
+  C_C3,
+  /**
+   * Must be last for serialization purposes
+   */
+  C_Sentinel,
+};
+typedef uint8_t C_Tag;
+
+typedef struct C_C1_Body {
+  C_Tag tag;
+  uint32_t a;
+} C_C1_Body;
+
+typedef struct C_C2_Body {
+  C_Tag tag;
+  uint32_t b;
+} C_C2_Body;
+
+typedef union C {
+  C_Tag tag;
+  C_C1_Body c1;
+  C_C2_Body c2;
+} C;
+
+void root(A a, B b, union C c);
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.both.compat.c b/cbindgen-0.24.5/tests/expectations/sentinel.both.compat.c
new file mode 100644
index 0000000..f03f998
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.both.compat.c
@@ -0,0 +1,81 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  A_A1,
+  A_A2,
+  A_A3,
+  /**
+   * Must be last for serialization purposes
+   */
+  A_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t A;
+#endif // __cplusplus
+
+enum B
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  B_B1,
+  B_B2,
+  B_B3,
+  /**
+   * Must be last for serialization purposes
+   */
+  B_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t B;
+#endif // __cplusplus
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  C_C1,
+  C_C2,
+  C_C3,
+  /**
+   * Must be last for serialization purposes
+   */
+  C_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+typedef struct C_C1_Body {
+  C_Tag tag;
+  uint32_t a;
+} C_C1_Body;
+
+typedef struct C_C2_Body {
+  C_Tag tag;
+  uint32_t b;
+} C_C2_Body;
+
+typedef union C {
+  C_Tag tag;
+  C_C1_Body c1;
+  C_C2_Body c2;
+} C;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A a, B b, union C c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.c b/cbindgen-0.24.5/tests/expectations/sentinel.c
new file mode 100644
index 0000000..27057f3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.c
@@ -0,0 +1,55 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A {
+  A_A1,
+  A_A2,
+  A_A3,
+  /**
+   * Must be last for serialization purposes
+   */
+  A_Sentinel,
+};
+typedef uint8_t A;
+
+enum B {
+  B_B1,
+  B_B2,
+  B_B3,
+  /**
+   * Must be last for serialization purposes
+   */
+  B_Sentinel,
+};
+typedef uint8_t B;
+
+enum C_Tag {
+  C_C1,
+  C_C2,
+  C_C3,
+  /**
+   * Must be last for serialization purposes
+   */
+  C_Sentinel,
+};
+typedef uint8_t C_Tag;
+
+typedef struct {
+  C_Tag tag;
+  uint32_t a;
+} C_C1_Body;
+
+typedef struct {
+  C_Tag tag;
+  uint32_t b;
+} C_C2_Body;
+
+typedef union {
+  C_Tag tag;
+  C_C1_Body c1;
+  C_C2_Body c2;
+} C;
+
+void root(A a, B b, C c);
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.compat.c b/cbindgen-0.24.5/tests/expectations/sentinel.compat.c
new file mode 100644
index 0000000..e86d2d9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.compat.c
@@ -0,0 +1,81 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  A_A1,
+  A_A2,
+  A_A3,
+  /**
+   * Must be last for serialization purposes
+   */
+  A_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t A;
+#endif // __cplusplus
+
+enum B
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  B_B1,
+  B_B2,
+  B_B3,
+  /**
+   * Must be last for serialization purposes
+   */
+  B_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t B;
+#endif // __cplusplus
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  C_C1,
+  C_C2,
+  C_C3,
+  /**
+   * Must be last for serialization purposes
+   */
+  C_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  C_Tag tag;
+  uint32_t a;
+} C_C1_Body;
+
+typedef struct {
+  C_Tag tag;
+  uint32_t b;
+} C_C2_Body;
+
+typedef union {
+  C_Tag tag;
+  C_C1_Body c1;
+  C_C2_Body c2;
+} C;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A a, B b, C c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.cpp b/cbindgen-0.24.5/tests/expectations/sentinel.cpp
new file mode 100644
index 0000000..98e353f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.cpp
@@ -0,0 +1,53 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class A : uint8_t {
+  A_A1,
+  A_A2,
+  A_A3,
+  /// Must be last for serialization purposes
+  A_Sentinel,
+};
+
+enum class B : uint8_t {
+  B_B1,
+  B_B2,
+  B_B3,
+  /// Must be last for serialization purposes
+  B_Sentinel,
+};
+
+union C {
+  enum class Tag : uint8_t {
+    C_C1,
+    C_C2,
+    C_C3,
+    /// Must be last for serialization purposes
+    C_Sentinel,
+  };
+
+  struct C_C1_Body {
+    Tag tag;
+    uint32_t a;
+  };
+
+  struct C_C2_Body {
+    Tag tag;
+    uint32_t b;
+  };
+
+  struct {
+    Tag tag;
+  };
+  C_C1_Body c1;
+  C_C2_Body c2;
+};
+
+extern "C" {
+
+void root(A a, B b, C c);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.pyx b/cbindgen-0.24.5/tests/expectations/sentinel.pyx
new file mode 100644
index 0000000..828705d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.pyx
@@ -0,0 +1,46 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    A_A1,
+    A_A2,
+    A_A3,
+    # Must be last for serialization purposes
+    A_Sentinel,
+  ctypedef uint8_t A;
+
+  cdef enum:
+    B_B1,
+    B_B2,
+    B_B3,
+    # Must be last for serialization purposes
+    B_Sentinel,
+  ctypedef uint8_t B;
+
+  cdef enum:
+    C_C1,
+    C_C2,
+    C_C3,
+    # Must be last for serialization purposes
+    C_Sentinel,
+  ctypedef uint8_t C_Tag;
+
+  ctypedef struct C_C1_Body:
+    C_Tag tag;
+    uint32_t a;
+
+  ctypedef struct C_C2_Body:
+    C_Tag tag;
+    uint32_t b;
+
+  ctypedef union C:
+    C_Tag tag;
+    C_C1_Body c1;
+    C_C2_Body c2;
+
+  void root(A a, B b, C c);
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.tag.c b/cbindgen-0.24.5/tests/expectations/sentinel.tag.c
new file mode 100644
index 0000000..8e376e6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.tag.c
@@ -0,0 +1,55 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A {
+  A_A1,
+  A_A2,
+  A_A3,
+  /**
+   * Must be last for serialization purposes
+   */
+  A_Sentinel,
+};
+typedef uint8_t A;
+
+enum B {
+  B_B1,
+  B_B2,
+  B_B3,
+  /**
+   * Must be last for serialization purposes
+   */
+  B_Sentinel,
+};
+typedef uint8_t B;
+
+enum C_Tag {
+  C_C1,
+  C_C2,
+  C_C3,
+  /**
+   * Must be last for serialization purposes
+   */
+  C_Sentinel,
+};
+typedef uint8_t C_Tag;
+
+struct C_C1_Body {
+  C_Tag tag;
+  uint32_t a;
+};
+
+struct C_C2_Body {
+  C_Tag tag;
+  uint32_t b;
+};
+
+union C {
+  C_Tag tag;
+  struct C_C1_Body c1;
+  struct C_C2_Body c2;
+};
+
+void root(A a, B b, union C c);
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.tag.compat.c b/cbindgen-0.24.5/tests/expectations/sentinel.tag.compat.c
new file mode 100644
index 0000000..ae7f94c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.tag.compat.c
@@ -0,0 +1,81 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum A
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  A_A1,
+  A_A2,
+  A_A3,
+  /**
+   * Must be last for serialization purposes
+   */
+  A_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t A;
+#endif // __cplusplus
+
+enum B
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  B_B1,
+  B_B2,
+  B_B3,
+  /**
+   * Must be last for serialization purposes
+   */
+  B_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t B;
+#endif // __cplusplus
+
+enum C_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  C_C1,
+  C_C2,
+  C_C3,
+  /**
+   * Must be last for serialization purposes
+   */
+  C_Sentinel,
+};
+#ifndef __cplusplus
+typedef uint8_t C_Tag;
+#endif // __cplusplus
+
+struct C_C1_Body {
+  C_Tag tag;
+  uint32_t a;
+};
+
+struct C_C2_Body {
+  C_Tag tag;
+  uint32_t b;
+};
+
+union C {
+  C_Tag tag;
+  struct C_C1_Body c1;
+  struct C_C2_Body c2;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(A a, B b, union C c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/sentinel.tag.pyx b/cbindgen-0.24.5/tests/expectations/sentinel.tag.pyx
new file mode 100644
index 0000000..e68c9d2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/sentinel.tag.pyx
@@ -0,0 +1,46 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    A_A1,
+    A_A2,
+    A_A3,
+    # Must be last for serialization purposes
+    A_Sentinel,
+  ctypedef uint8_t A;
+
+  cdef enum:
+    B_B1,
+    B_B2,
+    B_B3,
+    # Must be last for serialization purposes
+    B_Sentinel,
+  ctypedef uint8_t B;
+
+  cdef enum:
+    C_C1,
+    C_C2,
+    C_C3,
+    # Must be last for serialization purposes
+    C_Sentinel,
+  ctypedef uint8_t C_Tag;
+
+  cdef struct C_C1_Body:
+    C_Tag tag;
+    uint32_t a;
+
+  cdef struct C_C2_Body:
+    C_Tag tag;
+    uint32_t b;
+
+  cdef union C:
+    C_Tag tag;
+    C_C1_Body c1;
+    C_C2_Body c2;
+
+  void root(A a, B b, C c);
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.both.c b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.both.c
new file mode 100644
index 0000000..04f4656
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.both.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Option_____Opaque Option_____Opaque;
+
+typedef struct Foo {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Foo;
+
+typedef union Bar {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Bar;
+
+void root(const struct Opaque *a,
+          struct Opaque *b,
+          struct Foo c,
+          union Bar d,
+          struct Option_____Opaque *e,
+          void (*f)(const struct Opaque*));
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.both.compat.c b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.both.compat.c
new file mode 100644
index 0000000..7c6292e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.both.compat.c
@@ -0,0 +1,37 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Option_____Opaque Option_____Opaque;
+
+typedef struct Foo {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Foo;
+
+typedef union Bar {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct Opaque *a,
+          struct Opaque *b,
+          struct Foo c,
+          union Bar d,
+          struct Option_____Opaque *e,
+          void (*f)(const struct Opaque*));
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.c b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.c
new file mode 100644
index 0000000..759e539
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Option_____Opaque Option_____Opaque;
+
+typedef struct {
+  const Opaque *x;
+  Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Foo;
+
+typedef union {
+  const Opaque *x;
+  Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Bar;
+
+void root(const Opaque *a, Opaque *b, Foo c, Bar d, Option_____Opaque *e, void (*f)(const Opaque*));
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.compat.c b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.compat.c
new file mode 100644
index 0000000..827067c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Option_____Opaque Option_____Opaque;
+
+typedef struct {
+  const Opaque *x;
+  Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Foo;
+
+typedef union {
+  const Opaque *x;
+  Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Opaque *a, Opaque *b, Foo c, Bar d, Option_____Opaque *e, void (*f)(const Opaque*));
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.cpp b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.cpp
new file mode 100644
index 0000000..f4b98d4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.cpp
@@ -0,0 +1,30 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Opaque;
+
+template<typename T = void>
+struct Option;
+
+struct Foo {
+  const Opaque *x;
+  Opaque *y;
+  void (*z)();
+  void (**zz)();
+};
+
+union Bar {
+  const Opaque *x;
+  Opaque *y;
+  void (*z)();
+  void (**zz)();
+};
+
+extern "C" {
+
+void root(const Opaque *a, Opaque *b, Foo c, Bar d, Option<Opaque*> *e, void (*f)(const Opaque*));
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.pyx b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.pyx
new file mode 100644
index 0000000..350d3a8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.pyx
@@ -0,0 +1,32 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Opaque:
+    pass
+
+  ctypedef struct Option_____Opaque:
+    pass
+
+  ctypedef struct Foo:
+    const Opaque *x;
+    Opaque *y;
+    void (*z)();
+    void (**zz)();
+
+  ctypedef union Bar:
+    const Opaque *x;
+    Opaque *y;
+    void (*z)();
+    void (**zz)();
+
+  void root(const Opaque *a,
+            Opaque *b,
+            Foo c,
+            Bar d,
+            Option_____Opaque *e,
+            void (*f)(const Opaque*));
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.c b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.c
new file mode 100644
index 0000000..ad3389e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct Option_____Opaque;
+
+struct Foo {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+};
+
+union Bar {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+};
+
+void root(const struct Opaque *a,
+          struct Opaque *b,
+          struct Foo c,
+          union Bar d,
+          struct Option_____Opaque *e,
+          void (*f)(const struct Opaque*));
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.compat.c b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.compat.c
new file mode 100644
index 0000000..79d1ce6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.compat.c
@@ -0,0 +1,37 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct Option_____Opaque;
+
+struct Foo {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+};
+
+union Bar {
+  const struct Opaque *x;
+  struct Opaque *y;
+  void (*z)(void);
+  void (**zz)(void);
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct Opaque *a,
+          struct Opaque *b,
+          struct Foo c,
+          union Bar d,
+          struct Option_____Opaque *e,
+          void (*f)(const struct Opaque*));
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.pyx b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.pyx
new file mode 100644
index 0000000..14ce28c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/simplify_option_ptr.tag.pyx
@@ -0,0 +1,32 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Opaque:
+    pass
+
+  cdef struct Option_____Opaque:
+    pass
+
+  cdef struct Foo:
+    const Opaque *x;
+    Opaque *y;
+    void (*z)();
+    void (**zz)();
+
+  cdef union Bar:
+    const Opaque *x;
+    Opaque *y;
+    void (*z)();
+    void (**zz)();
+
+  void root(const Opaque *a,
+            Opaque *b,
+            Foo c,
+            Bar d,
+            Option_____Opaque *e,
+            void (*f)(const Opaque*));
diff --git a/cbindgen-0.24.5/tests/expectations/size_types.c b/cbindgen-0.24.5/tests/expectations/size_types.c
new file mode 100644
index 0000000..b3b64c0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/size_types.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum IE {
+  IV,
+};
+typedef ptrdiff_t IE;
+
+enum UE {
+  UV,
+};
+typedef size_t UE;
+
+typedef size_t Usize;
+
+typedef ptrdiff_t Isize;
+
+void root(Usize, Isize, UE, IE);
diff --git a/cbindgen-0.24.5/tests/expectations/size_types.compat.c b/cbindgen-0.24.5/tests/expectations/size_types.compat.c
new file mode 100644
index 0000000..0a1218b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/size_types.compat.c
@@ -0,0 +1,41 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+enum IE
+#ifdef __cplusplus
+  : ptrdiff_t
+#endif // __cplusplus
+ {
+  IV,
+};
+#ifndef __cplusplus
+typedef ptrdiff_t IE;
+#endif // __cplusplus
+
+enum UE
+#ifdef __cplusplus
+  : size_t
+#endif // __cplusplus
+ {
+  UV,
+};
+#ifndef __cplusplus
+typedef size_t UE;
+#endif // __cplusplus
+
+typedef size_t Usize;
+
+typedef ptrdiff_t Isize;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Usize, Isize, UE, IE);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/size_types.cpp b/cbindgen-0.24.5/tests/expectations/size_types.cpp
new file mode 100644
index 0000000..d701a8d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/size_types.cpp
@@ -0,0 +1,24 @@
+#include <cstdarg>
+#include <cstddef>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+enum class IE : ptrdiff_t {
+  IV,
+};
+
+enum class UE : size_t {
+  UV,
+};
+
+using Usize = size_t;
+
+using Isize = ptrdiff_t;
+
+extern "C" {
+
+void root(Usize, Isize, UE, IE);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/size_types.pyx b/cbindgen-0.24.5/tests/expectations/size_types.pyx
new file mode 100644
index 0000000..c08b7c6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/size_types.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef enum:
+    IV,
+  ctypedef ptrdiff_t IE;
+
+  cdef enum:
+    UV,
+  ctypedef size_t UE;
+
+  ctypedef size_t Usize;
+
+  ctypedef ptrdiff_t Isize;
+
+  void root(Usize, Isize, UE, IE);
diff --git a/cbindgen-0.24.5/tests/expectations/static.both.c b/cbindgen-0.24.5/tests/expectations/static.both.c
new file mode 100644
index 0000000..404b180
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.both.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct Foo {
+
+} Foo;
+
+extern const int32_t NUMBER;
+
+extern struct Foo FOO;
+
+extern const struct Bar BAR;
+
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/static.both.compat.c b/cbindgen-0.24.5/tests/expectations/static.both.compat.c
new file mode 100644
index 0000000..b06525e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.both.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct Foo {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const int32_t NUMBER;
+
+extern struct Foo FOO;
+
+extern const struct Bar BAR;
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/static.c b/cbindgen-0.24.5/tests/expectations/static.c
new file mode 100644
index 0000000..43a0db6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct {
+
+} Foo;
+
+extern const int32_t NUMBER;
+
+extern Foo FOO;
+
+extern const Bar BAR;
+
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/static.compat.c b/cbindgen-0.24.5/tests/expectations/static.compat.c
new file mode 100644
index 0000000..e25d2f0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct {
+
+} Foo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const int32_t NUMBER;
+
+extern Foo FOO;
+
+extern const Bar BAR;
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/static.cpp b/cbindgen-0.24.5/tests/expectations/static.cpp
new file mode 100644
index 0000000..4695d3c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Bar;
+
+struct Foo {
+
+};
+
+extern "C" {
+
+extern const int32_t NUMBER;
+
+extern Foo FOO;
+
+extern const Bar BAR;
+
+void root();
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/static.pyx b/cbindgen-0.24.5/tests/expectations/static.pyx
new file mode 100644
index 0000000..923621a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Bar:
+    pass
+
+  ctypedef struct Foo:
+    pass
+
+  extern const int32_t NUMBER;
+
+  extern Foo FOO;
+
+  extern const Bar BAR;
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/static.tag.c b/cbindgen-0.24.5/tests/expectations/static.tag.c
new file mode 100644
index 0000000..28f948a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.tag.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar;
+
+struct Foo {
+
+};
+
+extern const int32_t NUMBER;
+
+extern struct Foo FOO;
+
+extern const struct Bar BAR;
+
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/static.tag.compat.c b/cbindgen-0.24.5/tests/expectations/static.tag.compat.c
new file mode 100644
index 0000000..4afafee
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.tag.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar;
+
+struct Foo {
+
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+extern const int32_t NUMBER;
+
+extern struct Foo FOO;
+
+extern const struct Bar BAR;
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/static.tag.pyx b/cbindgen-0.24.5/tests/expectations/static.tag.pyx
new file mode 100644
index 0000000..ccf603f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/static.tag.pyx
@@ -0,0 +1,21 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Bar:
+    pass
+
+  cdef struct Foo:
+    pass
+
+  extern const int32_t NUMBER;
+
+  extern Foo FOO;
+
+  extern const Bar BAR;
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.both.c b/cbindgen-0.24.5/tests/expectations/std_lib.both.c
new file mode 100644
index 0000000..c6f1164
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.both.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i32 Option_i32;
+
+typedef struct Result_i32__String Result_i32__String;
+
+typedef struct Vec_String Vec_String;
+
+void root(const struct Vec_String *a,
+          const struct Option_i32 *b,
+          const struct Result_i32__String *c);
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.both.compat.c b/cbindgen-0.24.5/tests/expectations/std_lib.both.compat.c
new file mode 100644
index 0000000..ee4f669
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.both.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i32 Option_i32;
+
+typedef struct Result_i32__String Result_i32__String;
+
+typedef struct Vec_String Vec_String;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct Vec_String *a,
+          const struct Option_i32 *b,
+          const struct Result_i32__String *c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.c b/cbindgen-0.24.5/tests/expectations/std_lib.c
new file mode 100644
index 0000000..784f388
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i32 Option_i32;
+
+typedef struct Result_i32__String Result_i32__String;
+
+typedef struct Vec_String Vec_String;
+
+void root(const Vec_String *a, const Option_i32 *b, const Result_i32__String *c);
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.compat.c b/cbindgen-0.24.5/tests/expectations/std_lib.compat.c
new file mode 100644
index 0000000..b25a57e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Option_i32 Option_i32;
+
+typedef struct Result_i32__String Result_i32__String;
+
+typedef struct Vec_String Vec_String;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const Vec_String *a, const Option_i32 *b, const Result_i32__String *c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.cpp b/cbindgen-0.24.5/tests/expectations/std_lib.cpp
new file mode 100644
index 0000000..f0cd338
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.cpp
@@ -0,0 +1,22 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct Option;
+
+template<typename T = void, typename E = void>
+struct Result;
+
+struct String;
+
+template<typename T = void>
+struct Vec;
+
+extern "C" {
+
+void root(const Vec<String> *a, const Option<int32_t> *b, const Result<int32_t, String> *c);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.pyx b/cbindgen-0.24.5/tests/expectations/std_lib.pyx
new file mode 100644
index 0000000..37b4590
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.pyx
@@ -0,0 +1,18 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Option_i32:
+    pass
+
+  ctypedef struct Result_i32__String:
+    pass
+
+  ctypedef struct Vec_String:
+    pass
+
+  void root(const Vec_String *a, const Option_i32 *b, const Result_i32__String *c);
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.tag.c b/cbindgen-0.24.5/tests/expectations/std_lib.tag.c
new file mode 100644
index 0000000..f963ddf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.tag.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Option_i32;
+
+struct Result_i32__String;
+
+struct Vec_String;
+
+void root(const struct Vec_String *a,
+          const struct Option_i32 *b,
+          const struct Result_i32__String *c);
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.tag.compat.c b/cbindgen-0.24.5/tests/expectations/std_lib.tag.compat.c
new file mode 100644
index 0000000..291ee6d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.tag.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Option_i32;
+
+struct Result_i32__String;
+
+struct Vec_String;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(const struct Vec_String *a,
+          const struct Option_i32 *b,
+          const struct Result_i32__String *c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/std_lib.tag.pyx b/cbindgen-0.24.5/tests/expectations/std_lib.tag.pyx
new file mode 100644
index 0000000..22f248d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/std_lib.tag.pyx
@@ -0,0 +1,18 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Option_i32:
+    pass
+
+  cdef struct Result_i32__String:
+    pass
+
+  cdef struct Vec_String:
+    pass
+
+  void root(const Vec_String *a, const Option_i32 *b, const Result_i32__String *c);
diff --git a/cbindgen-0.24.5/tests/expectations/struct.both.c b/cbindgen-0.24.5/tests/expectations/struct.both.c
new file mode 100644
index 0000000..5664185
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.both.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Normal {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef struct NormalWithZST {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+typedef struct TupleRenamed {
+  int32_t m0;
+  float m1;
+} TupleRenamed;
+
+typedef struct TupleNamed {
+  int32_t x;
+  float y;
+} TupleNamed;
+
+void root(struct Opaque *a,
+          struct Normal b,
+          struct NormalWithZST c,
+          struct TupleRenamed d,
+          struct TupleNamed e);
diff --git a/cbindgen-0.24.5/tests/expectations/struct.both.compat.c b/cbindgen-0.24.5/tests/expectations/struct.both.compat.c
new file mode 100644
index 0000000..5f080d9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.both.compat.c
@@ -0,0 +1,40 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct Normal {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef struct NormalWithZST {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+typedef struct TupleRenamed {
+  int32_t m0;
+  float m1;
+} TupleRenamed;
+
+typedef struct TupleNamed {
+  int32_t x;
+  float y;
+} TupleNamed;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Opaque *a,
+          struct Normal b,
+          struct NormalWithZST c,
+          struct TupleRenamed d,
+          struct TupleNamed e);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct.c b/cbindgen-0.24.5/tests/expectations/struct.c
new file mode 100644
index 0000000..207e9a0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.c
@@ -0,0 +1,28 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef struct {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+typedef struct {
+  int32_t m0;
+  float m1;
+} TupleRenamed;
+
+typedef struct {
+  int32_t x;
+  float y;
+} TupleNamed;
+
+void root(Opaque *a, Normal b, NormalWithZST c, TupleRenamed d, TupleNamed e);
diff --git a/cbindgen-0.24.5/tests/expectations/struct.compat.c b/cbindgen-0.24.5/tests/expectations/struct.compat.c
new file mode 100644
index 0000000..701f49b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.compat.c
@@ -0,0 +1,36 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef struct {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+typedef struct {
+  int32_t m0;
+  float m1;
+} TupleRenamed;
+
+typedef struct {
+  int32_t x;
+  float y;
+} TupleNamed;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Opaque *a, Normal b, NormalWithZST c, TupleRenamed d, TupleNamed e);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct.cpp b/cbindgen-0.24.5/tests/expectations/struct.cpp
new file mode 100644
index 0000000..2869da7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.cpp
@@ -0,0 +1,33 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Opaque;
+
+struct Normal {
+  int32_t x;
+  float y;
+};
+
+struct NormalWithZST {
+  int32_t x;
+  float y;
+};
+
+struct TupleRenamed {
+  int32_t m0;
+  float m1;
+};
+
+struct TupleNamed {
+  int32_t x;
+  float y;
+};
+
+extern "C" {
+
+void root(Opaque *a, Normal b, NormalWithZST c, TupleRenamed d, TupleNamed e);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/struct.pyx b/cbindgen-0.24.5/tests/expectations/struct.pyx
new file mode 100644
index 0000000..3342101
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.pyx
@@ -0,0 +1,28 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Opaque:
+    pass
+
+  ctypedef struct Normal:
+    int32_t x;
+    float y;
+
+  ctypedef struct NormalWithZST:
+    int32_t x;
+    float y;
+
+  ctypedef struct TupleRenamed:
+    int32_t m0;
+    float m1;
+
+  ctypedef struct TupleNamed:
+    int32_t x;
+    float y;
+
+  void root(Opaque *a, Normal b, NormalWithZST c, TupleRenamed d, TupleNamed e);
diff --git a/cbindgen-0.24.5/tests/expectations/struct.tag.c b/cbindgen-0.24.5/tests/expectations/struct.tag.c
new file mode 100644
index 0000000..cc5ddaa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.tag.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct Normal {
+  int32_t x;
+  float y;
+};
+
+struct NormalWithZST {
+  int32_t x;
+  float y;
+};
+
+struct TupleRenamed {
+  int32_t m0;
+  float m1;
+};
+
+struct TupleNamed {
+  int32_t x;
+  float y;
+};
+
+void root(struct Opaque *a,
+          struct Normal b,
+          struct NormalWithZST c,
+          struct TupleRenamed d,
+          struct TupleNamed e);
diff --git a/cbindgen-0.24.5/tests/expectations/struct.tag.compat.c b/cbindgen-0.24.5/tests/expectations/struct.tag.compat.c
new file mode 100644
index 0000000..76ae4fc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.tag.compat.c
@@ -0,0 +1,40 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct Normal {
+  int32_t x;
+  float y;
+};
+
+struct NormalWithZST {
+  int32_t x;
+  float y;
+};
+
+struct TupleRenamed {
+  int32_t m0;
+  float m1;
+};
+
+struct TupleNamed {
+  int32_t x;
+  float y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Opaque *a,
+          struct Normal b,
+          struct NormalWithZST c,
+          struct TupleRenamed d,
+          struct TupleNamed e);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct.tag.pyx b/cbindgen-0.24.5/tests/expectations/struct.tag.pyx
new file mode 100644
index 0000000..768f375
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct.tag.pyx
@@ -0,0 +1,28 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Opaque:
+    pass
+
+  cdef struct Normal:
+    int32_t x;
+    float y;
+
+  cdef struct NormalWithZST:
+    int32_t x;
+    float y;
+
+  cdef struct TupleRenamed:
+    int32_t m0;
+    float m1;
+
+  cdef struct TupleNamed:
+    int32_t x;
+    float y;
+
+  void root(Opaque *a, Normal b, NormalWithZST c, TupleRenamed d, TupleNamed e);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.both.c b/cbindgen-0.24.5/tests/expectations/struct_literal.both.c
new file mode 100644
index 0000000..7c5cde3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.both.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct Foo {
+  int32_t a;
+  uint32_t b;
+} Foo;
+#define Foo_FOO (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO2 (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO3 (Foo){ .a = 42, .b = 47 }
+
+
+#define BAR (Foo){ .a = 42, .b = 1337 }
+
+
+
+void root(struct Foo x, struct Bar bar);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.both.compat.c b/cbindgen-0.24.5/tests/expectations/struct_literal.both.compat.c
new file mode 100644
index 0000000..bfc403d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.both.compat.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct Foo {
+  int32_t a;
+  uint32_t b;
+} Foo;
+#define Foo_FOO (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO2 (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO3 (Foo){ .a = 42, .b = 47 }
+
+
+#define BAR (Foo){ .a = 42, .b = 1337 }
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x, struct Bar bar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.c b/cbindgen-0.24.5/tests/expectations/struct_literal.c
new file mode 100644
index 0000000..dd43949
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct {
+  int32_t a;
+  uint32_t b;
+} Foo;
+#define Foo_FOO (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO2 (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO3 (Foo){ .a = 42, .b = 47 }
+
+
+#define BAR (Foo){ .a = 42, .b = 1337 }
+
+
+
+void root(Foo x, Bar bar);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.compat.c b/cbindgen-0.24.5/tests/expectations/struct_literal.compat.c
new file mode 100644
index 0000000..011f09e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.compat.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Bar Bar;
+
+typedef struct {
+  int32_t a;
+  uint32_t b;
+} Foo;
+#define Foo_FOO (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO2 (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO3 (Foo){ .a = 42, .b = 47 }
+
+
+#define BAR (Foo){ .a = 42, .b = 1337 }
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Foo x, Bar bar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.cpp b/cbindgen-0.24.5/tests/expectations/struct_literal.cpp
new file mode 100644
index 0000000..68fa0f5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.cpp
@@ -0,0 +1,26 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Bar;
+
+struct Foo {
+  int32_t a;
+  uint32_t b;
+};
+constexpr static const Foo Foo_FOO = Foo{ /* .a = */ 42, /* .b = */ 47 };
+constexpr static const Foo Foo_FOO2 = Foo{ /* .a = */ 42, /* .b = */ 47 };
+constexpr static const Foo Foo_FOO3 = Foo{ /* .a = */ 42, /* .b = */ 47 };
+
+
+constexpr static const Foo BAR = Foo{ /* .a = */ 42, /* .b = */ 1337 };
+
+
+
+extern "C" {
+
+void root(Foo x, Bar bar);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.pyx b/cbindgen-0.24.5/tests/expectations/struct_literal.pyx
new file mode 100644
index 0000000..d612fd0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.pyx
@@ -0,0 +1,24 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Bar:
+    pass
+
+  ctypedef struct Foo:
+    int32_t a;
+    uint32_t b;
+  const Foo Foo_FOO # = <Foo>{ 42, 47 }
+  const Foo Foo_FOO2 # = <Foo>{ 42, 47 }
+  const Foo Foo_FOO3 # = <Foo>{ 42, 47 }
+
+
+  const Foo BAR # = <Foo>{ 42, 1337 }
+
+
+
+  void root(Foo x, Bar bar);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.tag.c b/cbindgen-0.24.5/tests/expectations/struct_literal.tag.c
new file mode 100644
index 0000000..e16ddb7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.tag.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar;
+
+struct Foo {
+  int32_t a;
+  uint32_t b;
+};
+#define Foo_FOO (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO2 (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO3 (Foo){ .a = 42, .b = 47 }
+
+
+#define BAR (Foo){ .a = 42, .b = 1337 }
+
+
+
+void root(struct Foo x, struct Bar bar);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.tag.compat.c b/cbindgen-0.24.5/tests/expectations/struct_literal.tag.compat.c
new file mode 100644
index 0000000..23c8ac2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.tag.compat.c
@@ -0,0 +1,29 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Bar;
+
+struct Foo {
+  int32_t a;
+  uint32_t b;
+};
+#define Foo_FOO (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO2 (Foo){ .a = 42, .b = 47 }
+#define Foo_FOO3 (Foo){ .a = 42, .b = 47 }
+
+
+#define BAR (Foo){ .a = 42, .b = 1337 }
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Foo x, struct Bar bar);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal.tag.pyx b/cbindgen-0.24.5/tests/expectations/struct_literal.tag.pyx
new file mode 100644
index 0000000..9074775
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal.tag.pyx
@@ -0,0 +1,24 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Bar:
+    pass
+
+  cdef struct Foo:
+    int32_t a;
+    uint32_t b;
+  const Foo Foo_FOO # = <Foo>{ 42, 47 }
+  const Foo Foo_FOO2 # = <Foo>{ 42, 47 }
+  const Foo Foo_FOO3 # = <Foo>{ 42, 47 }
+
+
+  const Foo BAR # = <Foo>{ 42, 1337 }
+
+
+
+  void root(Foo x, Bar bar);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.both.c b/cbindgen-0.24.5/tests/expectations/struct_literal_order.both.c
new file mode 100644
index 0000000..e1e87ba
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.both.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct ABC {
+  float a;
+  uint32_t b;
+  uint32_t c;
+} ABC;
+#define ABC_abc (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_bac (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_cba (ABC){ .a = 1.0, .b = 2, .c = 3 }
+
+typedef struct BAC {
+  uint32_t b;
+  float a;
+  int32_t c;
+} BAC;
+#define BAC_abc (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_bac (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_cba (BAC){ .b = 1, .a = 2.0, .c = 3 }
+
+void root(struct ABC a1, struct BAC a2);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.both.compat.c b/cbindgen-0.24.5/tests/expectations/struct_literal_order.both.compat.c
new file mode 100644
index 0000000..849532d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.both.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct ABC {
+  float a;
+  uint32_t b;
+  uint32_t c;
+} ABC;
+#define ABC_abc (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_bac (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_cba (ABC){ .a = 1.0, .b = 2, .c = 3 }
+
+typedef struct BAC {
+  uint32_t b;
+  float a;
+  int32_t c;
+} BAC;
+#define BAC_abc (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_bac (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_cba (BAC){ .b = 1, .a = 2.0, .c = 3 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct ABC a1, struct BAC a2);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.c b/cbindgen-0.24.5/tests/expectations/struct_literal_order.c
new file mode 100644
index 0000000..9f6252e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float a;
+  uint32_t b;
+  uint32_t c;
+} ABC;
+#define ABC_abc (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_bac (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_cba (ABC){ .a = 1.0, .b = 2, .c = 3 }
+
+typedef struct {
+  uint32_t b;
+  float a;
+  int32_t c;
+} BAC;
+#define BAC_abc (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_bac (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_cba (BAC){ .b = 1, .a = 2.0, .c = 3 }
+
+void root(ABC a1, BAC a2);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.compat.c b/cbindgen-0.24.5/tests/expectations/struct_literal_order.compat.c
new file mode 100644
index 0000000..3e8feb4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  float a;
+  uint32_t b;
+  uint32_t c;
+} ABC;
+#define ABC_abc (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_bac (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_cba (ABC){ .a = 1.0, .b = 2, .c = 3 }
+
+typedef struct {
+  uint32_t b;
+  float a;
+  int32_t c;
+} BAC;
+#define BAC_abc (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_bac (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_cba (BAC){ .b = 1, .a = 2.0, .c = 3 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(ABC a1, BAC a2);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.cpp b/cbindgen-0.24.5/tests/expectations/struct_literal_order.cpp
new file mode 100644
index 0000000..9f4021c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.cpp
@@ -0,0 +1,29 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct ABC {
+  float a;
+  uint32_t b;
+  uint32_t c;
+};
+constexpr static const ABC ABC_abc = ABC{ /* .a = */ 1.0, /* .b = */ 2, /* .c = */ 3 };
+constexpr static const ABC ABC_bac = ABC{ /* .a = */ 1.0, /* .b = */ 2, /* .c = */ 3 };
+constexpr static const ABC ABC_cba = ABC{ /* .a = */ 1.0, /* .b = */ 2, /* .c = */ 3 };
+
+struct BAC {
+  uint32_t b;
+  float a;
+  int32_t c;
+};
+constexpr static const BAC BAC_abc = BAC{ /* .b = */ 1, /* .a = */ 2.0, /* .c = */ 3 };
+constexpr static const BAC BAC_bac = BAC{ /* .b = */ 1, /* .a = */ 2.0, /* .c = */ 3 };
+constexpr static const BAC BAC_cba = BAC{ /* .b = */ 1, /* .a = */ 2.0, /* .c = */ 3 };
+
+extern "C" {
+
+void root(ABC a1, BAC a2);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.pyx b/cbindgen-0.24.5/tests/expectations/struct_literal_order.pyx
new file mode 100644
index 0000000..1a9dd8b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.pyx
@@ -0,0 +1,25 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct ABC:
+    float a;
+    uint32_t b;
+    uint32_t c;
+  const ABC ABC_abc # = <ABC>{ 1.0, 2, 3 }
+  const ABC ABC_bac # = <ABC>{ 1.0, 2, 3 }
+  const ABC ABC_cba # = <ABC>{ 1.0, 2, 3 }
+
+  ctypedef struct BAC:
+    uint32_t b;
+    float a;
+    int32_t c;
+  const BAC BAC_abc # = <BAC>{ 1, 2.0, 3 }
+  const BAC BAC_bac # = <BAC>{ 1, 2.0, 3 }
+  const BAC BAC_cba # = <BAC>{ 1, 2.0, 3 }
+
+  void root(ABC a1, BAC a2);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.c b/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.c
new file mode 100644
index 0000000..ef1686a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct ABC {
+  float a;
+  uint32_t b;
+  uint32_t c;
+};
+#define ABC_abc (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_bac (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_cba (ABC){ .a = 1.0, .b = 2, .c = 3 }
+
+struct BAC {
+  uint32_t b;
+  float a;
+  int32_t c;
+};
+#define BAC_abc (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_bac (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_cba (BAC){ .b = 1, .a = 2.0, .c = 3 }
+
+void root(struct ABC a1, struct BAC a2);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.compat.c b/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.compat.c
new file mode 100644
index 0000000..7fd7ca6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.compat.c
@@ -0,0 +1,32 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct ABC {
+  float a;
+  uint32_t b;
+  uint32_t c;
+};
+#define ABC_abc (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_bac (ABC){ .a = 1.0, .b = 2, .c = 3 }
+#define ABC_cba (ABC){ .a = 1.0, .b = 2, .c = 3 }
+
+struct BAC {
+  uint32_t b;
+  float a;
+  int32_t c;
+};
+#define BAC_abc (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_bac (BAC){ .b = 1, .a = 2.0, .c = 3 }
+#define BAC_cba (BAC){ .b = 1, .a = 2.0, .c = 3 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct ABC a1, struct BAC a2);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.pyx b/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.pyx
new file mode 100644
index 0000000..ed2cf3e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_literal_order.tag.pyx
@@ -0,0 +1,25 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct ABC:
+    float a;
+    uint32_t b;
+    uint32_t c;
+  const ABC ABC_abc # = <ABC>{ 1.0, 2, 3 }
+  const ABC ABC_bac # = <ABC>{ 1.0, 2, 3 }
+  const ABC ABC_cba # = <ABC>{ 1.0, 2, 3 }
+
+  cdef struct BAC:
+    uint32_t b;
+    float a;
+    int32_t c;
+  const BAC BAC_abc # = <BAC>{ 1, 2.0, 3 }
+  const BAC BAC_bac # = <BAC>{ 1, 2.0, 3 }
+  const BAC BAC_cba # = <BAC>{ 1, 2.0, 3 }
+
+  void root(ABC a1, BAC a2);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.both.c b/cbindgen-0.24.5/tests/expectations/struct_self.both.c
new file mode 100644
index 0000000..6440e8f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.both.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_Bar {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef struct Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+} Bar;
+
+void root(struct Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.both.compat.c b/cbindgen-0.24.5/tests/expectations/struct_self.both.compat.c
new file mode 100644
index 0000000..473f849
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.both.compat.c
@@ -0,0 +1,23 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_Bar {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef struct Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.c b/cbindgen-0.24.5/tests/expectations/struct_self.c
new file mode 100644
index 0000000..d1bcc13
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef struct {
+  int32_t something;
+  Foo_Bar subexpressions;
+} Bar;
+
+void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.compat.c b/cbindgen-0.24.5/tests/expectations/struct_self.compat.c
new file mode 100644
index 0000000..1e54375
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.compat.c
@@ -0,0 +1,23 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef struct {
+  int32_t something;
+  Foo_Bar subexpressions;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.cpp b/cbindgen-0.24.5/tests/expectations/struct_self.cpp
new file mode 100644
index 0000000..e8532ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T>
+struct Foo {
+  const int32_t *something;
+};
+
+struct Bar {
+  int32_t something;
+  Foo<Bar> subexpressions;
+};
+
+extern "C" {
+
+void root(Bar b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.pyx b/cbindgen-0.24.5/tests/expectations/struct_self.pyx
new file mode 100644
index 0000000..ec3c345
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo_Bar:
+    const int32_t *something;
+
+  ctypedef struct Bar:
+    int32_t something;
+    Foo_Bar subexpressions;
+
+  void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.tag.c b/cbindgen-0.24.5/tests/expectations/struct_self.tag.c
new file mode 100644
index 0000000..cc7db72
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.tag.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_Bar {
+  const int32_t *something;
+};
+
+struct Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+};
+
+void root(struct Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.tag.compat.c b/cbindgen-0.24.5/tests/expectations/struct_self.tag.compat.c
new file mode 100644
index 0000000..ccb3936
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.tag.compat.c
@@ -0,0 +1,23 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_Bar {
+  const int32_t *something;
+};
+
+struct Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/struct_self.tag.pyx b/cbindgen-0.24.5/tests/expectations/struct_self.tag.pyx
new file mode 100644
index 0000000..3dc9d07
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/struct_self.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo_Bar:
+    const int32_t *something;
+
+  cdef struct Bar:
+    int32_t something;
+    Foo_Bar subexpressions;
+
+  void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/style_crash.compat.c b/cbindgen-0.24.5/tests/expectations/style_crash.compat.c
new file mode 100644
index 0000000..20c8381
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/style_crash.compat.c
@@ -0,0 +1,4 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
diff --git a/cbindgen-0.24.5/tests/expectations/style_crash.cpp b/cbindgen-0.24.5/tests/expectations/style_crash.cpp
new file mode 100644
index 0000000..da5bc5a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/style_crash.cpp
@@ -0,0 +1,5 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
diff --git a/cbindgen-0.24.5/tests/expectations/style_crash.pyx b/cbindgen-0.24.5/tests/expectations/style_crash.pyx
new file mode 100644
index 0000000..c82ecc5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/style_crash.pyx
@@ -0,0 +1,8 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+  pass
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.both.c b/cbindgen-0.24.5/tests/expectations/swift_name.both.c
new file mode 100644
index 0000000..4911679
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.both.c
@@ -0,0 +1,54 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct SelfTypeTestStruct {
+  uint8_t times;
+} SelfTypeTestStruct;
+
+typedef struct PointerToOpaque {
+  struct Opaque *ptr;
+} PointerToOpaque;
+
+void rust_print_hello_world(void) CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+struct SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box(void) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(struct SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(struct SelfTypeTestStruct *boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+struct PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(struct PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.both.compat.c b/cbindgen-0.24.5/tests/expectations/swift_name.both.compat.c
new file mode 100644
index 0000000..4544162
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.both.compat.c
@@ -0,0 +1,62 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct SelfTypeTestStruct {
+  uint8_t times;
+} SelfTypeTestStruct;
+
+typedef struct PointerToOpaque {
+  struct Opaque *ptr;
+} PointerToOpaque;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void rust_print_hello_world(void) CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+struct SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box(void) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(struct SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(struct SelfTypeTestStruct *boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+struct PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(struct PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.c b/cbindgen-0.24.5/tests/expectations/swift_name.c
new file mode 100644
index 0000000..17ec214
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.c
@@ -0,0 +1,54 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  uint8_t times;
+} SelfTypeTestStruct;
+
+typedef struct {
+  Opaque *ptr;
+} PointerToOpaque;
+
+void rust_print_hello_world(void) CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box(void) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(SelfTypeTestStruct *boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.compat.c b/cbindgen-0.24.5/tests/expectations/swift_name.compat.c
new file mode 100644
index 0000000..5409643
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.compat.c
@@ -0,0 +1,62 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef struct {
+  uint8_t times;
+} SelfTypeTestStruct;
+
+typedef struct {
+  Opaque *ptr;
+} PointerToOpaque;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void rust_print_hello_world(void) CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box(void) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(SelfTypeTestStruct *boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.cpp b/cbindgen-0.24.5/tests/expectations/swift_name.cpp
new file mode 100644
index 0000000..5d5ae0b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.cpp
@@ -0,0 +1,62 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T = void>
+struct Box;
+
+struct Opaque;
+
+struct SelfTypeTestStruct {
+  uint8_t times;
+};
+
+struct PointerToOpaque {
+  Opaque *ptr;
+};
+
+extern "C" {
+
+void rust_print_hello_world() CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(Box<SelfTypeTestStruct> self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+Box<SelfTypeTestStruct> SelfTypeTestStruct_should_not_exist_return_box() CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(Box<SelfTypeTestStruct> boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.pyx b/cbindgen-0.24.5/tests/expectations/swift_name.pyx
new file mode 100644
index 0000000..3c2435a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.pyx
@@ -0,0 +1,56 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Opaque:
+    pass
+
+  ctypedef struct SelfTypeTestStruct:
+    uint8_t times;
+
+  ctypedef struct PointerToOpaque:
+    Opaque *ptr;
+
+  void rust_print_hello_world();
+
+  void SelfTypeTestStruct_should_exist_ref(const SelfTypeTestStruct *self);
+
+  void SelfTypeTestStruct_should_exist_ref_mut(SelfTypeTestStruct *self);
+
+  void SelfTypeTestStruct_should_not_exist_box(SelfTypeTestStruct *self);
+
+  SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box();
+
+  void SelfTypeTestStruct_should_exist_annotated_self(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_annotated_mut_self(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_annotated_by_name(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_annotated_mut_by_name(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_unannotated(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_mut_unannotated(SelfTypeTestStruct self);
+
+  void free_function_should_exist_ref(const SelfTypeTestStruct *test_struct);
+
+  void free_function_should_exist_ref_mut(SelfTypeTestStruct *test_struct);
+
+  void unnamed_argument(SelfTypeTestStruct*);
+
+  void free_function_should_not_exist_box(SelfTypeTestStruct *boxed);
+
+  void free_function_should_exist_annotated_by_name(SelfTypeTestStruct test_struct);
+
+  void free_function_should_exist_annotated_mut_by_name(SelfTypeTestStruct test_struct);
+
+  PointerToOpaque PointerToOpaque_create(uint8_t times);
+
+  void PointerToOpaque_sayHello(PointerToOpaque self);
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.tag.c b/cbindgen-0.24.5/tests/expectations/swift_name.tag.c
new file mode 100644
index 0000000..370b88a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.tag.c
@@ -0,0 +1,54 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct SelfTypeTestStruct {
+  uint8_t times;
+};
+
+struct PointerToOpaque {
+  struct Opaque *ptr;
+};
+
+void rust_print_hello_world(void) CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+struct SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box(void) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(struct SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(struct SelfTypeTestStruct *boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+struct PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(struct PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.tag.compat.c b/cbindgen-0.24.5/tests/expectations/swift_name.tag.compat.c
new file mode 100644
index 0000000..6ac6a00
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.tag.compat.c
@@ -0,0 +1,62 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+struct SelfTypeTestStruct {
+  uint8_t times;
+};
+
+struct PointerToOpaque {
+  struct Opaque *ptr;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void rust_print_hello_world(void) CF_SWIFT_NAME(rust_print_hello_world());
+
+void SelfTypeTestStruct_should_exist_ref(const struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref(self:));
+
+void SelfTypeTestStruct_should_exist_ref_mut(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_ref_mut(self:));
+
+void SelfTypeTestStruct_should_not_exist_box(struct SelfTypeTestStruct *self) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_box(self:));
+
+struct SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box(void) CF_SWIFT_NAME(SelfTypeTestStruct.should_not_exist_return_box());
+
+void SelfTypeTestStruct_should_exist_annotated_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_self(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_self(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_annotated_mut_by_name(self:));
+
+void SelfTypeTestStruct_should_exist_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_unannotated(self:));
+
+void SelfTypeTestStruct_should_exist_mut_unannotated(struct SelfTypeTestStruct self) CF_SWIFT_NAME(SelfTypeTestStruct.should_exist_mut_unannotated(self:));
+
+void free_function_should_exist_ref(const struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref(test_struct:));
+
+void free_function_should_exist_ref_mut(struct SelfTypeTestStruct *test_struct) CF_SWIFT_NAME(free_function_should_exist_ref_mut(test_struct:));
+
+void unnamed_argument(struct SelfTypeTestStruct*);
+
+void free_function_should_not_exist_box(struct SelfTypeTestStruct *boxed) CF_SWIFT_NAME(free_function_should_not_exist_box(boxed:));
+
+void free_function_should_exist_annotated_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_by_name(test_struct:));
+
+void free_function_should_exist_annotated_mut_by_name(struct SelfTypeTestStruct test_struct) CF_SWIFT_NAME(free_function_should_exist_annotated_mut_by_name(test_struct:));
+
+struct PointerToOpaque PointerToOpaque_create(uint8_t times) CF_SWIFT_NAME(PointerToOpaque.create(times:));
+
+void PointerToOpaque_sayHello(struct PointerToOpaque self) CF_SWIFT_NAME(PointerToOpaque.sayHello(self:));
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/swift_name.tag.pyx b/cbindgen-0.24.5/tests/expectations/swift_name.tag.pyx
new file mode 100644
index 0000000..127fb32
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/swift_name.tag.pyx
@@ -0,0 +1,56 @@
+#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))
+
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Opaque:
+    pass
+
+  cdef struct SelfTypeTestStruct:
+    uint8_t times;
+
+  cdef struct PointerToOpaque:
+    Opaque *ptr;
+
+  void rust_print_hello_world();
+
+  void SelfTypeTestStruct_should_exist_ref(const SelfTypeTestStruct *self);
+
+  void SelfTypeTestStruct_should_exist_ref_mut(SelfTypeTestStruct *self);
+
+  void SelfTypeTestStruct_should_not_exist_box(SelfTypeTestStruct *self);
+
+  SelfTypeTestStruct *SelfTypeTestStruct_should_not_exist_return_box();
+
+  void SelfTypeTestStruct_should_exist_annotated_self(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_annotated_mut_self(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_annotated_by_name(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_annotated_mut_by_name(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_unannotated(SelfTypeTestStruct self);
+
+  void SelfTypeTestStruct_should_exist_mut_unannotated(SelfTypeTestStruct self);
+
+  void free_function_should_exist_ref(const SelfTypeTestStruct *test_struct);
+
+  void free_function_should_exist_ref_mut(SelfTypeTestStruct *test_struct);
+
+  void unnamed_argument(SelfTypeTestStruct*);
+
+  void free_function_should_not_exist_box(SelfTypeTestStruct *boxed);
+
+  void free_function_should_exist_annotated_by_name(SelfTypeTestStruct test_struct);
+
+  void free_function_should_exist_annotated_mut_by_name(SelfTypeTestStruct test_struct);
+
+  PointerToOpaque PointerToOpaque_create(uint8_t times);
+
+  void PointerToOpaque_sayHello(PointerToOpaque self);
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.both.c b/cbindgen-0.24.5/tests/expectations/transform_op.both.c
new file mode 100644
index 0000000..e9605c3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.both.c
@@ -0,0 +1,144 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StylePoint_i32 {
+  int32_t x;
+  int32_t y;
+} StylePoint_i32;
+
+typedef struct StylePoint_f32 {
+  float x;
+  float y;
+} StylePoint_f32;
+
+enum StyleFoo_i32_Tag {
+  Foo_i32,
+  Bar_i32,
+  Baz_i32,
+  Bazz_i32,
+};
+typedef uint8_t StyleFoo_i32_Tag;
+
+typedef struct StyleFoo_Body_i32 {
+  StyleFoo_i32_Tag tag;
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+} StyleFoo_Body_i32;
+
+typedef union StyleFoo_i32 {
+  StyleFoo_i32_Tag tag;
+  StyleFoo_Body_i32 foo;
+  struct {
+    StyleFoo_i32_Tag bar_tag;
+    int32_t bar;
+  };
+  struct {
+    StyleFoo_i32_Tag baz_tag;
+    struct StylePoint_i32 baz;
+  };
+} StyleFoo_i32;
+
+typedef enum StyleBar_i32_Tag {
+  Bar1_i32,
+  Bar2_i32,
+  Bar3_i32,
+  Bar4_i32,
+} StyleBar_i32_Tag;
+
+typedef struct StyleBar1_Body_i32 {
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_i32;
+
+typedef struct StyleBar_i32 {
+  StyleBar_i32_Tag tag;
+  union {
+    StyleBar1_Body_i32 bar1;
+    struct {
+      int32_t bar2;
+    };
+    struct {
+      struct StylePoint_i32 bar3;
+    };
+  };
+} StyleBar_i32;
+
+typedef struct StylePoint_u32 {
+  uint32_t x;
+  uint32_t y;
+} StylePoint_u32;
+
+typedef enum StyleBar_u32_Tag {
+  Bar1_u32,
+  Bar2_u32,
+  Bar3_u32,
+  Bar4_u32,
+} StyleBar_u32_Tag;
+
+typedef struct StyleBar1_Body_u32 {
+  int32_t x;
+  struct StylePoint_u32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_u32;
+
+typedef struct StyleBar_u32 {
+  StyleBar_u32_Tag tag;
+  union {
+    StyleBar1_Body_u32 bar1;
+    struct {
+      uint32_t bar2;
+    };
+    struct {
+      struct StylePoint_u32 bar3;
+    };
+  };
+} StyleBar_u32;
+
+enum StyleBaz_Tag {
+  Baz1,
+  Baz2,
+  Baz3,
+};
+typedef uint8_t StyleBaz_Tag;
+
+typedef union StyleBaz {
+  StyleBaz_Tag tag;
+  struct {
+    StyleBaz_Tag baz1_tag;
+    struct StyleBar_u32 baz1;
+  };
+  struct {
+    StyleBaz_Tag baz2_tag;
+    struct StylePoint_i32 baz2;
+  };
+} StyleBaz;
+
+enum StyleTaz_Tag {
+  Taz1,
+  Taz2,
+  Taz3,
+};
+typedef uint8_t StyleTaz_Tag;
+
+typedef struct StyleTaz {
+  StyleTaz_Tag tag;
+  union {
+    struct {
+      struct StyleBar_u32 taz1;
+    };
+    struct {
+      union StyleBaz taz2;
+    };
+  };
+} StyleTaz;
+
+void foo(const union StyleFoo_i32 *foo,
+         const struct StyleBar_i32 *bar,
+         const union StyleBaz *baz,
+         const struct StyleTaz *taz);
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.both.compat.c b/cbindgen-0.24.5/tests/expectations/transform_op.both.compat.c
new file mode 100644
index 0000000..3b7a7e3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.both.compat.c
@@ -0,0 +1,170 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct StylePoint_i32 {
+  int32_t x;
+  int32_t y;
+} StylePoint_i32;
+
+typedef struct StylePoint_f32 {
+  float x;
+  float y;
+} StylePoint_f32;
+
+enum StyleFoo_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo_i32,
+  Bar_i32,
+  Baz_i32,
+  Bazz_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleFoo_i32_Tag;
+#endif // __cplusplus
+
+typedef struct StyleFoo_Body_i32 {
+  StyleFoo_i32_Tag tag;
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+} StyleFoo_Body_i32;
+
+typedef union StyleFoo_i32 {
+  StyleFoo_i32_Tag tag;
+  StyleFoo_Body_i32 foo;
+  struct {
+    StyleFoo_i32_Tag bar_tag;
+    int32_t bar;
+  };
+  struct {
+    StyleFoo_i32_Tag baz_tag;
+    struct StylePoint_i32 baz;
+  };
+} StyleFoo_i32;
+
+typedef enum StyleBar_i32_Tag {
+  Bar1_i32,
+  Bar2_i32,
+  Bar3_i32,
+  Bar4_i32,
+} StyleBar_i32_Tag;
+
+typedef struct StyleBar1_Body_i32 {
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_i32;
+
+typedef struct StyleBar_i32 {
+  StyleBar_i32_Tag tag;
+  union {
+    StyleBar1_Body_i32 bar1;
+    struct {
+      int32_t bar2;
+    };
+    struct {
+      struct StylePoint_i32 bar3;
+    };
+  };
+} StyleBar_i32;
+
+typedef struct StylePoint_u32 {
+  uint32_t x;
+  uint32_t y;
+} StylePoint_u32;
+
+typedef enum StyleBar_u32_Tag {
+  Bar1_u32,
+  Bar2_u32,
+  Bar3_u32,
+  Bar4_u32,
+} StyleBar_u32_Tag;
+
+typedef struct StyleBar1_Body_u32 {
+  int32_t x;
+  struct StylePoint_u32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_u32;
+
+typedef struct StyleBar_u32 {
+  StyleBar_u32_Tag tag;
+  union {
+    StyleBar1_Body_u32 bar1;
+    struct {
+      uint32_t bar2;
+    };
+    struct {
+      struct StylePoint_u32 bar3;
+    };
+  };
+} StyleBar_u32;
+
+enum StyleBaz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Baz1,
+  Baz2,
+  Baz3,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleBaz_Tag;
+#endif // __cplusplus
+
+typedef union StyleBaz {
+  StyleBaz_Tag tag;
+  struct {
+    StyleBaz_Tag baz1_tag;
+    struct StyleBar_u32 baz1;
+  };
+  struct {
+    StyleBaz_Tag baz2_tag;
+    struct StylePoint_i32 baz2;
+  };
+} StyleBaz;
+
+enum StyleTaz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Taz1,
+  Taz2,
+  Taz3,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleTaz_Tag;
+#endif // __cplusplus
+
+typedef struct StyleTaz {
+  StyleTaz_Tag tag;
+  union {
+    struct {
+      struct StyleBar_u32 taz1;
+    };
+    struct {
+      union StyleBaz taz2;
+    };
+  };
+} StyleTaz;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(const union StyleFoo_i32 *foo,
+         const struct StyleBar_i32 *bar,
+         const union StyleBaz *baz,
+         const struct StyleTaz *taz);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.c b/cbindgen-0.24.5/tests/expectations/transform_op.c
new file mode 100644
index 0000000..640ba55
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.c
@@ -0,0 +1,144 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  int32_t y;
+} StylePoint_i32;
+
+typedef struct {
+  float x;
+  float y;
+} StylePoint_f32;
+
+enum StyleFoo_i32_Tag {
+  Foo_i32,
+  Bar_i32,
+  Baz_i32,
+  Bazz_i32,
+};
+typedef uint8_t StyleFoo_i32_Tag;
+
+typedef struct {
+  StyleFoo_i32_Tag tag;
+  int32_t x;
+  StylePoint_i32 y;
+  StylePoint_f32 z;
+} StyleFoo_Body_i32;
+
+typedef union {
+  StyleFoo_i32_Tag tag;
+  StyleFoo_Body_i32 foo;
+  struct {
+    StyleFoo_i32_Tag bar_tag;
+    int32_t bar;
+  };
+  struct {
+    StyleFoo_i32_Tag baz_tag;
+    StylePoint_i32 baz;
+  };
+} StyleFoo_i32;
+
+typedef enum {
+  Bar1_i32,
+  Bar2_i32,
+  Bar3_i32,
+  Bar4_i32,
+} StyleBar_i32_Tag;
+
+typedef struct {
+  int32_t x;
+  StylePoint_i32 y;
+  StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_i32;
+
+typedef struct {
+  StyleBar_i32_Tag tag;
+  union {
+    StyleBar1_Body_i32 bar1;
+    struct {
+      int32_t bar2;
+    };
+    struct {
+      StylePoint_i32 bar3;
+    };
+  };
+} StyleBar_i32;
+
+typedef struct {
+  uint32_t x;
+  uint32_t y;
+} StylePoint_u32;
+
+typedef enum {
+  Bar1_u32,
+  Bar2_u32,
+  Bar3_u32,
+  Bar4_u32,
+} StyleBar_u32_Tag;
+
+typedef struct {
+  int32_t x;
+  StylePoint_u32 y;
+  StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_u32;
+
+typedef struct {
+  StyleBar_u32_Tag tag;
+  union {
+    StyleBar1_Body_u32 bar1;
+    struct {
+      uint32_t bar2;
+    };
+    struct {
+      StylePoint_u32 bar3;
+    };
+  };
+} StyleBar_u32;
+
+enum StyleBaz_Tag {
+  Baz1,
+  Baz2,
+  Baz3,
+};
+typedef uint8_t StyleBaz_Tag;
+
+typedef union {
+  StyleBaz_Tag tag;
+  struct {
+    StyleBaz_Tag baz1_tag;
+    StyleBar_u32 baz1;
+  };
+  struct {
+    StyleBaz_Tag baz2_tag;
+    StylePoint_i32 baz2;
+  };
+} StyleBaz;
+
+enum StyleTaz_Tag {
+  Taz1,
+  Taz2,
+  Taz3,
+};
+typedef uint8_t StyleTaz_Tag;
+
+typedef struct {
+  StyleTaz_Tag tag;
+  union {
+    struct {
+      StyleBar_u32 taz1;
+    };
+    struct {
+      StyleBaz taz2;
+    };
+  };
+} StyleTaz;
+
+void foo(const StyleFoo_i32 *foo,
+         const StyleBar_i32 *bar,
+         const StyleBaz *baz,
+         const StyleTaz *taz);
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.compat.c b/cbindgen-0.24.5/tests/expectations/transform_op.compat.c
new file mode 100644
index 0000000..ed7c3fd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.compat.c
@@ -0,0 +1,170 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  int32_t y;
+} StylePoint_i32;
+
+typedef struct {
+  float x;
+  float y;
+} StylePoint_f32;
+
+enum StyleFoo_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo_i32,
+  Bar_i32,
+  Baz_i32,
+  Bazz_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleFoo_i32_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  StyleFoo_i32_Tag tag;
+  int32_t x;
+  StylePoint_i32 y;
+  StylePoint_f32 z;
+} StyleFoo_Body_i32;
+
+typedef union {
+  StyleFoo_i32_Tag tag;
+  StyleFoo_Body_i32 foo;
+  struct {
+    StyleFoo_i32_Tag bar_tag;
+    int32_t bar;
+  };
+  struct {
+    StyleFoo_i32_Tag baz_tag;
+    StylePoint_i32 baz;
+  };
+} StyleFoo_i32;
+
+typedef enum {
+  Bar1_i32,
+  Bar2_i32,
+  Bar3_i32,
+  Bar4_i32,
+} StyleBar_i32_Tag;
+
+typedef struct {
+  int32_t x;
+  StylePoint_i32 y;
+  StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_i32;
+
+typedef struct {
+  StyleBar_i32_Tag tag;
+  union {
+    StyleBar1_Body_i32 bar1;
+    struct {
+      int32_t bar2;
+    };
+    struct {
+      StylePoint_i32 bar3;
+    };
+  };
+} StyleBar_i32;
+
+typedef struct {
+  uint32_t x;
+  uint32_t y;
+} StylePoint_u32;
+
+typedef enum {
+  Bar1_u32,
+  Bar2_u32,
+  Bar3_u32,
+  Bar4_u32,
+} StyleBar_u32_Tag;
+
+typedef struct {
+  int32_t x;
+  StylePoint_u32 y;
+  StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+} StyleBar1_Body_u32;
+
+typedef struct {
+  StyleBar_u32_Tag tag;
+  union {
+    StyleBar1_Body_u32 bar1;
+    struct {
+      uint32_t bar2;
+    };
+    struct {
+      StylePoint_u32 bar3;
+    };
+  };
+} StyleBar_u32;
+
+enum StyleBaz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Baz1,
+  Baz2,
+  Baz3,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleBaz_Tag;
+#endif // __cplusplus
+
+typedef union {
+  StyleBaz_Tag tag;
+  struct {
+    StyleBaz_Tag baz1_tag;
+    StyleBar_u32 baz1;
+  };
+  struct {
+    StyleBaz_Tag baz2_tag;
+    StylePoint_i32 baz2;
+  };
+} StyleBaz;
+
+enum StyleTaz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Taz1,
+  Taz2,
+  Taz3,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleTaz_Tag;
+#endif // __cplusplus
+
+typedef struct {
+  StyleTaz_Tag tag;
+  union {
+    struct {
+      StyleBar_u32 taz1;
+    };
+    struct {
+      StyleBaz taz2;
+    };
+  };
+} StyleTaz;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(const StyleFoo_i32 *foo,
+         const StyleBar_i32 *bar,
+         const StyleBaz *baz,
+         const StyleTaz *taz);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.cpp b/cbindgen-0.24.5/tests/expectations/transform_op.cpp
new file mode 100644
index 0000000..f7726b6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.cpp
@@ -0,0 +1,393 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+#include <cassert>
+
+template<typename T>
+struct StylePoint {
+  T x;
+  T y;
+};
+
+template<typename T>
+union StyleFoo {
+  enum class Tag : uint8_t {
+    Foo,
+    Bar,
+    Baz,
+    Bazz,
+  };
+
+  struct Foo_Body {
+    Tag tag;
+    int32_t x;
+    StylePoint<T> y;
+    StylePoint<float> z;
+  };
+
+  struct Bar_Body {
+    Tag tag;
+    T _0;
+  };
+
+  struct Baz_Body {
+    Tag tag;
+    StylePoint<T> _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Foo_Body foo;
+  Bar_Body bar;
+  Baz_Body baz;
+
+  static StyleFoo Foo(const int32_t &x,
+                      const StylePoint<T> &y,
+                      const StylePoint<float> &z) {
+    StyleFoo result;
+    ::new (&result.foo.x) (int32_t)(x);
+    ::new (&result.foo.y) (StylePoint<T>)(y);
+    ::new (&result.foo.z) (StylePoint<float>)(z);
+    result.tag = Tag::Foo;
+    return result;
+  }
+
+  bool IsFoo() const {
+    return tag == Tag::Foo;
+  }
+
+  const Foo_Body& AsFoo() const {
+    assert(IsFoo());
+    return foo;
+  }
+
+  Foo_Body& AsFoo() {
+    assert(IsFoo());
+    return foo;
+  }
+
+  static StyleFoo Bar(const T &_0) {
+    StyleFoo result;
+    ::new (&result.bar._0) (T)(_0);
+    result.tag = Tag::Bar;
+    return result;
+  }
+
+  bool IsBar() const {
+    return tag == Tag::Bar;
+  }
+
+  const T& AsBar() const {
+    assert(IsBar());
+    return bar._0;
+  }
+
+  T& AsBar() {
+    assert(IsBar());
+    return bar._0;
+  }
+
+  static StyleFoo Baz(const StylePoint<T> &_0) {
+    StyleFoo result;
+    ::new (&result.baz._0) (StylePoint<T>)(_0);
+    result.tag = Tag::Baz;
+    return result;
+  }
+
+  bool IsBaz() const {
+    return tag == Tag::Baz;
+  }
+
+  const StylePoint<T>& AsBaz() const {
+    assert(IsBaz());
+    return baz._0;
+  }
+
+  StylePoint<T>& AsBaz() {
+    assert(IsBaz());
+    return baz._0;
+  }
+
+  static StyleFoo Bazz() {
+    StyleFoo result;
+    result.tag = Tag::Bazz;
+    return result;
+  }
+
+  bool IsBazz() const {
+    return tag == Tag::Bazz;
+  }
+};
+
+template<typename T>
+struct StyleBar {
+  enum class Tag {
+    Bar1,
+    Bar2,
+    Bar3,
+    Bar4,
+  };
+
+  struct StyleBar1_Body {
+    int32_t x;
+    StylePoint<T> y;
+    StylePoint<float> z;
+    int32_t (*u)(int32_t);
+  };
+
+  struct StyleBar2_Body {
+    T _0;
+  };
+
+  struct StyleBar3_Body {
+    StylePoint<T> _0;
+  };
+
+  Tag tag;
+  union {
+    StyleBar1_Body bar1;
+    StyleBar2_Body bar2;
+    StyleBar3_Body bar3;
+  };
+
+  static StyleBar Bar1(const int32_t &x,
+                       const StylePoint<T> &y,
+                       const StylePoint<float> &z,
+                       int32_t (*&u)(int32_t)) {
+    StyleBar result;
+    ::new (&result.bar1.x) (int32_t)(x);
+    ::new (&result.bar1.y) (StylePoint<T>)(y);
+    ::new (&result.bar1.z) (StylePoint<float>)(z);
+    ::new (&result.bar1.u) (int32_t(*)(int32_t))(u);
+    result.tag = Tag::Bar1;
+    return result;
+  }
+
+  bool IsBar1() const {
+    return tag == Tag::Bar1;
+  }
+
+  const StyleBar1_Body& AsBar1() const {
+    assert(IsBar1());
+    return bar1;
+  }
+
+  StyleBar1_Body& AsBar1() {
+    assert(IsBar1());
+    return bar1;
+  }
+
+  static StyleBar Bar2(const T &_0) {
+    StyleBar result;
+    ::new (&result.bar2._0) (T)(_0);
+    result.tag = Tag::Bar2;
+    return result;
+  }
+
+  bool IsBar2() const {
+    return tag == Tag::Bar2;
+  }
+
+  const T& AsBar2() const {
+    assert(IsBar2());
+    return bar2._0;
+  }
+
+  T& AsBar2() {
+    assert(IsBar2());
+    return bar2._0;
+  }
+
+  static StyleBar Bar3(const StylePoint<T> &_0) {
+    StyleBar result;
+    ::new (&result.bar3._0) (StylePoint<T>)(_0);
+    result.tag = Tag::Bar3;
+    return result;
+  }
+
+  bool IsBar3() const {
+    return tag == Tag::Bar3;
+  }
+
+  const StylePoint<T>& AsBar3() const {
+    assert(IsBar3());
+    return bar3._0;
+  }
+
+  StylePoint<T>& AsBar3() {
+    assert(IsBar3());
+    return bar3._0;
+  }
+
+  static StyleBar Bar4() {
+    StyleBar result;
+    result.tag = Tag::Bar4;
+    return result;
+  }
+
+  bool IsBar4() const {
+    return tag == Tag::Bar4;
+  }
+};
+
+union StyleBaz {
+  enum class Tag : uint8_t {
+    Baz1,
+    Baz2,
+    Baz3,
+  };
+
+  struct Baz1_Body {
+    Tag tag;
+    StyleBar<uint32_t> _0;
+  };
+
+  struct Baz2_Body {
+    Tag tag;
+    StylePoint<int32_t> _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Baz1_Body baz1;
+  Baz2_Body baz2;
+
+  static StyleBaz Baz1(const StyleBar<uint32_t> &_0) {
+    StyleBaz result;
+    ::new (&result.baz1._0) (StyleBar<uint32_t>)(_0);
+    result.tag = Tag::Baz1;
+    return result;
+  }
+
+  bool IsBaz1() const {
+    return tag == Tag::Baz1;
+  }
+
+  const StyleBar<uint32_t>& AsBaz1() const {
+    assert(IsBaz1());
+    return baz1._0;
+  }
+
+  StyleBar<uint32_t>& AsBaz1() {
+    assert(IsBaz1());
+    return baz1._0;
+  }
+
+  static StyleBaz Baz2(const StylePoint<int32_t> &_0) {
+    StyleBaz result;
+    ::new (&result.baz2._0) (StylePoint<int32_t>)(_0);
+    result.tag = Tag::Baz2;
+    return result;
+  }
+
+  bool IsBaz2() const {
+    return tag == Tag::Baz2;
+  }
+
+  const StylePoint<int32_t>& AsBaz2() const {
+    assert(IsBaz2());
+    return baz2._0;
+  }
+
+  StylePoint<int32_t>& AsBaz2() {
+    assert(IsBaz2());
+    return baz2._0;
+  }
+
+  static StyleBaz Baz3() {
+    StyleBaz result;
+    result.tag = Tag::Baz3;
+    return result;
+  }
+
+  bool IsBaz3() const {
+    return tag == Tag::Baz3;
+  }
+};
+
+struct StyleTaz {
+  enum class Tag : uint8_t {
+    Taz1,
+    Taz2,
+    Taz3,
+  };
+
+  struct StyleTaz1_Body {
+    StyleBar<uint32_t> _0;
+  };
+
+  struct StyleTaz2_Body {
+    StyleBaz _0;
+  };
+
+  Tag tag;
+  union {
+    StyleTaz1_Body taz1;
+    StyleTaz2_Body taz2;
+  };
+
+  static StyleTaz Taz1(const StyleBar<uint32_t> &_0) {
+    StyleTaz result;
+    ::new (&result.taz1._0) (StyleBar<uint32_t>)(_0);
+    result.tag = Tag::Taz1;
+    return result;
+  }
+
+  bool IsTaz1() const {
+    return tag == Tag::Taz1;
+  }
+
+  const StyleBar<uint32_t>& AsTaz1() const {
+    assert(IsTaz1());
+    return taz1._0;
+  }
+
+  StyleBar<uint32_t>& AsTaz1() {
+    assert(IsTaz1());
+    return taz1._0;
+  }
+
+  static StyleTaz Taz2(const StyleBaz &_0) {
+    StyleTaz result;
+    ::new (&result.taz2._0) (StyleBaz)(_0);
+    result.tag = Tag::Taz2;
+    return result;
+  }
+
+  bool IsTaz2() const {
+    return tag == Tag::Taz2;
+  }
+
+  const StyleBaz& AsTaz2() const {
+    assert(IsTaz2());
+    return taz2._0;
+  }
+
+  StyleBaz& AsTaz2() {
+    assert(IsTaz2());
+    return taz2._0;
+  }
+
+  static StyleTaz Taz3() {
+    StyleTaz result;
+    result.tag = Tag::Taz3;
+    return result;
+  }
+
+  bool IsTaz3() const {
+    return tag == Tag::Taz3;
+  }
+};
+
+extern "C" {
+
+void foo(const StyleFoo<int32_t> *foo,
+         const StyleBar<int32_t> *bar,
+         const StyleBaz *baz,
+         const StyleTaz *taz);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.pyx b/cbindgen-0.24.5/tests/expectations/transform_op.pyx
new file mode 100644
index 0000000..c35fb42
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.pyx
@@ -0,0 +1,101 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct StylePoint_i32:
+    int32_t x;
+    int32_t y;
+
+  ctypedef struct StylePoint_f32:
+    float x;
+    float y;
+
+  cdef enum:
+    Foo_i32,
+    Bar_i32,
+    Baz_i32,
+    Bazz_i32,
+  ctypedef uint8_t StyleFoo_i32_Tag;
+
+  ctypedef struct StyleFoo_Body_i32:
+    StyleFoo_i32_Tag tag;
+    int32_t x;
+    StylePoint_i32 y;
+    StylePoint_f32 z;
+
+  ctypedef union StyleFoo_i32:
+    StyleFoo_i32_Tag tag;
+    StyleFoo_Body_i32 foo;
+    int32_t bar;
+    StylePoint_i32 baz;
+
+  ctypedef enum StyleBar_i32_Tag:
+    Bar1_i32,
+    Bar2_i32,
+    Bar3_i32,
+    Bar4_i32,
+
+  ctypedef struct StyleBar1_Body_i32:
+    int32_t x;
+    StylePoint_i32 y;
+    StylePoint_f32 z;
+    int32_t (*u)(int32_t);
+
+  ctypedef struct StyleBar_i32:
+    StyleBar_i32_Tag tag;
+    StyleBar1_Body_i32 bar1;
+    int32_t bar2;
+    StylePoint_i32 bar3;
+
+  ctypedef struct StylePoint_u32:
+    uint32_t x;
+    uint32_t y;
+
+  ctypedef enum StyleBar_u32_Tag:
+    Bar1_u32,
+    Bar2_u32,
+    Bar3_u32,
+    Bar4_u32,
+
+  ctypedef struct StyleBar1_Body_u32:
+    int32_t x;
+    StylePoint_u32 y;
+    StylePoint_f32 z;
+    int32_t (*u)(int32_t);
+
+  ctypedef struct StyleBar_u32:
+    StyleBar_u32_Tag tag;
+    StyleBar1_Body_u32 bar1;
+    uint32_t bar2;
+    StylePoint_u32 bar3;
+
+  cdef enum:
+    Baz1,
+    Baz2,
+    Baz3,
+  ctypedef uint8_t StyleBaz_Tag;
+
+  ctypedef union StyleBaz:
+    StyleBaz_Tag tag;
+    StyleBar_u32 baz1;
+    StylePoint_i32 baz2;
+
+  cdef enum:
+    Taz1,
+    Taz2,
+    Taz3,
+  ctypedef uint8_t StyleTaz_Tag;
+
+  ctypedef struct StyleTaz:
+    StyleTaz_Tag tag;
+    StyleBar_u32 taz1;
+    StyleBaz taz2;
+
+  void foo(const StyleFoo_i32 *foo,
+           const StyleBar_i32 *bar,
+           const StyleBaz *baz,
+           const StyleTaz *taz);
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.tag.c b/cbindgen-0.24.5/tests/expectations/transform_op.tag.c
new file mode 100644
index 0000000..a97d4ae
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.tag.c
@@ -0,0 +1,144 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct StylePoint_i32 {
+  int32_t x;
+  int32_t y;
+};
+
+struct StylePoint_f32 {
+  float x;
+  float y;
+};
+
+enum StyleFoo_i32_Tag {
+  Foo_i32,
+  Bar_i32,
+  Baz_i32,
+  Bazz_i32,
+};
+typedef uint8_t StyleFoo_i32_Tag;
+
+struct StyleFoo_Body_i32 {
+  StyleFoo_i32_Tag tag;
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+};
+
+union StyleFoo_i32 {
+  StyleFoo_i32_Tag tag;
+  struct StyleFoo_Body_i32 foo;
+  struct {
+    StyleFoo_i32_Tag bar_tag;
+    int32_t bar;
+  };
+  struct {
+    StyleFoo_i32_Tag baz_tag;
+    struct StylePoint_i32 baz;
+  };
+};
+
+enum StyleBar_i32_Tag {
+  Bar1_i32,
+  Bar2_i32,
+  Bar3_i32,
+  Bar4_i32,
+};
+
+struct StyleBar1_Body_i32 {
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+};
+
+struct StyleBar_i32 {
+  enum StyleBar_i32_Tag tag;
+  union {
+    struct StyleBar1_Body_i32 bar1;
+    struct {
+      int32_t bar2;
+    };
+    struct {
+      struct StylePoint_i32 bar3;
+    };
+  };
+};
+
+struct StylePoint_u32 {
+  uint32_t x;
+  uint32_t y;
+};
+
+enum StyleBar_u32_Tag {
+  Bar1_u32,
+  Bar2_u32,
+  Bar3_u32,
+  Bar4_u32,
+};
+
+struct StyleBar1_Body_u32 {
+  int32_t x;
+  struct StylePoint_u32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+};
+
+struct StyleBar_u32 {
+  enum StyleBar_u32_Tag tag;
+  union {
+    struct StyleBar1_Body_u32 bar1;
+    struct {
+      uint32_t bar2;
+    };
+    struct {
+      struct StylePoint_u32 bar3;
+    };
+  };
+};
+
+enum StyleBaz_Tag {
+  Baz1,
+  Baz2,
+  Baz3,
+};
+typedef uint8_t StyleBaz_Tag;
+
+union StyleBaz {
+  StyleBaz_Tag tag;
+  struct {
+    StyleBaz_Tag baz1_tag;
+    struct StyleBar_u32 baz1;
+  };
+  struct {
+    StyleBaz_Tag baz2_tag;
+    struct StylePoint_i32 baz2;
+  };
+};
+
+enum StyleTaz_Tag {
+  Taz1,
+  Taz2,
+  Taz3,
+};
+typedef uint8_t StyleTaz_Tag;
+
+struct StyleTaz {
+  StyleTaz_Tag tag;
+  union {
+    struct {
+      struct StyleBar_u32 taz1;
+    };
+    struct {
+      union StyleBaz taz2;
+    };
+  };
+};
+
+void foo(const union StyleFoo_i32 *foo,
+         const struct StyleBar_i32 *bar,
+         const union StyleBaz *baz,
+         const struct StyleTaz *taz);
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.tag.compat.c b/cbindgen-0.24.5/tests/expectations/transform_op.tag.compat.c
new file mode 100644
index 0000000..0c7c184
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.tag.compat.c
@@ -0,0 +1,170 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct StylePoint_i32 {
+  int32_t x;
+  int32_t y;
+};
+
+struct StylePoint_f32 {
+  float x;
+  float y;
+};
+
+enum StyleFoo_i32_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Foo_i32,
+  Bar_i32,
+  Baz_i32,
+  Bazz_i32,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleFoo_i32_Tag;
+#endif // __cplusplus
+
+struct StyleFoo_Body_i32 {
+  StyleFoo_i32_Tag tag;
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+};
+
+union StyleFoo_i32 {
+  StyleFoo_i32_Tag tag;
+  struct StyleFoo_Body_i32 foo;
+  struct {
+    StyleFoo_i32_Tag bar_tag;
+    int32_t bar;
+  };
+  struct {
+    StyleFoo_i32_Tag baz_tag;
+    struct StylePoint_i32 baz;
+  };
+};
+
+enum StyleBar_i32_Tag {
+  Bar1_i32,
+  Bar2_i32,
+  Bar3_i32,
+  Bar4_i32,
+};
+
+struct StyleBar1_Body_i32 {
+  int32_t x;
+  struct StylePoint_i32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+};
+
+struct StyleBar_i32 {
+  enum StyleBar_i32_Tag tag;
+  union {
+    struct StyleBar1_Body_i32 bar1;
+    struct {
+      int32_t bar2;
+    };
+    struct {
+      struct StylePoint_i32 bar3;
+    };
+  };
+};
+
+struct StylePoint_u32 {
+  uint32_t x;
+  uint32_t y;
+};
+
+enum StyleBar_u32_Tag {
+  Bar1_u32,
+  Bar2_u32,
+  Bar3_u32,
+  Bar4_u32,
+};
+
+struct StyleBar1_Body_u32 {
+  int32_t x;
+  struct StylePoint_u32 y;
+  struct StylePoint_f32 z;
+  int32_t (*u)(int32_t);
+};
+
+struct StyleBar_u32 {
+  enum StyleBar_u32_Tag tag;
+  union {
+    struct StyleBar1_Body_u32 bar1;
+    struct {
+      uint32_t bar2;
+    };
+    struct {
+      struct StylePoint_u32 bar3;
+    };
+  };
+};
+
+enum StyleBaz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Baz1,
+  Baz2,
+  Baz3,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleBaz_Tag;
+#endif // __cplusplus
+
+union StyleBaz {
+  StyleBaz_Tag tag;
+  struct {
+    StyleBaz_Tag baz1_tag;
+    struct StyleBar_u32 baz1;
+  };
+  struct {
+    StyleBaz_Tag baz2_tag;
+    struct StylePoint_i32 baz2;
+  };
+};
+
+enum StyleTaz_Tag
+#ifdef __cplusplus
+  : uint8_t
+#endif // __cplusplus
+ {
+  Taz1,
+  Taz2,
+  Taz3,
+};
+#ifndef __cplusplus
+typedef uint8_t StyleTaz_Tag;
+#endif // __cplusplus
+
+struct StyleTaz {
+  StyleTaz_Tag tag;
+  union {
+    struct {
+      struct StyleBar_u32 taz1;
+    };
+    struct {
+      union StyleBaz taz2;
+    };
+  };
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void foo(const union StyleFoo_i32 *foo,
+         const struct StyleBar_i32 *bar,
+         const union StyleBaz *baz,
+         const struct StyleTaz *taz);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/transform_op.tag.pyx b/cbindgen-0.24.5/tests/expectations/transform_op.tag.pyx
new file mode 100644
index 0000000..5831bdb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transform_op.tag.pyx
@@ -0,0 +1,101 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct StylePoint_i32:
+    int32_t x;
+    int32_t y;
+
+  cdef struct StylePoint_f32:
+    float x;
+    float y;
+
+  cdef enum:
+    Foo_i32,
+    Bar_i32,
+    Baz_i32,
+    Bazz_i32,
+  ctypedef uint8_t StyleFoo_i32_Tag;
+
+  cdef struct StyleFoo_Body_i32:
+    StyleFoo_i32_Tag tag;
+    int32_t x;
+    StylePoint_i32 y;
+    StylePoint_f32 z;
+
+  cdef union StyleFoo_i32:
+    StyleFoo_i32_Tag tag;
+    StyleFoo_Body_i32 foo;
+    int32_t bar;
+    StylePoint_i32 baz;
+
+  cdef enum StyleBar_i32_Tag:
+    Bar1_i32,
+    Bar2_i32,
+    Bar3_i32,
+    Bar4_i32,
+
+  cdef struct StyleBar1_Body_i32:
+    int32_t x;
+    StylePoint_i32 y;
+    StylePoint_f32 z;
+    int32_t (*u)(int32_t);
+
+  cdef struct StyleBar_i32:
+    StyleBar_i32_Tag tag;
+    StyleBar1_Body_i32 bar1;
+    int32_t bar2;
+    StylePoint_i32 bar3;
+
+  cdef struct StylePoint_u32:
+    uint32_t x;
+    uint32_t y;
+
+  cdef enum StyleBar_u32_Tag:
+    Bar1_u32,
+    Bar2_u32,
+    Bar3_u32,
+    Bar4_u32,
+
+  cdef struct StyleBar1_Body_u32:
+    int32_t x;
+    StylePoint_u32 y;
+    StylePoint_f32 z;
+    int32_t (*u)(int32_t);
+
+  cdef struct StyleBar_u32:
+    StyleBar_u32_Tag tag;
+    StyleBar1_Body_u32 bar1;
+    uint32_t bar2;
+    StylePoint_u32 bar3;
+
+  cdef enum:
+    Baz1,
+    Baz2,
+    Baz3,
+  ctypedef uint8_t StyleBaz_Tag;
+
+  cdef union StyleBaz:
+    StyleBaz_Tag tag;
+    StyleBar_u32 baz1;
+    StylePoint_i32 baz2;
+
+  cdef enum:
+    Taz1,
+    Taz2,
+    Taz3,
+  ctypedef uint8_t StyleTaz_Tag;
+
+  cdef struct StyleTaz:
+    StyleTaz_Tag tag;
+    StyleBar_u32 taz1;
+    StyleBaz taz2;
+
+  void foo(const StyleFoo_i32 *foo,
+           const StyleBar_i32 *bar,
+           const StyleBaz *baz,
+           const StyleTaz *taz);
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.both.c b/cbindgen-0.24.5/tests/expectations/transparent.both.c
new file mode 100644
index 0000000..6b3c576
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.both.c
@@ -0,0 +1,35 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct DummyStruct DummyStruct;
+
+typedef struct EnumWithAssociatedConstantInImpl EnumWithAssociatedConstantInImpl;
+
+typedef struct DummyStruct TransparentComplexWrappingStructTuple;
+
+typedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+typedef struct DummyStruct TransparentComplexWrappingStructure;
+
+typedef uint32_t TransparentPrimitiveWrappingStructure;
+
+typedef struct DummyStruct TransparentComplexWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+#define TransparentPrimitiveWithAssociatedConstants_ZERO 0
+#define TransparentPrimitiveWithAssociatedConstants_ONE 1
+
+#define EnumWithAssociatedConstantInImpl_TEN 10
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper_i32 e,
+          TransparentPrimitiveWrapper_i32 f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          struct EnumWithAssociatedConstantInImpl h);
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.both.compat.c b/cbindgen-0.24.5/tests/expectations/transparent.both.compat.c
new file mode 100644
index 0000000..2b760c7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.both.compat.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct DummyStruct DummyStruct;
+
+typedef struct EnumWithAssociatedConstantInImpl EnumWithAssociatedConstantInImpl;
+
+typedef struct DummyStruct TransparentComplexWrappingStructTuple;
+
+typedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+typedef struct DummyStruct TransparentComplexWrappingStructure;
+
+typedef uint32_t TransparentPrimitiveWrappingStructure;
+
+typedef struct DummyStruct TransparentComplexWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+#define TransparentPrimitiveWithAssociatedConstants_ZERO 0
+#define TransparentPrimitiveWithAssociatedConstants_ONE 1
+
+#define EnumWithAssociatedConstantInImpl_TEN 10
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper_i32 e,
+          TransparentPrimitiveWrapper_i32 f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          struct EnumWithAssociatedConstantInImpl h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.c b/cbindgen-0.24.5/tests/expectations/transparent.c
new file mode 100644
index 0000000..4743b50
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.c
@@ -0,0 +1,35 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct DummyStruct DummyStruct;
+
+typedef struct EnumWithAssociatedConstantInImpl EnumWithAssociatedConstantInImpl;
+
+typedef DummyStruct TransparentComplexWrappingStructTuple;
+
+typedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+typedef DummyStruct TransparentComplexWrappingStructure;
+
+typedef uint32_t TransparentPrimitiveWrappingStructure;
+
+typedef DummyStruct TransparentComplexWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+#define TransparentPrimitiveWithAssociatedConstants_ZERO 0
+#define TransparentPrimitiveWithAssociatedConstants_ONE 1
+
+#define EnumWithAssociatedConstantInImpl_TEN 10
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper_i32 e,
+          TransparentPrimitiveWrapper_i32 f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          EnumWithAssociatedConstantInImpl h);
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.compat.c b/cbindgen-0.24.5/tests/expectations/transparent.compat.c
new file mode 100644
index 0000000..09b27fe
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.compat.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct DummyStruct DummyStruct;
+
+typedef struct EnumWithAssociatedConstantInImpl EnumWithAssociatedConstantInImpl;
+
+typedef DummyStruct TransparentComplexWrappingStructTuple;
+
+typedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+typedef DummyStruct TransparentComplexWrappingStructure;
+
+typedef uint32_t TransparentPrimitiveWrappingStructure;
+
+typedef DummyStruct TransparentComplexWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+#define TransparentPrimitiveWithAssociatedConstants_ZERO 0
+#define TransparentPrimitiveWithAssociatedConstants_ONE 1
+
+#define EnumWithAssociatedConstantInImpl_TEN 10
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper_i32 e,
+          TransparentPrimitiveWrapper_i32 f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          EnumWithAssociatedConstantInImpl h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.cpp b/cbindgen-0.24.5/tests/expectations/transparent.cpp
new file mode 100644
index 0000000..4c06739
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.cpp
@@ -0,0 +1,42 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct DummyStruct;
+
+struct EnumWithAssociatedConstantInImpl;
+
+using TransparentComplexWrappingStructTuple = DummyStruct;
+
+using TransparentPrimitiveWrappingStructTuple = uint32_t;
+
+using TransparentComplexWrappingStructure = DummyStruct;
+
+using TransparentPrimitiveWrappingStructure = uint32_t;
+
+template<typename T>
+using TransparentComplexWrapper = DummyStruct;
+
+template<typename T>
+using TransparentPrimitiveWrapper = uint32_t;
+
+using TransparentPrimitiveWithAssociatedConstants = uint32_t;
+constexpr static const TransparentPrimitiveWithAssociatedConstants TransparentPrimitiveWithAssociatedConstants_ZERO = 0;
+constexpr static const TransparentPrimitiveWithAssociatedConstants TransparentPrimitiveWithAssociatedConstants_ONE = 1;
+
+constexpr static const TransparentPrimitiveWrappingStructure EnumWithAssociatedConstantInImpl_TEN = 10;
+
+extern "C" {
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper<int32_t> e,
+          TransparentPrimitiveWrapper<int32_t> f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          EnumWithAssociatedConstantInImpl h);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.pyx b/cbindgen-0.24.5/tests/expectations/transparent.pyx
new file mode 100644
index 0000000..ac28206
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.pyx
@@ -0,0 +1,40 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct DummyStruct:
+    pass
+
+  ctypedef struct EnumWithAssociatedConstantInImpl:
+    pass
+
+  ctypedef DummyStruct TransparentComplexWrappingStructTuple;
+
+  ctypedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+  ctypedef DummyStruct TransparentComplexWrappingStructure;
+
+  ctypedef uint32_t TransparentPrimitiveWrappingStructure;
+
+  ctypedef DummyStruct TransparentComplexWrapper_i32;
+
+  ctypedef uint32_t TransparentPrimitiveWrapper_i32;
+
+  ctypedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+  const TransparentPrimitiveWithAssociatedConstants TransparentPrimitiveWithAssociatedConstants_ZERO # = 0
+  const TransparentPrimitiveWithAssociatedConstants TransparentPrimitiveWithAssociatedConstants_ONE # = 1
+
+  const TransparentPrimitiveWrappingStructure EnumWithAssociatedConstantInImpl_TEN # = 10
+
+  void root(TransparentComplexWrappingStructTuple a,
+            TransparentPrimitiveWrappingStructTuple b,
+            TransparentComplexWrappingStructure c,
+            TransparentPrimitiveWrappingStructure d,
+            TransparentComplexWrapper_i32 e,
+            TransparentPrimitiveWrapper_i32 f,
+            TransparentPrimitiveWithAssociatedConstants g,
+            EnumWithAssociatedConstantInImpl h);
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.tag.c b/cbindgen-0.24.5/tests/expectations/transparent.tag.c
new file mode 100644
index 0000000..c76d2a3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.tag.c
@@ -0,0 +1,35 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct DummyStruct;
+
+struct EnumWithAssociatedConstantInImpl;
+
+typedef struct DummyStruct TransparentComplexWrappingStructTuple;
+
+typedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+typedef struct DummyStruct TransparentComplexWrappingStructure;
+
+typedef uint32_t TransparentPrimitiveWrappingStructure;
+
+typedef struct DummyStruct TransparentComplexWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+#define TransparentPrimitiveWithAssociatedConstants_ZERO 0
+#define TransparentPrimitiveWithAssociatedConstants_ONE 1
+
+#define EnumWithAssociatedConstantInImpl_TEN 10
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper_i32 e,
+          TransparentPrimitiveWrapper_i32 f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          struct EnumWithAssociatedConstantInImpl h);
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.tag.compat.c b/cbindgen-0.24.5/tests/expectations/transparent.tag.compat.c
new file mode 100644
index 0000000..26c01e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.tag.compat.c
@@ -0,0 +1,43 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct DummyStruct;
+
+struct EnumWithAssociatedConstantInImpl;
+
+typedef struct DummyStruct TransparentComplexWrappingStructTuple;
+
+typedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+typedef struct DummyStruct TransparentComplexWrappingStructure;
+
+typedef uint32_t TransparentPrimitiveWrappingStructure;
+
+typedef struct DummyStruct TransparentComplexWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWrapper_i32;
+
+typedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+#define TransparentPrimitiveWithAssociatedConstants_ZERO 0
+#define TransparentPrimitiveWithAssociatedConstants_ONE 1
+
+#define EnumWithAssociatedConstantInImpl_TEN 10
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(TransparentComplexWrappingStructTuple a,
+          TransparentPrimitiveWrappingStructTuple b,
+          TransparentComplexWrappingStructure c,
+          TransparentPrimitiveWrappingStructure d,
+          TransparentComplexWrapper_i32 e,
+          TransparentPrimitiveWrapper_i32 f,
+          TransparentPrimitiveWithAssociatedConstants g,
+          struct EnumWithAssociatedConstantInImpl h);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/transparent.tag.pyx b/cbindgen-0.24.5/tests/expectations/transparent.tag.pyx
new file mode 100644
index 0000000..db0f5d9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/transparent.tag.pyx
@@ -0,0 +1,40 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct DummyStruct:
+    pass
+
+  cdef struct EnumWithAssociatedConstantInImpl:
+    pass
+
+  ctypedef DummyStruct TransparentComplexWrappingStructTuple;
+
+  ctypedef uint32_t TransparentPrimitiveWrappingStructTuple;
+
+  ctypedef DummyStruct TransparentComplexWrappingStructure;
+
+  ctypedef uint32_t TransparentPrimitiveWrappingStructure;
+
+  ctypedef DummyStruct TransparentComplexWrapper_i32;
+
+  ctypedef uint32_t TransparentPrimitiveWrapper_i32;
+
+  ctypedef uint32_t TransparentPrimitiveWithAssociatedConstants;
+  const TransparentPrimitiveWithAssociatedConstants TransparentPrimitiveWithAssociatedConstants_ZERO # = 0
+  const TransparentPrimitiveWithAssociatedConstants TransparentPrimitiveWithAssociatedConstants_ONE # = 1
+
+  const TransparentPrimitiveWrappingStructure EnumWithAssociatedConstantInImpl_TEN # = 10
+
+  void root(TransparentComplexWrappingStructTuple a,
+            TransparentPrimitiveWrappingStructTuple b,
+            TransparentComplexWrappingStructure c,
+            TransparentPrimitiveWrappingStructure d,
+            TransparentComplexWrapper_i32 e,
+            TransparentPrimitiveWrapper_i32 f,
+            TransparentPrimitiveWithAssociatedConstants g,
+            EnumWithAssociatedConstantInImpl h);
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.both.c b/cbindgen-0.24.5/tests/expectations/typedef.both.c
new file mode 100644
index 0000000..efdebc8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.both.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_i32__i32 {
+  int32_t x;
+  int32_t y;
+} Foo_i32__i32;
+
+typedef struct Foo_i32__i32 IntFoo_i32;
+
+void root(IntFoo_i32 a);
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.both.compat.c b/cbindgen-0.24.5/tests/expectations/typedef.both.compat.c
new file mode 100644
index 0000000..ebb0d56
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.both.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_i32__i32 {
+  int32_t x;
+  int32_t y;
+} Foo_i32__i32;
+
+typedef struct Foo_i32__i32 IntFoo_i32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(IntFoo_i32 a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.c b/cbindgen-0.24.5/tests/expectations/typedef.c
new file mode 100644
index 0000000..75fc1a3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  int32_t y;
+} Foo_i32__i32;
+
+typedef Foo_i32__i32 IntFoo_i32;
+
+void root(IntFoo_i32 a);
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.compat.c b/cbindgen-0.24.5/tests/expectations/typedef.compat.c
new file mode 100644
index 0000000..d3e53dd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  int32_t x;
+  int32_t y;
+} Foo_i32__i32;
+
+typedef Foo_i32__i32 IntFoo_i32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(IntFoo_i32 a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.cpp b/cbindgen-0.24.5/tests/expectations/typedef.cpp
new file mode 100644
index 0000000..d04eda2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.cpp
@@ -0,0 +1,20 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T, typename U>
+struct Foo {
+  T x;
+  U y;
+};
+
+template<typename T>
+using IntFoo = Foo<int32_t, T>;
+
+extern "C" {
+
+void root(IntFoo<int32_t> a);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.pyx b/cbindgen-0.24.5/tests/expectations/typedef.pyx
new file mode 100644
index 0000000..ba0cc6e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo_i32__i32:
+    int32_t x;
+    int32_t y;
+
+  ctypedef Foo_i32__i32 IntFoo_i32;
+
+  void root(IntFoo_i32 a);
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.tag.c b/cbindgen-0.24.5/tests/expectations/typedef.tag.c
new file mode 100644
index 0000000..1f5c1f2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.tag.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_i32__i32 {
+  int32_t x;
+  int32_t y;
+};
+
+typedef struct Foo_i32__i32 IntFoo_i32;
+
+void root(IntFoo_i32 a);
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.tag.compat.c b/cbindgen-0.24.5/tests/expectations/typedef.tag.compat.c
new file mode 100644
index 0000000..309b4f9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.tag.compat.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_i32__i32 {
+  int32_t x;
+  int32_t y;
+};
+
+typedef struct Foo_i32__i32 IntFoo_i32;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(IntFoo_i32 a);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/typedef.tag.pyx b/cbindgen-0.24.5/tests/expectations/typedef.tag.pyx
new file mode 100644
index 0000000..76ef246
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/typedef.tag.pyx
@@ -0,0 +1,15 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo_i32__i32:
+    int32_t x;
+    int32_t y;
+
+  ctypedef Foo_i32__i32 IntFoo_i32;
+
+  void root(IntFoo_i32 a);
diff --git a/cbindgen-0.24.5/tests/expectations/union.both.c b/cbindgen-0.24.5/tests/expectations/union.both.c
new file mode 100644
index 0000000..acef11d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.both.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef union Normal {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef union NormalWithZST {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+void root(struct Opaque *a, union Normal b, union NormalWithZST c);
diff --git a/cbindgen-0.24.5/tests/expectations/union.both.compat.c b/cbindgen-0.24.5/tests/expectations/union.both.compat.c
new file mode 100644
index 0000000..9c33a50
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.both.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef union Normal {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef union NormalWithZST {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Opaque *a, union Normal b, union NormalWithZST c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/union.c b/cbindgen-0.24.5/tests/expectations/union.c
new file mode 100644
index 0000000..ac58ff1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef union {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef union {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+void root(Opaque *a, Normal b, NormalWithZST c);
diff --git a/cbindgen-0.24.5/tests/expectations/union.compat.c b/cbindgen-0.24.5/tests/expectations/union.compat.c
new file mode 100644
index 0000000..b81c76c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Opaque Opaque;
+
+typedef union {
+  int32_t x;
+  float y;
+} Normal;
+
+typedef union {
+  int32_t x;
+  float y;
+} NormalWithZST;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Opaque *a, Normal b, NormalWithZST c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/union.cpp b/cbindgen-0.24.5/tests/expectations/union.cpp
new file mode 100644
index 0000000..92d1151
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.cpp
@@ -0,0 +1,23 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct Opaque;
+
+union Normal {
+  int32_t x;
+  float y;
+};
+
+union NormalWithZST {
+  int32_t x;
+  float y;
+};
+
+extern "C" {
+
+void root(Opaque *a, Normal b, NormalWithZST c);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/union.pyx b/cbindgen-0.24.5/tests/expectations/union.pyx
new file mode 100644
index 0000000..9f167b5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.pyx
@@ -0,0 +1,20 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Opaque:
+    pass
+
+  ctypedef union Normal:
+    int32_t x;
+    float y;
+
+  ctypedef union NormalWithZST:
+    int32_t x;
+    float y;
+
+  void root(Opaque *a, Normal b, NormalWithZST c);
diff --git a/cbindgen-0.24.5/tests/expectations/union.tag.c b/cbindgen-0.24.5/tests/expectations/union.tag.c
new file mode 100644
index 0000000..421fa00
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.tag.c
@@ -0,0 +1,18 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+union Normal {
+  int32_t x;
+  float y;
+};
+
+union NormalWithZST {
+  int32_t x;
+  float y;
+};
+
+void root(struct Opaque *a, union Normal b, union NormalWithZST c);
diff --git a/cbindgen-0.24.5/tests/expectations/union.tag.compat.c b/cbindgen-0.24.5/tests/expectations/union.tag.compat.c
new file mode 100644
index 0000000..5e68956
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.tag.compat.c
@@ -0,0 +1,26 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Opaque;
+
+union Normal {
+  int32_t x;
+  float y;
+};
+
+union NormalWithZST {
+  int32_t x;
+  float y;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(struct Opaque *a, union Normal b, union NormalWithZST c);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/union.tag.pyx b/cbindgen-0.24.5/tests/expectations/union.tag.pyx
new file mode 100644
index 0000000..42c5454
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union.tag.pyx
@@ -0,0 +1,20 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Opaque:
+    pass
+
+  cdef union Normal:
+    int32_t x;
+    float y;
+
+  cdef union NormalWithZST:
+    int32_t x;
+    float y;
+
+  void root(Opaque *a, Normal b, NormalWithZST c);
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.both.c b/cbindgen-0.24.5/tests/expectations/union_self.both.c
new file mode 100644
index 0000000..0eef193
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.both.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_Bar {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef union Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+} Bar;
+
+void root(union Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.both.compat.c b/cbindgen-0.24.5/tests/expectations/union_self.both.compat.c
new file mode 100644
index 0000000..be9ed8e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.both.compat.c
@@ -0,0 +1,23 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct Foo_Bar {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef union Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(union Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.c b/cbindgen-0.24.5/tests/expectations/union_self.c
new file mode 100644
index 0000000..083dabd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef union {
+  int32_t something;
+  Foo_Bar subexpressions;
+} Bar;
+
+void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.compat.c b/cbindgen-0.24.5/tests/expectations/union_self.compat.c
new file mode 100644
index 0000000..bfd26bc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.compat.c
@@ -0,0 +1,23 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  const int32_t *something;
+} Foo_Bar;
+
+typedef union {
+  int32_t something;
+  Foo_Bar subexpressions;
+} Bar;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.cpp b/cbindgen-0.24.5/tests/expectations/union_self.cpp
new file mode 100644
index 0000000..8f0e17a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.cpp
@@ -0,0 +1,21 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+template<typename T>
+struct Foo {
+  const int32_t *something;
+};
+
+union Bar {
+  int32_t something;
+  Foo<Bar> subexpressions;
+};
+
+extern "C" {
+
+void root(Bar b);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.pyx b/cbindgen-0.24.5/tests/expectations/union_self.pyx
new file mode 100644
index 0000000..e4711a6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct Foo_Bar:
+    const int32_t *something;
+
+  ctypedef union Bar:
+    int32_t something;
+    Foo_Bar subexpressions;
+
+  void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.tag.c b/cbindgen-0.24.5/tests/expectations/union_self.tag.c
new file mode 100644
index 0000000..209069e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.tag.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_Bar {
+  const int32_t *something;
+};
+
+union Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+};
+
+void root(union Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.tag.compat.c b/cbindgen-0.24.5/tests/expectations/union_self.tag.compat.c
new file mode 100644
index 0000000..a150fa1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.tag.compat.c
@@ -0,0 +1,23 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct Foo_Bar {
+  const int32_t *something;
+};
+
+union Bar {
+  int32_t something;
+  struct Foo_Bar subexpressions;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(union Bar b);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/union_self.tag.pyx b/cbindgen-0.24.5/tests/expectations/union_self.tag.pyx
new file mode 100644
index 0000000..9d4eb75
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/union_self.tag.pyx
@@ -0,0 +1,16 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct Foo_Bar:
+    const int32_t *something;
+
+  cdef union Bar:
+    int32_t something;
+    Foo_Bar subexpressions;
+
+  void root(Bar b);
diff --git a/cbindgen-0.24.5/tests/expectations/using_namespaces.c b/cbindgen-0.24.5/tests/expectations/using_namespaces.c
new file mode 100644
index 0000000..376246e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/using_namespaces.c
@@ -0,0 +1,6 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+void root(void);
diff --git a/cbindgen-0.24.5/tests/expectations/using_namespaces.compat.c b/cbindgen-0.24.5/tests/expectations/using_namespaces.compat.c
new file mode 100644
index 0000000..04bd0f1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/using_namespaces.compat.c
@@ -0,0 +1,22 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+namespace root {
+#endif // __cplusplus
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void root(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#ifdef __cplusplus
+} // namespace root
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/using_namespaces.cpp b/cbindgen-0.24.5/tests/expectations/using_namespaces.cpp
new file mode 100644
index 0000000..3c65c0c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/using_namespaces.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+namespace root {
+
+using namespace std;
+
+extern "C" {
+
+void root();
+
+} // extern "C"
+
+} // namespace root
diff --git a/cbindgen-0.24.5/tests/expectations/using_namespaces.pyx b/cbindgen-0.24.5/tests/expectations/using_namespaces.pyx
new file mode 100644
index 0000000..133a763
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/using_namespaces.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  void root();
diff --git a/cbindgen-0.24.5/tests/expectations/va_list.c b/cbindgen-0.24.5/tests/expectations/va_list.c
new file mode 100644
index 0000000..2332c27
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/va_list.c
@@ -0,0 +1,6 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+int32_t va_list_test(va_list ap);
diff --git a/cbindgen-0.24.5/tests/expectations/va_list.compat.c b/cbindgen-0.24.5/tests/expectations/va_list.compat.c
new file mode 100644
index 0000000..acaae09
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/va_list.compat.c
@@ -0,0 +1,14 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+int32_t va_list_test(va_list ap);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/va_list.cpp b/cbindgen-0.24.5/tests/expectations/va_list.cpp
new file mode 100644
index 0000000..8059074
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/va_list.cpp
@@ -0,0 +1,11 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+extern "C" {
+
+int32_t va_list_test(va_list ap);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/va_list.pyx b/cbindgen-0.24.5/tests/expectations/va_list.pyx
new file mode 100644
index 0000000..a692808
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/va_list.pyx
@@ -0,0 +1,9 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  int32_t va_list_test(va_list ap);
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.both.c b/cbindgen-0.24.5/tests/expectations/workspace.both.c
new file mode 100644
index 0000000..3aa6583
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.both.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXT_CONST 0
+
+typedef struct ExtType {
+  uint32_t data;
+} ExtType;
+
+void consume_ext(struct ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.both.compat.c b/cbindgen-0.24.5/tests/expectations/workspace.both.compat.c
new file mode 100644
index 0000000..d830fb1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.both.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXT_CONST 0
+
+typedef struct ExtType {
+  uint32_t data;
+} ExtType;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void consume_ext(struct ExtType _ext);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.c b/cbindgen-0.24.5/tests/expectations/workspace.c
new file mode 100644
index 0000000..200813d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXT_CONST 0
+
+typedef struct {
+  uint32_t data;
+} ExtType;
+
+void consume_ext(ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.compat.c b/cbindgen-0.24.5/tests/expectations/workspace.compat.c
new file mode 100644
index 0000000..dd8b86c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXT_CONST 0
+
+typedef struct {
+  uint32_t data;
+} ExtType;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void consume_ext(ExtType _ext);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.cpp b/cbindgen-0.24.5/tests/expectations/workspace.cpp
new file mode 100644
index 0000000..b7b31a1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.cpp
@@ -0,0 +1,17 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+constexpr static const int32_t EXT_CONST = 0;
+
+struct ExtType {
+  uint32_t data;
+};
+
+extern "C" {
+
+void consume_ext(ExtType _ext);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.pyx b/cbindgen-0.24.5/tests/expectations/workspace.pyx
new file mode 100644
index 0000000..f77824c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t EXT_CONST # = 0
+
+  ctypedef struct ExtType:
+    uint32_t data;
+
+  void consume_ext(ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.tag.c b/cbindgen-0.24.5/tests/expectations/workspace.tag.c
new file mode 100644
index 0000000..4c16fcd
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.tag.c
@@ -0,0 +1,12 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXT_CONST 0
+
+struct ExtType {
+  uint32_t data;
+};
+
+void consume_ext(struct ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.tag.compat.c b/cbindgen-0.24.5/tests/expectations/workspace.tag.compat.c
new file mode 100644
index 0000000..8e4596f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.tag.compat.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define EXT_CONST 0
+
+struct ExtType {
+  uint32_t data;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void consume_ext(struct ExtType _ext);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/workspace.tag.pyx b/cbindgen-0.24.5/tests/expectations/workspace.tag.pyx
new file mode 100644
index 0000000..b5d16eb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/workspace.tag.pyx
@@ -0,0 +1,14 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  const int32_t EXT_CONST # = 0
+
+  cdef struct ExtType:
+    uint32_t data;
+
+  void consume_ext(ExtType _ext);
diff --git a/cbindgen-0.24.5/tests/expectations/zst.both.c b/cbindgen-0.24.5/tests/expectations/zst.both.c
new file mode 100644
index 0000000..b03132f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.both.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct TraitObject {
+  void *data;
+  void *vtable;
+} TraitObject;
+
+void *root(const void *ptr, struct TraitObject t);
diff --git a/cbindgen-0.24.5/tests/expectations/zst.both.compat.c b/cbindgen-0.24.5/tests/expectations/zst.both.compat.c
new file mode 100644
index 0000000..154f14f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.both.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct TraitObject {
+  void *data;
+  void *vtable;
+} TraitObject;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void *root(const void *ptr, struct TraitObject t);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/zst.c b/cbindgen-0.24.5/tests/expectations/zst.c
new file mode 100644
index 0000000..04caa7d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  void *data;
+  void *vtable;
+} TraitObject;
+
+void *root(const void *ptr, TraitObject t);
diff --git a/cbindgen-0.24.5/tests/expectations/zst.compat.c b/cbindgen-0.24.5/tests/expectations/zst.compat.c
new file mode 100644
index 0000000..5dbc3ea
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+typedef struct {
+  void *data;
+  void *vtable;
+} TraitObject;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void *root(const void *ptr, TraitObject t);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/zst.cpp b/cbindgen-0.24.5/tests/expectations/zst.cpp
new file mode 100644
index 0000000..6d6a4e2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.cpp
@@ -0,0 +1,16 @@
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+struct TraitObject {
+  void *data;
+  void *vtable;
+};
+
+extern "C" {
+
+void *root(const void *ptr, TraitObject t);
+
+} // extern "C"
diff --git a/cbindgen-0.24.5/tests/expectations/zst.pyx b/cbindgen-0.24.5/tests/expectations/zst.pyx
new file mode 100644
index 0000000..2e96545
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  ctypedef struct TraitObject:
+    void *data;
+    void *vtable;
+
+  void *root(const void *ptr, TraitObject t);
diff --git a/cbindgen-0.24.5/tests/expectations/zst.tag.c b/cbindgen-0.24.5/tests/expectations/zst.tag.c
new file mode 100644
index 0000000..0a999af
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.tag.c
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct TraitObject {
+  void *data;
+  void *vtable;
+};
+
+void *root(const void *ptr, struct TraitObject t);
diff --git a/cbindgen-0.24.5/tests/expectations/zst.tag.compat.c b/cbindgen-0.24.5/tests/expectations/zst.tag.compat.c
new file mode 100644
index 0000000..8a115b7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.tag.compat.c
@@ -0,0 +1,19 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+struct TraitObject {
+  void *data;
+  void *vtable;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+void *root(const void *ptr, struct TraitObject t);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
diff --git a/cbindgen-0.24.5/tests/expectations/zst.tag.pyx b/cbindgen-0.24.5/tests/expectations/zst.tag.pyx
new file mode 100644
index 0000000..03235cc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/expectations/zst.tag.pyx
@@ -0,0 +1,13 @@
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
+from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
+cdef extern from *:
+  ctypedef bint bool
+  ctypedef struct va_list
+
+cdef extern from *:
+
+  cdef struct TraitObject:
+    void *data;
+    void *vtable;
+
+  void *root(const void *ptr, TraitObject t);
diff --git a/cbindgen-0.24.5/tests/rust/alias.rs b/cbindgen-0.24.5/tests/rust/alias.rs
new file mode 100644
index 0000000..86e3e00
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/alias.rs
@@ -0,0 +1,32 @@
+#[repr(C)]
+struct Dep {
+    a: i32,
+    b: f32,
+}
+
+#[repr(C)]
+struct Foo<X> {
+    a: X,
+    b: X,
+    c: Dep,
+}
+
+#[repr(u32)]
+enum Status {
+    Ok,
+    Err,
+}
+
+type IntFoo = Foo<i32>;
+type DoubleFoo = Foo<f64>;
+
+type Unit = i32;
+type SpecialStatus = Status;
+
+#[no_mangle]
+pub extern "C" fn root(
+    x: IntFoo,
+    y: DoubleFoo,
+    z: Unit,
+    w: SpecialStatus
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/annotation.rs b/cbindgen-0.24.5/tests/rust/annotation.rs
new file mode 100644
index 0000000..7070592
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/annotation.rs
@@ -0,0 +1,43 @@
+/// cbindgen:derive-lt=true
+/// cbindgen:derive-lte=true
+/// cbindgen:derive-constructor=true
+/// cbindgen:rename-all=GeckoCase
+#[repr(C)]
+struct A(i32);
+
+/// cbindgen:field-names=[x, y]
+#[repr(C)]
+struct B(i32, f32);
+
+/// cbindgen:trailing-values=[Z, W]
+#[repr(u32)]
+enum C {
+    X = 2,
+    Y,
+}
+
+/// cbindgen:derive-helper-methods=true
+#[repr(u8)]
+enum F {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz
+}
+
+/// cbindgen:derive-helper-methods
+#[repr(C, u8)]
+enum H {
+    Hello(i16),
+    There { x: u8, y: i16 },
+    Everyone
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    x: A,
+    y: B,
+    z: C,
+    f: F,
+    h: H,
+) { }
+
diff --git a/cbindgen-0.24.5/tests/rust/array.rs b/cbindgen-0.24.5/tests/rust/array.rs
new file mode 100644
index 0000000..fb33537
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/array.rs
@@ -0,0 +1,7 @@
+#[repr(C)]
+enum Foo {
+    A([f32; 20])
+}
+
+#[no_mangle]
+pub extern "C" fn root(a: Foo) {}
diff --git a/cbindgen-0.24.5/tests/rust/array.toml b/cbindgen-0.24.5/tests/rust/array.toml
new file mode 100644
index 0000000..ea03916
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/array.toml
@@ -0,0 +1,2 @@
+[enum]
+derive_helper_methods = true
diff --git a/cbindgen-0.24.5/tests/rust/asserted_cast.rs b/cbindgen-0.24.5/tests/rust/asserted_cast.rs
new file mode 100644
index 0000000..983131b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/asserted_cast.rs
@@ -0,0 +1,44 @@
+/// cbindgen:prefix-with-name
+#[repr(C, u8)]
+pub enum H {
+    /// cbindgen:variant-mut-cast-attributes=MY_ATTRS
+    Foo(i16),
+    /// cbindgen:variant-const-cast-attributes=MY_ATTRS
+    Bar { x: u8, y: i16 },
+    /// cbindgen:variant-is-attributes=MY_ATTRS
+    Baz
+}
+
+/// cbindgen:prefix-with-name
+#[repr(C, u8, u16)]
+pub enum I {
+    /// cbindgen:variant-constructor-attributes=MY_ATTRS
+    Foo(i16),
+    /// cbindgen:eq-attributes=MY_ATTRS
+    Bar { x: u8, y: i16 },
+    Baz
+}
+
+/// cbindgen:prefix-with-name
+#[repr(C, u8)]
+pub enum J {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz
+}
+
+/// cbindgen:prefix-with-name
+#[repr(u8)]
+pub enum K {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz
+}
+
+#[no_mangle]
+pub extern "C" fn foo(
+    h: H,
+    i: I,
+    j: J,
+    k: K,
+) {}
diff --git a/cbindgen-0.24.5/tests/rust/asserted_cast.toml b/cbindgen-0.24.5/tests/rust/asserted_cast.toml
new file mode 100644
index 0000000..4ed3557
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/asserted_cast.toml
@@ -0,0 +1,10 @@
+header = """
+#define MY_ASSERT(...) do { } while (0)
+#define MY_ATTRS __attribute((noinline))
+"""
+
+[enum]
+derive_helper_methods = true
+derive_const_casts = true
+derive_mut_casts = true
+cast_assert_name = "MY_ASSERT"
diff --git a/cbindgen-0.24.5/tests/rust/assoc_const_conflict.rs b/cbindgen-0.24.5/tests/rust/assoc_const_conflict.rs
new file mode 100644
index 0000000..7907e32
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/assoc_const_conflict.rs
@@ -0,0 +1,9 @@
+#[repr(C)]
+struct Foo {}
+
+pub const Foo_FOO: u32 = 42;
+
+impl Foo {
+    const FOO: i32 = 0;
+}
+
diff --git a/cbindgen-0.24.5/tests/rust/assoc_constant.rs b/cbindgen-0.24.5/tests/rust/assoc_constant.rs
new file mode 100644
index 0000000..57417ef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/assoc_constant.rs
@@ -0,0 +1,14 @@
+#[repr(C)]
+struct Foo {}
+
+impl Foo {
+    pub const GA: i32 = 10;
+    pub const BU: &'static str = "hello world";
+    pub const ZO: f32 = 3.14;
+
+    pub(crate) const DONT_EXPORT_CRATE: i32 = 20;
+    const DONT_EXPORT_PRIV: i32 = 30;
+}
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo) { }
diff --git a/cbindgen-0.24.5/tests/rust/associated_constant_panic.rs b/cbindgen-0.24.5/tests/rust/associated_constant_panic.rs
new file mode 100644
index 0000000..ff0c8ec
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/associated_constant_panic.rs
@@ -0,0 +1,7 @@
+pub trait F {
+    const B: u8;
+}
+
+impl F for u16 {
+    const B: u8 = 3;
+}
diff --git a/cbindgen-0.24.5/tests/rust/associated_in_body.rs b/cbindgen-0.24.5/tests/rust/associated_in_body.rs
new file mode 100644
index 0000000..8c76a13
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/associated_in_body.rs
@@ -0,0 +1,54 @@
+bitflags! {
+    /// Constants shared by multiple CSS Box Alignment properties
+    ///
+    /// These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+    #[derive(MallocSizeOf)]
+    #[repr(C)]
+    pub struct AlignFlags: u8 {
+        /// 'auto'
+        const AUTO = 0;
+        /// 'normal'
+        const NORMAL = 1;
+        /// 'start'
+        const START = 1 << 1;
+        /// 'end'
+        const END = 1 << 2;
+        const ALIAS = Self::END.bits;
+        /// 'flex-start'
+        const FLEX_START = 1 << 3;
+        const MIXED = 1 << 4 | AlignFlags::FLEX_START.bits | AlignFlags::END.bits;
+        const MIXED_SELF = 1 << 5 | AlignFlags::FLEX_START.bits | AlignFlags::END.bits;
+    }
+}
+
+/// An arbitrary identifier for a native (OS compositor) surface
+#[repr(C)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
+pub struct NativeSurfaceId(pub u64);
+
+impl NativeSurfaceId {
+    /// A special id for the native surface that is used for debug / profiler overlays.
+    pub const DEBUG_OVERLAY: NativeSurfaceId = NativeSurfaceId(u64::MAX);
+}
+
+#[repr(C)]
+#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
+#[cfg_attr(feature = "capture", derive(Serialize))]
+#[cfg_attr(feature = "replay", derive(Deserialize))]
+pub struct NativeTileId {
+    pub surface_id: NativeSurfaceId,
+    pub x: i32,
+    pub y: i32,
+}
+
+impl NativeTileId {
+    /// A special id for the native surface that is used for debug / profiler overlays.
+    pub const DEBUG_OVERLAY: NativeTileId = NativeTileId {
+        surface_id: NativeSurfaceId::DEBUG_OVERLAY,
+        x: 0,
+        y: 0,
+    };
+}
+
+#[no_mangle]
+pub extern "C" fn root(flags: AlignFlags, tile: NativeTileId) {}
diff --git a/cbindgen-0.24.5/tests/rust/associated_in_body.toml b/cbindgen-0.24.5/tests/rust/associated_in_body.toml
new file mode 100644
index 0000000..a52609b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/associated_in_body.toml
@@ -0,0 +1,11 @@
+[struct]
+associated_constants_in_body = true
+
+[macro_expansion]
+bitflags = true
+
+[export]
+prefix = "Style" # Just ensuring they play well together :)
+
+[const]
+allow_constexpr = true
diff --git a/cbindgen-0.24.5/tests/rust/bitflags.rs b/cbindgen-0.24.5/tests/rust/bitflags.rs
new file mode 100644
index 0000000..7e78bd8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/bitflags.rs
@@ -0,0 +1,43 @@
+bitflags! {
+    /// Constants shared by multiple CSS Box Alignment properties
+    ///
+    /// These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
+    #[derive(MallocSizeOf)]
+    #[repr(C)]
+    pub struct AlignFlags: u8 {
+        /// 'auto'
+        const AUTO = 0;
+        /// 'normal'
+        const NORMAL = 1;
+        /// 'start'
+        const START = 1 << 1;
+        /// 'end'
+        const END = 1 << 2;
+        const ALIAS = Self::END.bits;
+        /// 'flex-start'
+        const FLEX_START = 1 << 3;
+        const MIXED = 1 << 4 | AlignFlags::FLEX_START.bits | AlignFlags::END.bits;
+        const MIXED_SELF = 1 << 5 | AlignFlags::FLEX_START.bits | AlignFlags::END.bits;
+    }
+}
+
+bitflags! {
+    #[repr(C)]
+    pub struct DebugFlags: u32 {
+        /// Flag with the topmost bit set of the u32
+        const BIGGEST_ALLOWED = 1 << 31;
+    }
+}
+
+bitflags! {
+    #[repr(C)]
+    pub struct LargeFlags: u64 {
+        /// Flag with a very large shift that usually would be narrowed.
+        const LARGE_SHIFT = 1u64 << 44;
+        const INVERTED = !Self::LARGE_SHIFT.bits;
+    }
+}
+
+
+#[no_mangle]
+pub extern "C" fn root(flags: AlignFlags, bigger_flags: DebugFlags, largest_flags: LargeFlags) {}
diff --git a/cbindgen-0.24.5/tests/rust/bitflags.toml b/cbindgen-0.24.5/tests/rust/bitflags.toml
new file mode 100644
index 0000000..465689e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/bitflags.toml
@@ -0,0 +1,5 @@
+[macro_expansion]
+bitflags = true
+
+[const]
+allow_constexpr = true
diff --git a/cbindgen-0.24.5/tests/rust/body.rs b/cbindgen-0.24.5/tests/rust/body.rs
new file mode 100644
index 0000000..fb275f9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/body.rs
@@ -0,0 +1,55 @@
+
+#[repr(C)]
+pub struct MyFancyStruct {
+    i: i32,
+}
+
+#[repr(C)]
+pub enum MyFancyEnum {
+    Foo,
+    Bar(i32),
+    Baz(i32),
+}
+
+#[repr(C)]
+pub enum MyCLikeEnum {
+    Foo1,
+    Bar1,
+    Baz1,
+}
+
+#[repr(C)]
+pub union MyUnion {
+    pub f: f32,
+    pub u: u32,
+}
+
+
+#[repr(C)]
+pub struct MyFancyStruct_Prepended {
+    i: i32,
+}
+
+#[repr(C)]
+pub enum MyFancyEnum_Prepended {
+    Foo_Prepended,
+    Bar_Prepended(i32),
+    Baz_Prepended(i32),
+}
+
+#[repr(C)]
+pub enum MyCLikeEnum_Prepended {
+    Foo1_Prepended,
+    Bar1_Prepended,
+    Baz1_Prepended,
+}
+
+#[repr(C)]
+pub union MyUnion_Prepended {
+    pub f: f32,
+    pub u: u32,
+}
+
+
+#[no_mangle]
+pub extern "C" fn root(s: MyFancyStruct, e: MyFancyEnum, c: MyCLikeEnum, u: MyUnion, sp: MyFancyStruct_Prepended, ep: MyFancyEnum_Prepended, cp: MyCLikeEnum_Prepended, up: MyUnion_Prepended) {}
diff --git a/cbindgen-0.24.5/tests/rust/body.toml b/cbindgen-0.24.5/tests/rust/body.toml
new file mode 100644
index 0000000..ab96d70
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/body.toml
@@ -0,0 +1,41 @@
+[export.body]
+"MyFancyStruct" = """
+#ifdef __cplusplus
+    inline void foo();
+#endif
+"""
+
+"MyFancyEnum" = """
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+"""
+
+"MyCLikeEnum" = """
+  BogusVariantForSerializationForExample,
+"""
+
+"MyUnion" = """
+  int32_t extra_member;
+"""
+
+[export.pre_body]
+"MyFancyStruct_Prepended" = """
+#ifdef __cplusplus
+    inline void prepended_wohoo();
+#endif
+"""
+
+"MyFancyEnum_Prepended" = """
+#ifdef __cplusplus
+    inline void wohoo();
+#endif
+"""
+
+"MyCLikeEnum_Prepended" = """
+  BogusVariantForSerializationForExample,
+"""
+
+"MyUnion_Prepended" = """
+    int32_t extra_member;
+"""
diff --git a/cbindgen-0.24.5/tests/rust/box.rs b/cbindgen-0.24.5/tests/rust/box.rs
new file mode 100644
index 0000000..6cc852c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/box.rs
@@ -0,0 +1,19 @@
+#[repr(C)]
+pub struct MyStruct {
+    number: Box<i32>,
+}
+
+pub struct NotReprC<T> {
+    inner: T,
+}
+
+pub type Foo = NotReprC<Box<i32>>;
+
+#[no_mangle]
+pub extern "C" fn root(a: &Foo, with_box: &MyStruct) {}
+
+#[no_mangle]
+pub extern "C" fn drop_box(x: Box<i32>) {}
+
+#[no_mangle]
+pub extern "C" fn drop_box_opt(x: Option<Box<i32>>) {}
diff --git a/cbindgen-0.24.5/tests/rust/box.toml b/cbindgen-0.24.5/tests/rust/box.toml
new file mode 100644
index 0000000..84cb6b0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/box.toml
@@ -0,0 +1,18 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+"""
+[export]
+exclude = [
+  "Box",
+]
diff --git a/cbindgen-0.24.5/tests/rust/cdecl.rs b/cbindgen-0.24.5/tests/rust/cdecl.rs
new file mode 100644
index 0000000..399de8f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cdecl.rs
@@ -0,0 +1,41 @@
+type A = fn ();
+type B = fn () -> ();
+type C = fn (i32, i32) -> bool;
+type D = fn (i32) -> fn (f32) -> bool;
+type E = fn () -> *const [i32; 16];
+
+type F = *const i32;
+type G = *const *const i32;
+type H = *const *mut i32;
+type I = *const [i32; 16];
+type J = *const fn (f32) -> f64;
+
+type K = [i32; 16];
+type L = [*const i32; 16];
+type M = [fn (i32, i32) -> bool; 16];
+type N = [fn (i32, i32) -> (); 16];
+
+#[no_mangle]
+pub extern "C" fn O() -> fn ()
+{ }
+
+type P = fn (named1st: i32, bool, named3rd: bool, _: i32);
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: A,
+    b: B,
+    c: C,
+    d: D,
+    e: E,
+    f: F,
+    g: G,
+    h: H,
+    i: I,
+    j: J,
+    k: K,
+    l: L,
+    m: M,
+    n: N,
+    p: P
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/cell.rs b/cbindgen-0.24.5/tests/rust/cell.rs
new file mode 100644
index 0000000..5f16dbb
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cell.rs
@@ -0,0 +1,11 @@
+#[repr(C)]
+pub struct MyStruct {
+    number: std::cell::Cell<i32>,
+}
+
+pub struct NotReprC<T> { inner: T }
+
+pub type Foo = NotReprC<std::cell::RefCell<i32>>;
+
+#[no_mangle]
+pub extern "C" fn root(a: &Foo, with_cell: &MyStruct) {}
diff --git a/cbindgen-0.24.5/tests/rust/cfg.rs b/cbindgen-0.24.5/tests/rust/cfg.rs
new file mode 100644
index 0000000..903c156
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cfg.rs
@@ -0,0 +1,64 @@
+#[cfg(all(unix, x11))]
+#[repr(u32)]
+enum FooType {
+  A,
+  B,
+  C,
+}
+
+#[cfg(all(unix, x11))]
+#[repr(C)]
+struct FooHandle {
+    ty: FooType,
+    x: i32,
+    y: f32,
+}
+
+#[cfg(any(windows, target_pointer_width="32"))]
+#[repr(u32)]
+enum BarType {
+  A,
+  B,
+  C,
+}
+
+#[repr(u8)]
+pub enum C {
+    C1,
+    C2,
+    #[cfg(windows)]
+    C3,
+    #[cfg(unix)]
+    C5 { int: i32 },
+}
+
+#[cfg(any(windows, target_pointer_width="32"))]
+#[repr(C)]
+struct BarHandle {
+    ty: BarType,
+    x: i32,
+    y: f32,
+}
+
+// FIXME(#634): Support deriving methods for structs with conditional fields.
+/// cbindgen:derive-eq=false
+/// cbindgen:derive-neq=false
+#[repr(C)]
+struct ConditionalField {
+    #[cfg(x11)]
+    field: i32,
+}
+
+#[cfg(all(unix, x11))]
+#[no_mangle]
+pub extern "C" fn root(a: FooHandle, c: C)
+{ }
+
+#[cfg(any(windows, target_pointer_width="32"))]
+#[no_mangle]
+pub extern "C" fn root(a: BarHandle, c: C)
+{ }
+
+#[no_mangle]
+pub extern "C" fn cond(a: ConditionalField)
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/cfg.toml b/cbindgen-0.24.5/tests/rust/cfg.toml
new file mode 100644
index 0000000..4d6c4ca
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cfg.toml
@@ -0,0 +1,25 @@
+header = """
+#if 0
+DEF PLATFORM_UNIX = 0
+DEF PLATFORM_WIN = 0
+DEF X11 = 0
+DEF M_32 = 0
+#endif
+"""
+
+[defines]
+"unix" = "PLATFORM_UNIX"
+"windows" = "PLATFORM_WIN"
+"x11" = "X11"
+"target_pointer_width = 32" = "M_32"
+
+[enum]
+derive_tagged_enum_destructor = true
+derive_tagged_enum_copy_constructor = true
+derive_tagged_enum_copy_assignment = true
+derive_helper_methods = true
+private_default_tagged_enum_constructor = true
+
+[struct]
+derive_eq = true
+derive_neq = true
diff --git a/cbindgen-0.24.5/tests/rust/cfg_2.rs b/cbindgen-0.24.5/tests/rust/cfg_2.rs
new file mode 100644
index 0000000..4b4c959
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cfg_2.rs
@@ -0,0 +1,32 @@
+#[cfg(any(windows, unix))]
+#[repr(C)]
+struct Foo {
+    x: i32,
+}
+
+#[cfg(windows)]
+#[repr(C)]
+struct Bar {
+    y: Foo,
+}
+
+#[cfg(unix)]
+#[repr(C)]
+struct Bar {
+    z: Foo,
+}
+
+#[repr(C)]
+struct Root {
+    w: Bar,
+}
+
+#[cfg(windows)]
+pub const DEFAULT_X: i32 = 0x08;
+
+#[cfg(unix)]
+pub const DEFAULT_X: i32 = 0x2a;
+
+#[no_mangle]
+pub extern "C" fn root(a: Root)
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/cfg_2.toml b/cbindgen-0.24.5/tests/rust/cfg_2.toml
new file mode 100644
index 0000000..4672d03
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cfg_2.toml
@@ -0,0 +1,11 @@
+header = """
+#if 0
+DEF DEFINED = 1
+DEF NOT_DEFINED = 0
+#endif
+"""
+
+[defines]
+"unix" = "DEFINED"
+"macos" = "NOT_DEFINED"
+"windows" = "NOT_DEFINED"
diff --git a/cbindgen-0.24.5/tests/rust/cfg_field.rs b/cbindgen-0.24.5/tests/rust/cfg_field.rs
new file mode 100644
index 0000000..aed5165
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cfg_field.rs
@@ -0,0 +1,11 @@
+struct Foo {
+    #[cfg(windows)]
+    x: i32,
+}
+
+pub fn foo() {
+    Foo {
+        #[cfg(windows)]
+        x: 0,
+    };
+}
diff --git a/cbindgen-0.24.5/tests/rust/char.rs b/cbindgen-0.24.5/tests/rust/char.rs
new file mode 100644
index 0000000..258e50f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/char.rs
@@ -0,0 +1,7 @@
+#[repr(C)]
+struct Foo {
+    a: char,
+}
+
+#[no_mangle]
+pub extern "C" fn root(a: Foo) {}
diff --git a/cbindgen-0.24.5/tests/rust/const_conflict.rs b/cbindgen-0.24.5/tests/rust/const_conflict.rs
new file mode 100644
index 0000000..041fecf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_conflict.rs
@@ -0,0 +1,9 @@
+#[repr(C)]
+struct Foo {}
+
+impl Foo {
+    const FOO: i32 = 0;
+}
+
+pub const Foo_FOO: u32 = 42;
+
diff --git a/cbindgen-0.24.5/tests/rust/const_generics.rs b/cbindgen-0.24.5/tests/rust/const_generics.rs
new file mode 100644
index 0000000..081b38e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics.rs
@@ -0,0 +1,15 @@
+#[repr(transparent)]
+pub struct CArrayString<const CAP: usize> {
+    pub chars: [i8; CAP],
+}
+
+pub const TITLE_SIZE: usize = 80;
+
+#[repr(C)]
+pub struct Book {
+    pub title: CArrayString<TITLE_SIZE>,
+    pub author: CArrayString<40>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(a: *mut Book) {}
diff --git a/cbindgen-0.24.5/tests/rust/const_generics_arrayvec.rs b/cbindgen-0.24.5/tests/rust/const_generics_arrayvec.rs
new file mode 100644
index 0000000..459ddbc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics_arrayvec.rs
@@ -0,0 +1,17 @@
+#[repr(C)]
+pub struct ArrayVec<T, const CAP: usize> {
+    // the `len` first elements of the array are initialized
+    xs: [T; CAP],
+    len: u32,
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn push(v: *mut ArrayVec<*mut u8, 100>, elem: *mut u8) -> i32 {
+    if (*v).len < 100 {
+        (*v).xs[(*v).len] = elem;
+        (*v).len += 1;
+        1
+    } else {
+        0
+    }
+}
diff --git a/cbindgen-0.24.5/tests/rust/const_generics_bool.rs b/cbindgen-0.24.5/tests/rust/const_generics_bool.rs
new file mode 100644
index 0000000..3047b07
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics_bool.rs
@@ -0,0 +1,57 @@
+use std::mem::MaybeUninit;
+
+use libc::c_char;
+
+#[repr(C)]
+pub struct HashTable<K, V, const IS_MAP: bool> {
+    num_buckets: usize,
+    capacity: usize,
+    occupied: *mut u8,
+    keys: *mut MaybeUninit<K>,
+    vals: *mut MaybeUninit<V>,
+}
+
+type Str = *const c_char;
+pub type HashMap<K, V> = HashTable<K, V, true>;
+pub type HashSet<K> = HashTable<K, u8, false>;
+
+impl<K, V, const IS_MAP: bool> HashTable<K, V, IS_MAP>
+{
+    pub fn new() -> Self {
+        HashTable {
+            num_buckets: 0,
+            capacity: 0,
+            occupied: std::ptr::null_mut(),
+            keys: std::ptr::null_mut(),
+            vals: std::ptr::null_mut(),
+        }
+    }
+}
+
+// with alias
+type MySet = HashTable<Str, c_char, false>;
+
+#[no_mangle]
+pub extern "C" fn new_set() -> *mut MySet {
+    Box::into_raw(Box::new(HashSet::new()))
+}
+
+type SetCallback = unsafe extern "C" fn(key: Str);
+
+#[no_mangle]
+pub unsafe extern "C" fn set_for_each(set: *const MySet, callback: SetCallback) {
+    todo!();
+}
+
+// without alias
+#[no_mangle]
+pub extern "C" fn new_map() -> *mut HashTable<Str, u64, true> {
+    Box::into_raw(Box::new(HashMap::new()))
+}
+
+type MapCallback = unsafe extern "C" fn(key: Str, val: u64);
+
+#[no_mangle]
+pub unsafe extern "C" fn map_for_each(map: *const HashTable<Str, u64, true>, callback: MapCallback) {
+    todo!();
+}
diff --git a/cbindgen-0.24.5/tests/rust/const_generics_byte.rs b/cbindgen-0.24.5/tests/rust/const_generics_byte.rs
new file mode 100644
index 0000000..e150567
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics_byte.rs
@@ -0,0 +1,29 @@
+// Name mangling can cope with char-like byte literals.
+
+#[repr(C)]
+pub struct Parser<const OPEN: u8, const CLOSE: u8> {
+    pub buf: *mut u8,
+    pub len: usize,
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn init_parens_parser(p: *mut Parser<b'(', b')'>, buf: *mut u8, len: usize) {
+    unsafe {
+        *p = Parser { buf, len };
+    }
+}
+
+// The same type as above, because `b'(' == 40 && b')' == 41`. And it happens
+// to mangle to the same C identifier. It doesn't always work out that way!
+#[no_mangle]
+pub unsafe extern "C" fn destroy_parens_parser(p: *mut Parser<40, 41>) {
+    // nothing to do
+}
+
+
+#[no_mangle]
+pub unsafe extern "C" fn init_braces_parser(p: *mut Parser<b'{', b'}'>, buf: *mut u8, len: usize) {
+    unsafe {
+        *p = Parser { buf, len };
+    }
+}
diff --git a/cbindgen-0.24.5/tests/rust/const_generics_char.rs b/cbindgen-0.24.5/tests/rust/const_generics_char.rs
new file mode 100644
index 0000000..85bff32
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics_char.rs
@@ -0,0 +1,20 @@
+use std::marker::PhantomData;
+
+#[repr(C)]
+struct TakeUntil<'a, const V: char>
+{
+    marker: PhantomData<&'a str>,
+    start: *const u8,
+    len: usize,
+    point: usize,
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn until_nul(start: *const u8, len: usize) -> TakeUntil<'a, '\0'> {
+    TakeUntil {
+        marker: PhantomData,
+        start,
+        len,
+        point: 0,
+    }
+}
diff --git a/cbindgen-0.24.5/tests/rust/const_generics_constant.rs b/cbindgen-0.24.5/tests/rust/const_generics_constant.rs
new file mode 100644
index 0000000..83ed860
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics_constant.rs
@@ -0,0 +1,18 @@
+#[repr(C)]
+pub struct FixedPoint<const FRACTION_BITS: u16> {
+    value: u16,
+}
+
+pub const FONT_WEIGHT_FRACTION_BITS: u16 = 6;
+
+pub type FontWeightFixedPoint = FixedPoint<FONT_WEIGHT_FRACTION_BITS>;
+
+#[repr(C)]
+pub struct FontWeight(FontWeightFixedPoint);
+
+impl FontWeight {
+    pub const NORMAL: FontWeight = FontWeight(FontWeightFixedPoint { value: 400 << FONT_WEIGHT_FRACTION_BITS });
+}
+
+#[no_mangle]
+pub extern "C" fn root(w: FontWeight) {}
diff --git a/cbindgen-0.24.5/tests/rust/const_generics_thru.rs b/cbindgen-0.24.5/tests/rust/const_generics_thru.rs
new file mode 100644
index 0000000..51b279c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_generics_thru.rs
@@ -0,0 +1,22 @@
+// Propagating const arguments through generics that use generics.
+
+#[repr(C)]
+pub struct Inner<const N: usize> {
+    pub bytes: [u8; N],
+}
+
+#[repr(C)]
+pub struct Outer<const N: usize> {
+    pub inner: Inner<N>, // don't declare two different structs named `Inner_N`
+}
+
+#[no_mangle]
+pub extern "C" fn one() -> Outer<1> {
+    Outer { inner: Inner { bytes: [0] } }
+}
+
+#[no_mangle]
+pub extern "C" fn two() -> Outer<2> {
+    Outer { inner: Inner { bytes: [0, 0] } }
+}
+
diff --git a/cbindgen-0.24.5/tests/rust/const_transparent.rs b/cbindgen-0.24.5/tests/rust/const_transparent.rs
new file mode 100644
index 0000000..7032953
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/const_transparent.rs
@@ -0,0 +1,4 @@
+#[repr(transparent)]
+struct Transparent { field: u8 }
+
+pub const FOO: Transparent = Transparent { field: 0 };
diff --git a/cbindgen-0.24.5/tests/rust/constant.rs b/cbindgen-0.24.5/tests/rust/constant.rs
new file mode 100644
index 0000000..637a2ce
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant.rs
@@ -0,0 +1,38 @@
+pub const FOO: i32 = 10;
+pub const BAR: &'static str = "hello world";
+pub const DELIMITER: char = ':';
+pub const LEFTCURLY: char = '{';
+pub const QUOTE: char = '\'';
+pub const TAB: char = '\t';
+pub const NEWLINE: char = '\n';
+pub const HEART: char = '❤';
+pub const EQUID: char = '𐂃';
+pub const ZOM: f32 = 3.14;
+
+pub(crate) const DONT_EXPORT_CRATE: i32 = 20;
+const DONT_EXPORT_PRIV: i32 = 30;
+
+/// A single-line doc comment.
+pub const POS_ONE: i8 = 1;
+/// A
+/// multi-line
+/// doc
+/// comment.
+pub const NEG_ONE: i8 = -1;
+
+// Some doc for shifting //
+pub const SHIFT: i64 = 3;
+pub const XBOOL: i64 = 1;
+pub const XFALSE: i64 = (0 << SHIFT) | XBOOL;
+pub const XTRUE: i64 = 1 << (SHIFT | XBOOL);
+
+pub const CAST: u8 = 'A' as u8;
+pub const DOUBLE_CAST: u32 = 1 as f32 as u32;
+
+#[repr(C)]
+struct Foo {
+    x: [i32; FOO],
+}
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo) {}
diff --git a/cbindgen-0.24.5/tests/rust/constant_big.rs b/cbindgen-0.24.5/tests/rust/constant_big.rs
new file mode 100644
index 0000000..94eb834
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_big.rs
@@ -0,0 +1,8 @@
+pub const UNSIGNED_NEEDS_ULL_SUFFIX: u64       = 0x8000_0000_0000_0000;
+pub const UNSIGNED_DOESNT_NEED_ULL_SUFFIX: u64 = 0x7000_0000_0000_0000;
+
+// i64::min_value()
+pub const SIGNED_NEEDS_ULL_SUFFIX: i64         = -9223372036854775808;
+
+// i64::min_value() + 1
+pub const SIGNED_DOESNT_NEED_ULL_SUFFIX: i64   = -9223372036854775807;
diff --git a/cbindgen-0.24.5/tests/rust/constant_constexpr.rs b/cbindgen-0.24.5/tests/rust/constant_constexpr.rs
new file mode 100644
index 0000000..c4d2b8c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_constexpr.rs
@@ -0,0 +1,14 @@
+pub const CONSTANT_I64: i64 = 216;
+pub const CONSTANT_FLOAT32: f32 = 312.292;
+pub const DELIMITER: char = ':';
+pub const LEFTCURLY: char = '{';
+#[repr(C)]
+struct Foo {
+    x: i32,
+}
+
+pub const SomeFoo: Foo = Foo { x: 99, };
+
+impl Foo {
+    pub const CONSTANT_I64_BODY: i64 = 216;
+}
diff --git a/cbindgen-0.24.5/tests/rust/constant_constexpr.toml b/cbindgen-0.24.5/tests/rust/constant_constexpr.toml
new file mode 100644
index 0000000..5deb0ed
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_constexpr.toml
@@ -0,0 +1,5 @@
+[const]
+allow_constexpr = false
+
+[struct]
+associated_constants_in_body = true
diff --git a/cbindgen-0.24.5/tests/rust/constant_sort_name.rs b/cbindgen-0.24.5/tests/rust/constant_sort_name.rs
new file mode 100644
index 0000000..96c1185
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_sort_name.rs
@@ -0,0 +1,7 @@
+pub const B: u8 = 0;
+pub const A: u8 = 0;
+
+#[no_mangle]
+pub static D: u8 = 0;
+#[no_mangle]
+pub static C: u8 = 0;
diff --git a/cbindgen-0.24.5/tests/rust/constant_sort_name.toml b/cbindgen-0.24.5/tests/rust/constant_sort_name.toml
new file mode 100644
index 0000000..41e26d8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_sort_name.toml
@@ -0,0 +1,2 @@
+[const]
+sort_by = "Name"
diff --git a/cbindgen-0.24.5/tests/rust/constant_sort_none.rs b/cbindgen-0.24.5/tests/rust/constant_sort_none.rs
new file mode 100644
index 0000000..96c1185
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_sort_none.rs
@@ -0,0 +1,7 @@
+pub const B: u8 = 0;
+pub const A: u8 = 0;
+
+#[no_mangle]
+pub static D: u8 = 0;
+#[no_mangle]
+pub static C: u8 = 0;
diff --git a/cbindgen-0.24.5/tests/rust/constant_user_defined_type.rs b/cbindgen-0.24.5/tests/rust/constant_user_defined_type.rs
new file mode 100644
index 0000000..cffe817
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/constant_user_defined_type.rs
@@ -0,0 +1,17 @@
+#[repr(C)]
+pub struct S {
+    field: u8,
+}
+
+/// cbindgen:enum-class=false
+#[repr(C)]
+pub enum E {
+    V,
+}
+use E::*;
+
+pub type A = u8;
+
+pub const C1: S = S { field: 0 };
+pub const C2: E = V;
+pub const C3: A = 0;
diff --git a/cbindgen-0.24.5/tests/rust/custom_header.rs b/cbindgen-0.24.5/tests/rust/custom_header.rs
new file mode 100644
index 0000000..03de69f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/custom_header.rs
@@ -0,0 +1,3 @@
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/custom_header.toml b/cbindgen-0.24.5/tests/rust/custom_header.toml
new file mode 100644
index 0000000..4b1c8ee
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/custom_header.toml
@@ -0,0 +1,11 @@
+no_includes = true
+header = """
+#if 0
+# This file is generated by cbindgen. DO NOT EDIT
+#endif
+"""
+trailer = """
+#if 0
+# This is a simple test to ensure that trailers do not cause extra newlines in files
+#endif
+"""
diff --git a/cbindgen-0.24.5/tests/rust/cython_options.rs b/cbindgen-0.24.5/tests/rust/cython_options.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cython_options.rs
diff --git a/cbindgen-0.24.5/tests/rust/cython_options.toml b/cbindgen-0.24.5/tests/rust/cython_options.toml
new file mode 100644
index 0000000..319352c
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/cython_options.toml
@@ -0,0 +1,6 @@
+[cython]
+header = '"my_header.h"'
+
+[cython.cimports]
+"libc.stdint" = ["int8_t", "int16_t"]
+"libc.stddef" = ["*"]
diff --git a/cbindgen-0.24.5/tests/rust/decl_name_conflicting.rs b/cbindgen-0.24.5/tests/rust/decl_name_conflicting.rs
new file mode 100644
index 0000000..39e9658
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/decl_name_conflicting.rs
@@ -0,0 +1,14 @@
+mod uhoh {
+    enum BindingType { Buffer, NotBuffer }
+}
+
+#[repr(u32)]
+pub enum BindingType { Buffer = 0, NotBuffer = 1 }
+
+#[repr(C)]
+pub struct BindGroupLayoutEntry {
+    pub ty: BindingType, // This is the repr(u32) enum
+}
+
+#[no_mangle]
+pub extern "C" fn root(entry: BindGroupLayoutEntry) {}
diff --git a/cbindgen-0.24.5/tests/rust/derive_ostream.rs b/cbindgen-0.24.5/tests/rust/derive_ostream.rs
new file mode 100644
index 0000000..e7e33fa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/derive_ostream.rs
@@ -0,0 +1,59 @@
+/// cbindgen:derive-ostream
+#[repr(C)]
+pub struct A(i32);
+
+/// cbindgen:field-names=[x, y]
+/// cbindgen:derive-ostream
+#[repr(C)]
+pub struct B(i32, f32);
+
+/// cbindgen:derive-ostream
+#[repr(u32)]
+pub enum C {
+    X = 2,
+    Y,
+}
+
+/// cbindgen:derive-ostream
+#[repr(C)]
+pub struct D {
+    List: u8,
+    Of: usize,
+    Things: B,
+}
+
+/// cbindgen:derive-ostream
+#[repr(u8)]
+pub enum F {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz
+}
+
+/// cbindgen:derive-ostream
+#[repr(C, u8)]
+pub enum H {
+    Hello(i16),
+    There { x: u8, y: i16 },
+    Everyone
+}
+
+/// cbindgen:derive-ostream=false
+#[repr(C, u8)]
+pub enum I {
+    /// cbindgen:derive-ostream=true
+    ThereAgain { x: u8, y: i16 },
+    SomethingElse
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: A,
+    b: B,
+    c: C,
+    d: D,
+    f: F,
+    h: H,
+    i: I,
+) { }
+
diff --git a/cbindgen-0.24.5/tests/rust/destructor_and_copy_ctor.rs b/cbindgen-0.24.5/tests/rust/destructor_and_copy_ctor.rs
new file mode 100644
index 0000000..9c96145
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/destructor_and_copy_ctor.rs
@@ -0,0 +1,97 @@
+use std::ptr::NonNull;
+
+/// This will have a destructor manually implemented via variant_body, and
+/// similarly a Drop impl in Rust.
+#[repr(C)]
+pub struct OwnedSlice<T> {
+    len: usize,
+    ptr: NonNull<T>,
+}
+
+#[repr(u8)]
+pub enum FillRule { A, B }
+
+#[repr(C)]
+pub struct Polygon<LengthPercentage> {
+    pub fill: FillRule,
+    pub coordinates: OwnedSlice<LengthPercentage>,
+}
+
+#[repr(C, u8)]
+pub enum Foo<T> {
+    Bar,
+    Polygon1(Polygon<T>),
+    Slice1(OwnedSlice<T>),
+    Slice2(OwnedSlice<i32>),
+    Slice3 {
+        fill: FillRule,
+        coords: OwnedSlice<T>,
+    },
+    Slice4 {
+        fill: FillRule,
+        coords: OwnedSlice<i32>,
+    },
+}
+
+#[repr(u8)]
+pub enum Baz<T> {
+    Bar2,
+    Polygon21(Polygon<T>),
+    Slice21(OwnedSlice<T>),
+    Slice22(OwnedSlice<i32>),
+    Slice23 {
+        fill: FillRule,
+        coords: OwnedSlice<T>,
+    },
+    Slice24 {
+        fill: FillRule,
+        coords: OwnedSlice<i32>,
+    },
+}
+
+#[repr(u8)]
+pub enum Taz {
+    Bar3,
+    Taz1(i32),
+    Taz3(OwnedSlice<i32>),
+}
+
+/// cbindgen:derive-tagged-enum-destructor=false
+/// cbindgen:derive-tagged-enum-copy-constructor=false
+#[repr(u8)]
+pub enum Tazz {
+    Bar4,
+    Taz2(i32),
+}
+
+/// cbindgen:derive-tagged-enum-copy-assignment=false
+#[repr(u8)]
+pub enum Tazzz {
+    Bar5,
+    Taz5(i32),
+}
+
+#[repr(u8)]
+pub enum Tazzzz {
+    Taz6(i32),
+    Taz7(u32),
+}
+
+/// cbindgen:derive-eq=true
+/// cbindgen:derive-neq=true
+/// cbindgen:neq-attributes=NODISCARD
+/// cbindgen:eq-attributes=NODISCARD
+/// cbindgen:destructor-attributes=NOINLINE
+/// cbindgen:copy-constructor-attributes=NOINLINE
+/// cbindgen:copy-assignment-attributes=NOINLINE
+#[repr(u8)]
+pub enum Qux {
+    /// cbindgen:derive-eq=true
+    Qux1(i32),
+    /// cbindgen:derive-eq=true
+    Qux2(u32),
+}
+
+
+#[no_mangle]
+pub extern "C" fn root(a: &Foo<u32>, b: &Baz<i32>, c: &Taz, d: Tazz, e: &Tazzz, f: &Tazzzz, g: &Qux) {}
diff --git a/cbindgen-0.24.5/tests/rust/destructor_and_copy_ctor.toml b/cbindgen-0.24.5/tests/rust/destructor_and_copy_ctor.toml
new file mode 100644
index 0000000..a1d91e5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/destructor_and_copy_ctor.toml
@@ -0,0 +1,16 @@
+header = """
+#define NOINLINE __attribute__((noinline))
+#define NODISCARD [[nodiscard]]
+"""
+
+[enum]
+derive_tagged_enum_destructor = true
+derive_tagged_enum_copy_constructor = true
+derive_tagged_enum_copy_assignment = true
+derive_helper_methods = true
+private_default_tagged_enum_constructor = true
+
+[export.body]
+"OwnedSlice" = """
+  ~OwnedSlice() {}
+"""
diff --git a/cbindgen-0.24.5/tests/rust/display_list.rs b/cbindgen-0.24.5/tests/rust/display_list.rs
new file mode 100644
index 0000000..3b4a78a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/display_list.rs
@@ -0,0 +1,18 @@
+#[repr(u8)]
+pub enum DisplayItem {
+    Fill(Rect, Color),
+    Image { id: u32, bounds: Rect },
+    ClearScreen,
+}
+
+#[repr(C)]
+pub struct Rect { x: f32, y: f32, w: f32, h: f32 }
+
+#[repr(C)]
+pub struct Color { r: u8, g: u8, b: u8, a: u8 }
+
+#[no_mangle]
+pub extern "C" fn push_item(item: DisplayItem) -> bool { 
+    ::std::mem::drop(item);
+    true
+}
diff --git a/cbindgen-0.24.5/tests/rust/doclength_short.rs b/cbindgen-0.24.5/tests/rust/doclength_short.rs
new file mode 100644
index 0000000..363a245
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/doclength_short.rs
@@ -0,0 +1,16 @@
+/// The root of all evil.
+///
+/// But at least it contains some more documentation as someone would expect
+/// from a simple test case like this. Though, this shouldn't appear in the
+/// output.
+#[no_mangle]
+pub extern "C" fn root() {
+}
+
+/// A little above the root, and a lot more visible, with a run-on sentence
+/// to test going over the first line.
+///
+/// Still not here, though.
+#[no_mangle]
+pub extern "C" fn trunk() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/doclength_short.toml b/cbindgen-0.24.5/tests/rust/doclength_short.toml
new file mode 100644
index 0000000..30a7d79
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/doclength_short.toml
@@ -0,0 +1 @@
+documentation_length = "short"
diff --git a/cbindgen-0.24.5/tests/rust/docstyle_auto.rs b/cbindgen-0.24.5/tests/rust/docstyle_auto.rs
new file mode 100644
index 0000000..2b66147
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/docstyle_auto.rs
@@ -0,0 +1,4 @@
+/// The root of all evil.
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/docstyle_auto.toml b/cbindgen-0.24.5/tests/rust/docstyle_auto.toml
new file mode 100644
index 0000000..be9e72e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/docstyle_auto.toml
@@ -0,0 +1 @@
+documentation_style = "auto"
diff --git a/cbindgen-0.24.5/tests/rust/docstyle_c99.rs b/cbindgen-0.24.5/tests/rust/docstyle_c99.rs
new file mode 100644
index 0000000..2b66147
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/docstyle_c99.rs
@@ -0,0 +1,4 @@
+/// The root of all evil.
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/docstyle_c99.toml b/cbindgen-0.24.5/tests/rust/docstyle_c99.toml
new file mode 100644
index 0000000..c94138b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/docstyle_c99.toml
@@ -0,0 +1 @@
+documentation_style = "c99"
diff --git a/cbindgen-0.24.5/tests/rust/docstyle_doxy.rs b/cbindgen-0.24.5/tests/rust/docstyle_doxy.rs
new file mode 100644
index 0000000..2b66147
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/docstyle_doxy.rs
@@ -0,0 +1,4 @@
+/// The root of all evil.
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/docstyle_doxy.toml b/cbindgen-0.24.5/tests/rust/docstyle_doxy.toml
new file mode 100644
index 0000000..05e606a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/docstyle_doxy.toml
@@ -0,0 +1 @@
+documentation_style = "doxy"
diff --git a/cbindgen-0.24.5/tests/rust/documentation.rs b/cbindgen-0.24.5/tests/rust/documentation.rs
new file mode 100644
index 0000000..56da3c3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/documentation.rs
@@ -0,0 +1,21 @@
+/// The root of all evil.
+///
+/// But at least it contains some more documentation as someone would expect
+/// from a simple test case like this.
+///
+/// # Hint
+///
+/// Always ensure that everything is properly documented, even if you feel lazy.
+/// **Sometimes** it is also helpful to include some markdown formatting.
+///
+/// ////////////////////////////////////////////////////////////////////////////
+///
+/// Attention:
+///
+///    Rust is going to trim all leading `/` symbols. If you want to use them as a
+///    marker you need to add at least a single whitespace inbetween the tripple
+///    slash doc-comment marker and the rest.
+///
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/documentation_attr.rs b/cbindgen-0.24.5/tests/rust/documentation_attr.rs
new file mode 100644
index 0000000..d88ce80
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/documentation_attr.rs
@@ -0,0 +1,12 @@
+#[doc="With doc attr, each attr contribute to one line of document"]
+#[doc="like this one with a new line character at its end"]
+#[doc="and this one as well. So they are in the same paragraph"]
+#[doc=""]
+#[doc="Line ends with one new line\nshould not break"]
+#[doc=""]
+#[doc="Line ends with two spaces and a new line  \nshould break to next line"]
+#[doc=""]
+#[doc="Line ends with two new lines\n\nShould break to next paragraph"]
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/enum.rs b/cbindgen-0.24.5/tests/rust/enum.rs
new file mode 100644
index 0000000..19191ca
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/enum.rs
@@ -0,0 +1,166 @@
+enum Opaque {
+    Foo(i32),
+    Bar,
+}
+
+#[repr(u64)]
+enum A {
+    a1 = 0,
+    a2 = 2,
+    a3,
+    a4 = 5,
+}
+
+#[repr(u32)]
+enum B {
+    b1 = 0,
+    b2 = 2,
+    b3,
+    b4 = 5,
+}
+
+#[repr(u16)]
+enum C {
+    c1 = 0,
+    c2 = 2,
+    c3,
+    c4 = 5,
+}
+
+#[repr(u8)]
+enum D {
+    d1 = 0,
+    d2 = 2,
+    d3,
+    d4 = 5,
+}
+
+#[repr(usize)]
+enum E {
+    e1 = 0,
+    e2 = 2,
+    e3,
+    e4 = 5,
+}
+
+#[repr(isize)]
+enum F {
+    f1 = 0,
+    f2 = 2,
+    f3,
+    f4 = 5,
+}
+
+#[repr(u8)]
+enum G {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz,
+}
+
+/// cbindgen:prefix-with-name
+#[repr(C)]
+enum H {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz,
+}
+
+/// cbindgen:prefix-with-name
+#[repr(C, u8)]
+enum I {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz,
+}
+
+#[repr(C, u8, u16)]
+enum J {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz,
+}
+
+#[repr(C, u8, unknown_hint)]
+enum K {
+    Foo(i16),
+    Bar { x: u8, y: i16 },
+    Baz,
+}
+
+#[repr(C)]
+enum L {
+    l1,
+    l2,
+    l3,
+    l4,
+}
+
+#[repr(i8)]
+enum M {
+    m1 = -1,
+    m2 = 0,
+    m3 = 1,
+}
+
+/// cbindgen:enum-class=false
+#[repr(C)]
+enum N {
+    n1,
+    n2,
+    n3,
+    n4,
+}
+
+/// cbindgen:enum-class=false
+#[repr(i8)]
+enum O {
+    o1,
+    o2,
+    o3,
+    o4,
+}
+
+#[repr(C, u8)]
+enum P {
+    P0(u8),
+    P1(u8, u8, u8),
+}
+
+#[repr(C)]
+enum Q {
+    Ok(Box<u32>),
+    Err(u32),
+}
+
+/// cbindgen:rename-variant-name-fields=None
+#[repr(C)]
+enum R {
+    IRFoo(i16),
+    IRBar { x: u8, y: i16 },
+    IRBaz,
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    opaque: *mut Opaque,
+    a: A,
+    b: B,
+    c: C,
+    d: D,
+    e: E,
+    f: F,
+    g: G,
+    h: H,
+    i: I,
+    j: J,
+    k: K,
+    l: L,
+    m: M,
+    n: N,
+    o: O,
+    p: P,
+    q: Q,
+    r: R,
+) {
+}
diff --git a/cbindgen-0.24.5/tests/rust/enum.toml b/cbindgen-0.24.5/tests/rust/enum.toml
new file mode 100644
index 0000000..20073cf
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/enum.toml
@@ -0,0 +1,39 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+"""
+
+trailer = """
+#if 0
+''' '
+#endif
+
+#include <stddef.h>
+#include "testing-helpers.h"
+static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
+static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
+static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
+
+#if 0
+' '''
+#endif
+"""
+
+[export]
+exclude = [
+  "Box",
+]
+
+[export.rename]
+"I" = "ExI"
diff --git a/cbindgen-0.24.5/tests/rust/enum_discriminant.rs b/cbindgen-0.24.5/tests/rust/enum_discriminant.rs
new file mode 100644
index 0000000..79c270f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/enum_discriminant.rs
@@ -0,0 +1,15 @@
+pub const FOUR: i8 = 4;
+
+#[repr(i8)]
+enum E {
+    A = 1,
+    B = -1,
+    C = 1 + 2,
+    D = FOUR,
+    F = (5),
+    G = b'6' as i8,
+    H = false as i8,
+}
+
+#[no_mangle]
+pub extern "C" fn root(_: &E) {}
diff --git a/cbindgen-0.24.5/tests/rust/enum_discriminant.toml b/cbindgen-0.24.5/tests/rust/enum_discriminant.toml
new file mode 100644
index 0000000..24ebcb1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/enum_discriminant.toml
@@ -0,0 +1,2 @@
+[export.rename]
+"FOUR" = "FOURTY_FOUR"
diff --git a/cbindgen-0.24.5/tests/rust/enum_self.rs b/cbindgen-0.24.5/tests/rust/enum_self.rs
new file mode 100644
index 0000000..ffdc970
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/enum_self.rs
@@ -0,0 +1,15 @@
+#[repr(C)]
+pub struct Foo<T> {
+    something: *const i32,
+    phantom: std::marker::PhantomData<T>,
+}
+
+#[repr(u8)]
+pub enum Bar {
+    Min(Foo<Self>),
+    Max(Foo<Self>),
+    Other,
+}
+
+#[no_mangle]
+pub extern "C" fn root(b: Bar) {}
diff --git a/cbindgen-0.24.5/tests/rust/euclid.rs b/cbindgen-0.24.5/tests/rust/euclid.rs
new file mode 100644
index 0000000..d3c2940
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/euclid.rs
@@ -0,0 +1,81 @@
+struct UnknownUnit;
+struct LayoutUnit;
+
+#[repr(C)]
+struct TypedLength<T, Unit>(T, PhantomData<Unit>);
+
+#[repr(C)]
+struct TypedSideOffsets2D<T, U> {
+    top: T,
+    right: T,
+    bottom: T,
+    left: T,
+    _phantom: PhantomData<U>,
+}
+
+#[repr(C)]
+struct TypedSize2D<T, U> {
+    width: T,
+    height: T,
+    _phantom: PhantomData<U>,
+}
+
+#[repr(C)]
+struct TypedPoint2D<T, U> {
+    x: T,
+    y: T,
+    _phantom: PhantomData<U>,
+}
+
+#[repr(C)]
+struct TypedRect<T, U> {
+    origin: TypedPoint2D<T, U>,
+    size: TypedSize2D<T, U>,
+    _phantom: PhantomData<U>,
+}
+
+#[repr(C)]
+struct TypedTransform2D<T, Src, Dst> {
+    m11: T, m12: T,
+    m21: T, m22: T,
+    m31: T, m32: T,
+    _phantom: PhantomData<U>,
+}
+
+type Length<T> = TypedLength<T, UnknownUnit>;
+type SideOffsets2D<T> = TypedSideOffsets2D<T, UnknownUnit>;
+type Size2D<T> = TypedSize2D<T, UnknownUnit>;
+type Point2D<T> = TypedPoint2D<T, UnknownUnit>;
+type Rect<T> = TypedRect<T, UnknownUnit>;
+
+type LayoutLength = TypedLength<f32, LayoutUnit>;
+type LayoutSideOffsets2D = TypedSideOffsets2D<f32, LayoutUnit>;
+type LayoutSize2D = TypedSize2D<f32, LayoutUnit>;
+type LayoutPoint2D = TypedPoint2D<f32, LayoutUnit>;
+type LayoutRect = TypedRect<f32, LayoutUnit>;
+
+#[no_mangle]
+pub extern "C" fn root(
+    length_a: TypedLength<f32, UnknownUnit>,
+    length_b: TypedLength<f32, LayoutUnit>,
+    length_c: Length<f32>,
+    length_d: LayoutLength,
+    side_offsets_a: TypedSideOffsets2D<f32, UnknownUnit>,
+    side_offsets_b: TypedSideOffsets2D<f32, LayoutUnit>,
+    side_offsets_c: SideOffsets2D<f32>,
+    side_offsets_d: LayoutSideOffsets2D,
+    size_a: TypedSize2D<f32, UnknownUnit>,
+    size_b: TypedSize2D<f32, LayoutUnit>,
+    size_c: Size2D<f32>,
+    size_d: LayoutSize2D,
+    point_a: TypedPoint2D<f32, UnknownUnit>,
+    point_b: TypedPoint2D<f32, LayoutUnit>,
+    point_c: Point2D<f32>,
+    point_d: LayoutPoint2D,
+    rect_a: TypedRect<f32, UnknownUnit>,
+    rect_b: TypedRect<f32, LayoutUnit>,
+    rect_c: Rect<f32>,
+    rect_d: LayoutRect,
+    transform_a: TypedTransform2D<f32, UnknownUnit, LayoutUnit>,
+    transform_b: TypedTransform2D<f32, LayoutUnit, UnknownUnit>
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/exclude_generic_monomorph.rs b/cbindgen-0.24.5/tests/rust/exclude_generic_monomorph.rs
new file mode 100644
index 0000000..78fd197
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/exclude_generic_monomorph.rs
@@ -0,0 +1,10 @@
+#[repr(transparent)]
+pub struct Foo(NonZeroU64);
+
+#[repr(C)]
+pub struct Bar {
+  foo: Option<Foo>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(f: Bar) {}
diff --git a/cbindgen-0.24.5/tests/rust/exclude_generic_monomorph.toml b/cbindgen-0.24.5/tests/rust/exclude_generic_monomorph.toml
new file mode 100644
index 0000000..15711ae
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/exclude_generic_monomorph.toml
@@ -0,0 +1,24 @@
+language = "C"
+header = """
+#include <stdint.h>
+
+#if 0
+''' '
+#endif
+
+typedef uint64_t Option_Foo;
+
+#if 0
+' '''
+#endif
+
+#if 0
+from libc.stdint cimport uint64_t
+ctypedef uint64_t Option_Foo
+#endif
+"""
+
+[export]
+exclude = [
+  "Option_Foo",
+]
diff --git a/cbindgen-0.24.5/tests/rust/export_name.rs b/cbindgen-0.24.5/tests/rust/export_name.rs
new file mode 100644
index 0000000..5d17ee1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/export_name.rs
@@ -0,0 +1,4 @@
+#[export_name = "do_the_thing_with_export_name"]
+pub extern "C" fn do_the_thing() {
+  println!("doing the thing!");
+}
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/rust/extern.rs b/cbindgen-0.24.5/tests/rust/extern.rs
new file mode 100644
index 0000000..3bd83d1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/extern.rs
@@ -0,0 +1,11 @@
+#[repr(C)]
+struct Normal {
+    x: i32,
+    y: f32,
+}
+
+extern "C" {
+    fn foo() -> i32;
+
+    fn bar(a: Normal);
+}
diff --git a/cbindgen-0.24.5/tests/rust/extern_2.rs b/cbindgen-0.24.5/tests/rust/extern_2.rs
new file mode 100644
index 0000000..92a9c18
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/extern_2.rs
@@ -0,0 +1,11 @@
+#[no_mangle]
+pub extern "C" fn first()
+{ }
+
+#[no_mangle]
+pub extern fn second()
+{ }
+
+#[no_mangle]
+pub fn third()
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/fns.rs b/cbindgen-0.24.5/tests/rust/fns.rs
new file mode 100644
index 0000000..39c5622
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/fns.rs
@@ -0,0 +1,16 @@
+#[repr(C)]
+pub struct Fns {
+  noArgs: fn(),
+  anonymousArg: fn(i32),
+  returnsNumber: fn() -> i32,
+  namedArgs: fn(first: i32, snd: i16) -> i8,
+  namedArgsWildcards: fn(_: i32, named: i16, _: i64) -> i8,
+}
+
+#[no_mangle]
+pub extern "C" fn root(_fns: Fns) {}
+
+#[no_mangle]
+pub extern "C" fn no_return() -> ! {
+    loop {}
+}
diff --git a/cbindgen-0.24.5/tests/rust/forward_declaration.rs b/cbindgen-0.24.5/tests/rust/forward_declaration.rs
new file mode 100644
index 0000000..e97b63e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/forward_declaration.rs
@@ -0,0 +1,21 @@
+#[repr(C)]
+struct TypeInfo {
+    data: TypeData,
+}
+
+#[repr(C)]
+enum TypeData {
+    Primitive,
+    Struct(StructInfo),
+}
+
+#[repr(C)]
+struct StructInfo {
+    fields: *const *const TypeInfo, // requires forward declaration
+    num_fields: usize,
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    x: TypeInfo,
+) {}
diff --git a/cbindgen-0.24.5/tests/rust/forward_declaration.toml b/cbindgen-0.24.5/tests/rust/forward_declaration.toml
new file mode 100644
index 0000000..4f1d1ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/forward_declaration.toml
@@ -0,0 +1,23 @@
+header = """
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+/* ANONYMOUS STRUCTS DO NOT SUPPORT FORWARD DECLARATIONS!
+#endif
+#if 0
+' '''
+#endif
+"""
+
+trailer = """
+#if 0
+''' '
+#endif
+#if defined(CBINDGEN_STYLE_TYPE)
+*/
+#endif
+#if 0
+' '''
+#endif
+"""
diff --git a/cbindgen-0.24.5/tests/rust/function_args.rs b/cbindgen-0.24.5/tests/rust/function_args.rs
new file mode 100644
index 0000000..52a6a23
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_args.rs
@@ -0,0 +1,25 @@
+#[no_mangle]
+pub unsafe extern fn array_print(a: &[u64]) {
+    eprintln!("{:?}", a);
+}
+
+#[no_mangle]
+pub unsafe extern fn array_test(a: [u64; 3]) {
+    array_print(&a);
+}
+
+#[no_mangle]
+pub unsafe extern fn unnamed(_: *const u64) {
+}
+
+#[no_mangle]
+pub unsafe extern fn pointer_test(a: *const u64) {
+    let a = std::slice::from_raw_parts(a, 3);
+    array_print(a);
+}
+
+#[no_mangle]
+pub unsafe extern fn print_from_rust() {
+    let a = [0, 1, 2];
+    array_print(&a);
+}
diff --git a/cbindgen-0.24.5/tests/rust/function_noreturn.rs b/cbindgen-0.24.5/tests/rust/function_noreturn.rs
new file mode 100644
index 0000000..d7777ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_noreturn.rs
@@ -0,0 +1,14 @@
+#[no_mangle]
+pub extern "C" fn loop_forever() -> ! {
+    loop {}
+}
+
+#[no_mangle]
+pub extern "C" fn normal_return(arg: Example, other: extern "C" fn(u8) -> !) -> u8 {
+    0
+}
+
+#[repr(C)]
+pub struct Example {
+    pub f: extern "C" fn(usize, usize) -> !,
+}
diff --git a/cbindgen-0.24.5/tests/rust/function_noreturn.toml b/cbindgen-0.24.5/tests/rust/function_noreturn.toml
new file mode 100644
index 0000000..33e88c2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_noreturn.toml
@@ -0,0 +1,12 @@
+after_includes = """
+#ifndef NO_RETURN_ATTR
+  #ifdef __GNUC__
+    #define NO_RETURN_ATTR __attribute__ ((noreturn))
+  #else // __GNUC__
+    #define NO_RETURN_ATTR
+  #endif // __GNUC__
+#endif // NO_RETURN_ATTR
+"""
+
+[fn]
+no_return = "NO_RETURN_ATTR"
diff --git a/cbindgen-0.24.5/tests/rust/function_ptr.rs b/cbindgen-0.24.5/tests/rust/function_ptr.rs
new file mode 100644
index 0000000..59adb52
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_ptr.rs
@@ -0,0 +1,6 @@
+pub type MyCallback = Option<unsafe extern "C" fn(a: usize, b: usize)>;
+
+pub type MyOtherCallback = Option<unsafe extern "C" fn(a: usize, lot: usize, of: usize, args: usize, and_then_some: usize)>;
+
+#[no_mangle]
+pub extern "C" fn my_function(a: MyCallback, b: MyOtherCallback) {}
diff --git a/cbindgen-0.24.5/tests/rust/function_sort_name.rs b/cbindgen-0.24.5/tests/rust/function_sort_name.rs
new file mode 100644
index 0000000..ecd23c1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_sort_name.rs
@@ -0,0 +1,15 @@
+#[no_mangle]
+pub extern "C" fn C()
+{ }
+
+#[no_mangle]
+pub extern "C" fn B()
+{ }
+
+#[no_mangle]
+pub extern "C" fn D()
+{ }
+
+#[no_mangle]
+pub extern "C" fn A()
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/function_sort_name.toml b/cbindgen-0.24.5/tests/rust/function_sort_name.toml
new file mode 100644
index 0000000..8607792
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_sort_name.toml
@@ -0,0 +1,2 @@
+[fn]
+sort_by = "Name"
diff --git a/cbindgen-0.24.5/tests/rust/function_sort_none.rs b/cbindgen-0.24.5/tests/rust/function_sort_none.rs
new file mode 100644
index 0000000..ecd23c1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/function_sort_none.rs
@@ -0,0 +1,15 @@
+#[no_mangle]
+pub extern "C" fn C()
+{ }
+
+#[no_mangle]
+pub extern "C" fn B()
+{ }
+
+#[no_mangle]
+pub extern "C" fn D()
+{ }
+
+#[no_mangle]
+pub extern "C" fn A()
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/generic_pointer.rs b/cbindgen-0.24.5/tests/rust/generic_pointer.rs
new file mode 100644
index 0000000..1167c76
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/generic_pointer.rs
@@ -0,0 +1,11 @@
+#[repr(C)]
+pub struct Foo<T> {
+    a: T,
+}
+
+pub type Boo = Foo<*mut u8>;
+
+#[no_mangle]
+pub extern "C" fn root(
+    x: Boo,
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/global_attr.rs b/cbindgen-0.24.5/tests/rust/global_attr.rs
new file mode 100644
index 0000000..15afd03
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/global_attr.rs
@@ -0,0 +1 @@
+#![allow(unused_variables)]
diff --git a/cbindgen-0.24.5/tests/rust/global_variable.rs b/cbindgen-0.24.5/tests/rust/global_variable.rs
new file mode 100644
index 0000000..5fb8572
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/global_variable.rs
@@ -0,0 +1,5 @@
+#[no_mangle]
+pub static mut MUT_GLOBAL_ARRAY: [c_char; 128] = [0; 128];
+
+#[no_mangle]
+pub static CONST_GLOBAL_ARRAY: [c_char; 128] = [0; 128];
diff --git a/cbindgen-0.24.5/tests/rust/ignore.rs b/cbindgen-0.24.5/tests/rust/ignore.rs
new file mode 100644
index 0000000..54ade32
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/ignore.rs
@@ -0,0 +1,12 @@
+/// cbindgen:ignore
+#[no_mangle]
+pub extern "C" fn root() {}
+
+/// cbindgen:ignore
+///
+/// Something else.
+#[no_mangle]
+pub extern "C" fn another_root() {}
+
+#[no_mangle]
+pub extern "C" fn no_ignore_root() {}
diff --git a/cbindgen-0.24.5/tests/rust/include.rs b/cbindgen-0.24.5/tests/rust/include.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include.rs
diff --git a/cbindgen-0.24.5/tests/rust/include.toml b/cbindgen-0.24.5/tests/rust/include.toml
new file mode 100644
index 0000000..7d4e0d4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include.toml
@@ -0,0 +1 @@
+sys_includes = ["math.h"]
diff --git a/cbindgen-0.24.5/tests/rust/include_guard.rs b/cbindgen-0.24.5/tests/rust/include_guard.rs
new file mode 100644
index 0000000..03de69f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include_guard.rs
@@ -0,0 +1,3 @@
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/include_guard.toml b/cbindgen-0.24.5/tests/rust/include_guard.toml
new file mode 100644
index 0000000..e14abb3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include_guard.toml
@@ -0,0 +1,2 @@
+include_guard = "INCLUDE_GUARD_H"
+no_includes = true
diff --git a/cbindgen-0.24.5/tests/rust/include_item.rs b/cbindgen-0.24.5/tests/rust/include_item.rs
new file mode 100644
index 0000000..9f07550
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include_item.rs
@@ -0,0 +1,10 @@
+#[repr(C)]
+struct A {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+struct B {
+    data: A,
+}
diff --git a/cbindgen-0.24.5/tests/rust/include_item.toml b/cbindgen-0.24.5/tests/rust/include_item.toml
new file mode 100644
index 0000000..1dc6f25
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include_item.toml
@@ -0,0 +1,2 @@
+[export]
+include = ["B"]
diff --git a/cbindgen-0.24.5/tests/rust/include_specific.rs b/cbindgen-0.24.5/tests/rust/include_specific.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include_specific.rs
diff --git a/cbindgen-0.24.5/tests/rust/include_specific.toml b/cbindgen-0.24.5/tests/rust/include_specific.toml
new file mode 100644
index 0000000..488ca92
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/include_specific.toml
@@ -0,0 +1,2 @@
+sys_includes = ["math.h"]
+no_includes = true
diff --git a/cbindgen-0.24.5/tests/rust/infinite_recursion_typedef_monomorph.rs b/cbindgen-0.24.5/tests/rust/infinite_recursion_typedef_monomorph.rs
new file mode 100644
index 0000000..5c25e73
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/infinite_recursion_typedef_monomorph.rs
@@ -0,0 +1,2 @@
+pub type TryVec<T> = fallible_collections::TryVec<T>;
+pub type TryString = fallible_collections::TryVec<u8>;
diff --git a/cbindgen-0.24.5/tests/rust/inner_mod.rs b/cbindgen-0.24.5/tests/rust/inner_mod.rs
new file mode 100644
index 0000000..89411ad
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/inner_mod.rs
@@ -0,0 +1,10 @@
+mod foo {
+    #[repr(C)]
+    struct Foo {
+        x: f32,
+    }
+}
+
+#[no_mangle]
+pub extern "C" fn root(a: foo::Foo)
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/item_types.rs b/cbindgen-0.24.5/tests/rust/item_types.rs
new file mode 100644
index 0000000..b54b0ef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/item_types.rs
@@ -0,0 +1,12 @@
+
+pub const MY_CONST: u8 = 4;
+
+#[no_mangle]
+pub extern "C" fn ExternFunction() {
+}
+
+#[repr(u8)]
+pub enum OnlyThisShouldBeGenerated {
+    Foo,
+    Bar,
+}
diff --git a/cbindgen-0.24.5/tests/rust/item_types.toml b/cbindgen-0.24.5/tests/rust/item_types.toml
new file mode 100644
index 0000000..f997f33
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/item_types.toml
@@ -0,0 +1,3 @@
+[export]
+item_types = ["enums"]
+include = ["OnlyThisShouldBeGenerated"]
diff --git a/cbindgen-0.24.5/tests/rust/item_types_renamed.rs b/cbindgen-0.24.5/tests/rust/item_types_renamed.rs
new file mode 100644
index 0000000..b54b0ef
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/item_types_renamed.rs
@@ -0,0 +1,12 @@
+
+pub const MY_CONST: u8 = 4;
+
+#[no_mangle]
+pub extern "C" fn ExternFunction() {
+}
+
+#[repr(u8)]
+pub enum OnlyThisShouldBeGenerated {
+    Foo,
+    Bar,
+}
diff --git a/cbindgen-0.24.5/tests/rust/item_types_renamed.toml b/cbindgen-0.24.5/tests/rust/item_types_renamed.toml
new file mode 100644
index 0000000..4680ee8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/item_types_renamed.toml
@@ -0,0 +1,4 @@
+[export]
+item_types = ["enums"]
+include = ["OnlyThisShouldBeGenerated"]
+prefix = "Style"
diff --git a/cbindgen-0.24.5/tests/rust/layout.rs b/cbindgen-0.24.5/tests/rust/layout.rs
new file mode 100644
index 0000000..b15c675
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/layout.rs
@@ -0,0 +1,108 @@
+#[repr(align(1), C)]
+pub struct Align1Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(2), C)]
+pub struct Align2Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(4), C)]
+pub struct Align4Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(8), C)]
+pub struct Align8Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(32), C)]
+pub struct Align32Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(packed, C)]
+pub struct PackedStruct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(1), C)]
+pub union Align1Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+#[repr(align(4), C)]
+pub union Align4Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+#[repr(align(16), C)]
+pub union Align16Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+#[repr(packed, C)]
+pub union PackedUnion {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+// #[repr(packed(n), C)] structs are currently unsupported.
+#[repr(packed(4), C)]
+pub struct UnsupportedPacked4Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// #[repr(packed(n), C)] unions are currently unsupported.
+#[repr(packed(4), C)]
+pub union UnsupportedPacked4Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+// #[repr(align(n), C)] enums are currently unsupported.
+#[repr(align(4), C)]
+pub enum UnsupportedAlign4Enum {
+    Variant1,
+    Variant2,
+}
+
+// Non-repr(C) structs aren't translated.
+#[repr(align(4))]
+pub struct RustAlign4Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Non-repr(C) structs aren't translated.
+#[repr(packed)]
+pub struct RustPackedStruct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Non-repr(C) unions aren't translated.
+#[repr(align(4))]
+pub struct RustAlign4Union {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Non-repr(C) unions aren't translated.
+#[repr(packed)]
+pub struct RustPackedUnion {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
diff --git a/cbindgen-0.24.5/tests/rust/layout.toml b/cbindgen-0.24.5/tests/rust/layout.toml
new file mode 100644
index 0000000..a1316dc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/layout.toml
@@ -0,0 +1,29 @@
+header = """
+#define CBINDGEN_PACKED     __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n) __attribute__ ((aligned(n)))
+"""
+
+[layout]
+packed = "CBINDGEN_PACKED"
+aligned_n = "CBINDGEN_ALIGNED"
+
+[export]
+include = [
+	"Align1Struct",
+	"Align2Struct",
+	"Align4Struct",
+	"Align8Struct",
+	"Align32Struct",
+	"PackedStruct",
+	"Align1Union",
+	"Align4Union",
+	"Align16Union",
+	"PackedUnion",
+	"UnsupportedPacked4Struct",
+	"UnsupportedPacked4Union",
+	"UnsupportedAlign4Enum",
+	"RustAlign4Struct",
+	"RustPackedStruct",
+	"RustAlign4Union",
+	"RustPackedUnion",
+]
diff --git a/cbindgen-0.24.5/tests/rust/layout_aligned_opaque.rs b/cbindgen-0.24.5/tests/rust/layout_aligned_opaque.rs
new file mode 100644
index 0000000..c499124
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/layout_aligned_opaque.rs
@@ -0,0 +1,67 @@
+#[repr(packed, C)]
+pub struct PackedStruct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(packed, C)]
+pub union PackedUnion {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(1), C)]
+pub union OpaqueAlign1Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(4), C)]
+pub union OpaqueAlign4Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(16), C)]
+pub union OpaqueAlign16Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(1), C)]
+pub struct OpaqueAlign1Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(2), C)]
+pub struct OpaqueAlign2Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(4), C)]
+pub struct OpaqueAlign4Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(8), C)]
+pub struct OpaqueAlign8Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Opaque because aligned_n is not defined.
+#[repr(align(32), C)]
+pub struct OpaqueAlign32Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
diff --git a/cbindgen-0.24.5/tests/rust/layout_aligned_opaque.toml b/cbindgen-0.24.5/tests/rust/layout_aligned_opaque.toml
new file mode 100644
index 0000000..1d416f1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/layout_aligned_opaque.toml
@@ -0,0 +1,22 @@
+header = """
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+"""
+
+[layout]
+# We do not define aligned_n.
+packed = "CBINDGEN_PACKED"
+
+[export]
+include = [
+	"PackedStruct",
+	"PackedUnion",
+	"OpaqueAlign1Union",
+	"OpaqueAlign4Union",
+	"OpaqueAlign16Union",
+	"OpaqueAlign1Struct",
+	"OpaqueAlign2Struct",
+	"OpaqueAlign4Struct",
+	"OpaqueAlign8Struct",
+	"OpaqueAlign32Struct",
+]
diff --git a/cbindgen-0.24.5/tests/rust/layout_packed_opaque.rs b/cbindgen-0.24.5/tests/rust/layout_packed_opaque.rs
new file mode 100644
index 0000000..d1e31c6
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/layout_packed_opaque.rs
@@ -0,0 +1,61 @@
+#[repr(align(1), C)]
+pub union Align1Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+#[repr(align(4), C)]
+pub union Align4Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+#[repr(align(16), C)]
+pub union Align16Union {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
+
+#[repr(align(1), C)]
+pub struct Align1Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(2), C)]
+pub struct Align2Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(4), C)]
+pub struct Align4Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(8), C)]
+pub struct Align8Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+#[repr(align(32), C)]
+pub struct Align32Struct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Opaque because packed is not defined.
+#[repr(packed, C)]
+pub struct OpaquePackedStruct {
+    pub arg1: usize,
+    pub arg2: *mut u8,
+}
+
+// Opaque because packed is not defined.
+#[repr(packed, C)]
+pub union OpaquePackedUnion {
+    pub variant1: usize,
+    pub variant2: *mut u8,
+}
diff --git a/cbindgen-0.24.5/tests/rust/layout_packed_opaque.toml b/cbindgen-0.24.5/tests/rust/layout_packed_opaque.toml
new file mode 100644
index 0000000..b726004
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/layout_packed_opaque.toml
@@ -0,0 +1,22 @@
+header = """
+#define CBINDGEN_PACKED        __attribute__ ((packed))
+#define CBINDGEN_ALIGNED(n)    __attribute__ ((aligned(n)))
+"""
+
+[layout]
+# We do not define packed.
+aligned_n = "CBINDGEN_ALIGNED"
+
+[export]
+include = [
+	"Align1Union",
+	"Align4Union",
+	"Align16Union",
+	"Align1Struct",
+	"Align2Struct",
+	"Align4Struct",
+	"Align8Struct",
+	"Align32Struct",
+	"OpaquePackedStruct",
+	"OpaquePackedUnion",
+]
diff --git a/cbindgen-0.24.5/tests/rust/lifetime_arg.rs b/cbindgen-0.24.5/tests/rust/lifetime_arg.rs
new file mode 100644
index 0000000..b80fde2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/lifetime_arg.rs
@@ -0,0 +1,14 @@
+#[repr(C)]
+struct A<'a> {
+    data: &'a i32
+}
+
+#[repr(C)]
+enum E<'a> {
+    V,
+    U(&'a u8),
+}
+
+#[no_mangle]
+pub extern "C" fn root<'a>(_a: A<'a>, _e: E<'a>)
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/linestyle_cr.rs b/cbindgen-0.24.5/tests/rust/linestyle_cr.rs
new file mode 100644
index 0000000..49a317b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/linestyle_cr.rs
@@ -0,0 +1,8 @@
+#[repr(C)]
+struct Dummy {
+    x: i32,
+    y: f32,
+}
+
+#[no_mangle]
+pub extern "C" fn root(d: Dummy) {}
diff --git a/cbindgen-0.24.5/tests/rust/linestyle_cr.toml b/cbindgen-0.24.5/tests/rust/linestyle_cr.toml
new file mode 100644
index 0000000..43a1517
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/linestyle_cr.toml
@@ -0,0 +1 @@
+line_endings = "CR"
diff --git a/cbindgen-0.24.5/tests/rust/linestyle_crlf.rs b/cbindgen-0.24.5/tests/rust/linestyle_crlf.rs
new file mode 100644
index 0000000..49a317b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/linestyle_crlf.rs
@@ -0,0 +1,8 @@
+#[repr(C)]
+struct Dummy {
+    x: i32,
+    y: f32,
+}
+
+#[no_mangle]
+pub extern "C" fn root(d: Dummy) {}
diff --git a/cbindgen-0.24.5/tests/rust/linestyle_crlf.toml b/cbindgen-0.24.5/tests/rust/linestyle_crlf.toml
new file mode 100644
index 0000000..c0ae218
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/linestyle_crlf.toml
@@ -0,0 +1 @@
+line_endings = "CRLF"
diff --git a/cbindgen-0.24.5/tests/rust/linestyle_lf.rs b/cbindgen-0.24.5/tests/rust/linestyle_lf.rs
new file mode 100644
index 0000000..49a317b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/linestyle_lf.rs
@@ -0,0 +1,8 @@
+#[repr(C)]
+struct Dummy {
+    x: i32,
+    y: f32,
+}
+
+#[no_mangle]
+pub extern "C" fn root(d: Dummy) {}
diff --git a/cbindgen-0.24.5/tests/rust/linestyle_lf.toml b/cbindgen-0.24.5/tests/rust/linestyle_lf.toml
new file mode 100644
index 0000000..446fd30
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/linestyle_lf.toml
@@ -0,0 +1 @@
+line_endings = "LF"
diff --git a/cbindgen-0.24.5/tests/rust/mangle.rs b/cbindgen-0.24.5/tests/rust/mangle.rs
new file mode 100644
index 0000000..1ac7e13
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/mangle.rs
@@ -0,0 +1,19 @@
+#[repr(C)]
+pub struct Foo<T> {
+    a: T,
+}
+
+pub type Boo = Foo<u8>;
+
+/// cbindgen:prefix-with-name=true
+#[repr(C)]
+pub enum Bar {
+    Some,
+    Thing,
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    x: Boo,
+    y: Bar,
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/mangle.toml b/cbindgen-0.24.5/tests/rust/mangle.toml
new file mode 100644
index 0000000..a5d6b65
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/mangle.toml
@@ -0,0 +1,3 @@
+[export.mangle]
+remove_underscores = true
+rename_types = "PascalCase"
diff --git a/cbindgen-0.24.5/tests/rust/manuallydrop.rs b/cbindgen-0.24.5/tests/rust/manuallydrop.rs
new file mode 100644
index 0000000..fea2537
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/manuallydrop.rs
@@ -0,0 +1,22 @@
+#[repr(C)]
+pub struct Point {
+    x: i32,
+    y: i32,
+}
+
+#[repr(C)]
+pub struct MyStruct {
+    point: std::mem::ManuallyDrop<Point>,
+}
+
+pub struct NotReprC<T> {
+    inner: T,
+}
+
+pub type Foo = NotReprC<std::mem::ManuallyDrop<Point>>;
+
+#[no_mangle]
+pub extern "C" fn root(a: &Foo, with_manual_drop: &MyStruct) {}
+
+#[no_mangle]
+pub extern "C" fn take(with_manual_drop: std::mem::ManuallyDrop<Point>) {}
diff --git a/cbindgen-0.24.5/tests/rust/manuallydrop.toml b/cbindgen-0.24.5/tests/rust/manuallydrop.toml
new file mode 100644
index 0000000..7ffee9a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/manuallydrop.toml
@@ -0,0 +1,18 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using ManuallyDrop = T;
+#endif
+
+#if 0
+' '''
+#endif
+"""
+[export]
+exclude = [
+  "ManuallyDrop",
+]
diff --git a/cbindgen-0.24.5/tests/rust/maybeuninit.rs b/cbindgen-0.24.5/tests/rust/maybeuninit.rs
new file mode 100644
index 0000000..8073167
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/maybeuninit.rs
@@ -0,0 +1,13 @@
+#[repr(C)]
+pub struct MyStruct<'a> {
+    number: std::mem::MaybeUninit<&'a i32>,
+}
+
+pub struct NotReprC<T> {
+    inner: T,
+}
+
+pub type Foo<'a> = NotReprC<std::mem::MaybeUninit<&'a i32>>;
+
+#[no_mangle]
+pub extern "C" fn root<'a, 'b>(a: &'a Foo, with_maybe_uninit: &'b MyStruct) {}
diff --git a/cbindgen-0.24.5/tests/rust/maybeuninit.toml b/cbindgen-0.24.5/tests/rust/maybeuninit.toml
new file mode 100644
index 0000000..ba671fa
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/maybeuninit.toml
@@ -0,0 +1,18 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using MaybeUninit = T;
+#endif
+
+#if 0
+' '''
+#endif
+"""
+[export]
+exclude = [
+  "MaybeUninit",
+]
diff --git a/cbindgen-0.24.5/tests/rust/monomorph_1.rs b/cbindgen-0.24.5/tests/rust/monomorph_1.rs
new file mode 100644
index 0000000..a75cc23
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/monomorph_1.rs
@@ -0,0 +1,28 @@
+#[repr(C)]
+struct Foo<T> {
+    data: *const T
+}
+
+struct Bar<T> {
+    data: *const T
+}
+
+#[repr(C)]
+struct Tuple<T, E> {
+    a: *const T,
+    b: *const E,
+}
+
+type Indirection<T> = Tuple<T, f32>;
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: Foo<i32>,
+    b: Foo<f32>,
+    c: Bar<f32>,
+    d: Foo<Bar<f32>>,
+    e: Bar<Foo<f32>>,
+    f: Bar<Bar<f32>>,
+    g: Tuple<Foo<f32>, f32>,
+    h: Indirection<f32>
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/monomorph_2.rs b/cbindgen-0.24.5/tests/rust/monomorph_2.rs
new file mode 100644
index 0000000..f81ea5b
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/monomorph_2.rs
@@ -0,0 +1,15 @@
+#[repr(C)]
+struct List<T> {
+     members: *mut T,
+     count: usize
+}
+
+struct A;
+
+struct B;
+
+#[no_mangle]
+pub extern "C" fn foo(a: List<A>) { }
+
+#[no_mangle]
+pub extern "C" fn bar(b: List<B>) { }
diff --git a/cbindgen-0.24.5/tests/rust/monomorph_3.rs b/cbindgen-0.24.5/tests/rust/monomorph_3.rs
new file mode 100644
index 0000000..b1d69e4
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/monomorph_3.rs
@@ -0,0 +1,28 @@
+#[repr(C)]
+union Foo<T> {
+    data: *const T
+}
+
+union Bar<T> {
+    data: *const T
+}
+
+#[repr(C)]
+union Tuple<T, E> {
+    a: *const T,
+    b: *const E,
+}
+
+type Indirection<T> = Tuple<T, f32>;
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: Foo<i32>,
+    b: Foo<f32>,
+    c: Bar<f32>,
+    d: Foo<Bar<f32>>,
+    e: Bar<Foo<f32>>,
+    f: Bar<Bar<f32>>,
+    g: Tuple<Foo<f32>, f32>,
+    h: Indirection<f32>
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/must_use.rs b/cbindgen-0.24.5/tests/rust/must_use.rs
new file mode 100644
index 0000000..6b2034f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/must_use.rs
@@ -0,0 +1,18 @@
+
+#[repr(C)]
+#[must_use]
+pub struct OwnedPtr<T> {
+    ptr: *mut T,
+}
+
+#[repr(C, u8)]
+#[must_use]
+pub enum MaybeOwnedPtr<T> {
+    Owned(*mut T),
+    None,
+}
+
+#[no_mangle]
+#[must_use]
+pub extern "C" fn maybe_consume(input: OwnedPtr<i32>) -> MaybeOwnedPtr<i32> {
+}
diff --git a/cbindgen-0.24.5/tests/rust/must_use.toml b/cbindgen-0.24.5/tests/rust/must_use.toml
new file mode 100644
index 0000000..939df10
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/must_use.toml
@@ -0,0 +1,14 @@
+header = """
+#define MUST_USE_FUNC __attribute__((warn_unused_result))
+#define MUST_USE_STRUCT __attribute__((warn_unused))
+#define MUST_USE_ENUM /* nothing */
+"""
+
+[fn]
+must_use = "MUST_USE_FUNC"
+
+[struct]
+must_use = "MUST_USE_STRUCT"
+
+[enum]
+must_use = "MUST_USE_ENUM"
diff --git a/cbindgen-0.24.5/tests/rust/namespace_constant.rs b/cbindgen-0.24.5/tests/rust/namespace_constant.rs
new file mode 100644
index 0000000..01a8450
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/namespace_constant.rs
@@ -0,0 +1,11 @@
+pub const FOO: i32 = 10;
+pub const BAR: &'static str = "hello world";
+pub const ZOM: f32 = 3.14;
+
+#[repr(C)]
+struct Foo {
+    x: [i32; FOO],
+}
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo) { }
diff --git a/cbindgen-0.24.5/tests/rust/namespace_constant.toml b/cbindgen-0.24.5/tests/rust/namespace_constant.toml
new file mode 100644
index 0000000..1b9d94e
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/namespace_constant.toml
@@ -0,0 +1 @@
+namespace = "constants"
diff --git a/cbindgen-0.24.5/tests/rust/namespaces_constant.rs b/cbindgen-0.24.5/tests/rust/namespaces_constant.rs
new file mode 100644
index 0000000..01a8450
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/namespaces_constant.rs
@@ -0,0 +1,11 @@
+pub const FOO: i32 = 10;
+pub const BAR: &'static str = "hello world";
+pub const ZOM: f32 = 3.14;
+
+#[repr(C)]
+struct Foo {
+    x: [i32; FOO],
+}
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo) { }
diff --git a/cbindgen-0.24.5/tests/rust/namespaces_constant.toml b/cbindgen-0.24.5/tests/rust/namespaces_constant.toml
new file mode 100644
index 0000000..7601ad3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/namespaces_constant.toml
@@ -0,0 +1 @@
+namespaces = ["constants", "test"]
diff --git a/cbindgen-0.24.5/tests/rust/nested_import.rs b/cbindgen-0.24.5/tests/rust/nested_import.rs
new file mode 100644
index 0000000..e080d88
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/nested_import.rs
@@ -0,0 +1 @@
+use std::{result, marker::PhantomData};
diff --git a/cbindgen-0.24.5/tests/rust/no_includes.rs b/cbindgen-0.24.5/tests/rust/no_includes.rs
new file mode 100644
index 0000000..03de69f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/no_includes.rs
@@ -0,0 +1,3 @@
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/no_includes.toml b/cbindgen-0.24.5/tests/rust/no_includes.toml
new file mode 100644
index 0000000..eed30dc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/no_includes.toml
@@ -0,0 +1 @@
+no_includes = true
diff --git a/cbindgen-0.24.5/tests/rust/nonnull.rs b/cbindgen-0.24.5/tests/rust/nonnull.rs
new file mode 100644
index 0000000..5e07c35
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/nonnull.rs
@@ -0,0 +1,19 @@
+use std::ptr::NonNull;
+
+struct Opaque;
+
+#[repr(C)]
+pub struct Foo<T> {
+    a: NonNull<f32>,
+    b: NonNull<T>,
+    c: NonNull<Opaque>,
+    d: NonNull<NonNull<T>>,
+    e: NonNull<NonNull<f32>>,
+    f: NonNull<NonNull<Opaque>>,
+    g: Option<NonNull<T>>,
+    h: Option<NonNull<i32>>,
+    i: Option<NonNull<NonNull<i32>>>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(arg: NonNull<i32>, foo: *mut Foo<u64>, d: NonNull<NonNull<Opaque>>) { }
diff --git a/cbindgen-0.24.5/tests/rust/nonnull_attribute.rs b/cbindgen-0.24.5/tests/rust/nonnull_attribute.rs
new file mode 100644
index 0000000..5089ba9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/nonnull_attribute.rs
@@ -0,0 +1,55 @@
+use std::ptr::NonNull;
+
+struct Opaque;
+
+#[repr(C)]
+pub struct Pointers<T> {
+    a: NonNull<f32>,
+    b: NonNull<T>,
+    c: NonNull<Opaque>,
+    d: NonNull<NonNull<T>>,
+    e: NonNull<NonNull<f32>>,
+    f: NonNull<NonNull<Opaque>>,
+    g: Option<NonNull<T>>,
+    h: Option<NonNull<i32>>,
+    i: Option<NonNull<NonNull<i32>>>,
+    j: *const T,
+    k: *mut T,
+}
+
+#[repr(C)]
+pub struct References<'a> {
+    a: &'a Opaque,
+    b: &'a mut Opaque,
+    c: Option<&'a Opaque>,
+    d: Option<&'a mut Opaque>,
+}
+
+#[no_mangle]
+pub extern "C" fn value_arg(arg: References<'static>) {}
+
+#[no_mangle]
+pub extern "C" fn mutltiple_args(
+    arg: NonNull<i32>,
+    foo: *mut Pointers<u64>,
+    d: NonNull<NonNull<Opaque>>,
+) {
+}
+
+#[no_mangle]
+pub extern "C" fn ref_arg(arg: &Pointers<u64>) {}
+
+#[no_mangle]
+pub extern "C" fn mut_ref_arg(arg: &mut Pointers<u64>) {}
+
+#[no_mangle]
+pub extern "C" fn optional_ref_arg(arg: Option<&Pointers<u64>>) {}
+
+#[no_mangle]
+pub extern "C" fn optional_mut_ref_arg(arg: Option<&mut Pointers<u64>>) {}
+
+#[no_mangle]
+pub extern "C" fn nullable_const_ptr(arg: *const Pointers<u64>) {}
+
+#[no_mangle]
+pub extern "C" fn nullable_mut_ptr(arg: *mut Pointers<u64>) {}
diff --git a/cbindgen-0.24.5/tests/rust/nonnull_attribute.toml b/cbindgen-0.24.5/tests/rust/nonnull_attribute.toml
new file mode 100644
index 0000000..8c051d7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/nonnull_attribute.toml
@@ -0,0 +1,10 @@
+header = """
+#ifdef __clang__
+#define CBINDGEN_NONNULL _Nonnull
+#else
+#define CBINDGEN_NONNULL
+#endif
+"""
+
+[ptr]
+non_null_attribute = "CBINDGEN_NONNULL"
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/rust/nonzero.rs b/cbindgen-0.24.5/tests/rust/nonzero.rs
new file mode 100644
index 0000000..9bc2cde
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/nonzero.rs
@@ -0,0 +1,30 @@
+use std::num::*;
+
+#[repr(C)]
+pub struct NonZeroTest {
+    pub a: NonZeroU8,
+    pub b: NonZeroU16,
+    pub c: NonZeroU32,
+    pub d: NonZeroU64,
+    pub e: NonZeroI8,
+    pub f: NonZeroI16,
+    pub g: NonZeroI32,
+    pub h: NonZeroI64,
+    pub i: Option<NonZeroI64>,
+    pub j: *const Option<Option<NonZeroI64>>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    test: NonZeroTest,
+    a: NonZeroU8,
+    b: NonZeroU16,
+    c: NonZeroU32,
+    d: NonZeroU64,
+    e: NonZeroI8,
+    f: NonZeroI16,
+    g: NonZeroI32,
+    h: NonZeroI64,
+    i: Option<NonZeroI64>,
+    j: *const Option<Option<NonZeroI64>>,
+) {}
diff --git a/cbindgen-0.24.5/tests/rust/nonzero.toml b/cbindgen-0.24.5/tests/rust/nonzero.toml
new file mode 100644
index 0000000..3c656dc
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/nonzero.toml
@@ -0,0 +1,13 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+struct NonZeroI64;
+#endif
+
+#if 0
+' '''
+#endif
+"""
diff --git a/cbindgen-0.24.5/tests/rust/opaque.rs b/cbindgen-0.24.5/tests/rust/opaque.rs
new file mode 100644
index 0000000..7e1c6be
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/opaque.rs
@@ -0,0 +1,10 @@
+/// Fast hash map used internally.
+type FastHashMap<K, V> =
+    std::collections::HashMap<K, V, std::hash::BuildHasherDefault<std::collections::hash_map::DefaultHasher>>;
+
+pub type Foo = FastHashMap<i32, i32>;
+
+pub type Bar = Result<Foo, ()>;
+
+#[no_mangle]
+pub extern "C" fn root(a: &Foo, b: &Bar) {}
diff --git a/cbindgen-0.24.5/tests/rust/opaque.toml b/cbindgen-0.24.5/tests/rust/opaque.toml
new file mode 100644
index 0000000..cf56c97
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/opaque.toml
@@ -0,0 +1,17 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+// These could be added as opaque types I guess.
+template <typename T>
+struct BuildHasherDefault;
+
+struct DefaultHasher;
+#endif
+
+#if 0
+' '''
+#endif
+"""
diff --git a/cbindgen-0.24.5/tests/rust/pin.rs b/cbindgen-0.24.5/tests/rust/pin.rs
new file mode 100644
index 0000000..c8781ae
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/pin.rs
@@ -0,0 +1,8 @@
+#[repr(C)]
+struct PinTest {
+    pinned_box: Pin<Box<i32>>,
+    pinned_ref: Pin<&mut i32>
+}
+
+#[no_mangle]
+pub extern "C" fn root(s: Pin<&mut i32>, p: PinTest) {}
diff --git a/cbindgen-0.24.5/tests/rust/pin.toml b/cbindgen-0.24.5/tests/rust/pin.toml
new file mode 100644
index 0000000..5aeccf9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/pin.toml
@@ -0,0 +1,21 @@
+header = """
+#if 0
+''' '
+#endif
+
+#ifdef __cplusplus
+template <typename T>
+using Pin = T;
+template <typename T>
+using Box = T*;
+#endif
+
+#if 0
+' '''
+#endif
+"""
+[export]
+exclude = [
+    "Pin",
+    "Box"
+]
diff --git a/cbindgen-0.24.5/tests/rust/pragma_once.skip_warning_as_error.rs b/cbindgen-0.24.5/tests/rust/pragma_once.skip_warning_as_error.rs
new file mode 100644
index 0000000..03de69f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/pragma_once.skip_warning_as_error.rs
@@ -0,0 +1,3 @@
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/pragma_once.skip_warning_as_error.toml b/cbindgen-0.24.5/tests/rust/pragma_once.skip_warning_as_error.toml
new file mode 100644
index 0000000..2d52bc7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/pragma_once.skip_warning_as_error.toml
@@ -0,0 +1 @@
+pragma_once = true
diff --git a/cbindgen-0.24.5/tests/rust/prefix.rs b/cbindgen-0.24.5/tests/rust/prefix.rs
new file mode 100644
index 0000000..89d4638
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/prefix.rs
@@ -0,0 +1,20 @@
+pub const LEN: i32 = 22;
+
+pub type NamedLenArray = [i32; LEN];
+pub type ValuedLenArray = [i32; 22];
+
+#[repr(u8)]
+pub enum AbsoluteFontWeight {
+    Weight(f32),
+    Normal,
+    Bold,
+}
+
+#[no_mangle]
+pub extern "C" fn root(x: NamedLenArray, y: ValuedLenArray, z: AbsoluteFontWeight) {}
+
+#[no_mangle]
+pub const X: i64 = 22 << 22;
+
+#[no_mangle]
+pub const Y: i64 = X + X;
diff --git a/cbindgen-0.24.5/tests/rust/prefix.toml b/cbindgen-0.24.5/tests/rust/prefix.toml
new file mode 100644
index 0000000..648c142
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/prefix.toml
@@ -0,0 +1,2 @@
+[export]
+prefix = "PREFIX_"
diff --git a/cbindgen-0.24.5/tests/rust/prefixed_struct_literal.rs b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal.rs
new file mode 100644
index 0000000..1b8544d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal.rs
@@ -0,0 +1,14 @@
+#[repr(C)]
+struct Foo {
+    a: i32,
+    b: u32,
+}
+
+impl Foo {
+    pub const FOO: Foo = Foo{ a: 42, b: 47, };
+}
+
+pub const BAR: Foo = Foo{ a: 42, b: 1337, };
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo) { }
diff --git a/cbindgen-0.24.5/tests/rust/prefixed_struct_literal.toml b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal.toml
new file mode 100644
index 0000000..189d09a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal.toml
@@ -0,0 +1,2 @@
+[export]
+prefix = "PREFIX"
diff --git a/cbindgen-0.24.5/tests/rust/prefixed_struct_literal_deep.rs b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal_deep.rs
new file mode 100644
index 0000000..bfa2d8d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal_deep.rs
@@ -0,0 +1,20 @@
+#[repr(C)]
+struct Foo {
+    a: i32,
+    b: u32,
+    bar: Bar,
+}
+
+#[repr(C)]
+struct Bar {
+    a: i32,
+}
+
+pub const VAL: Foo = Foo {
+    a: 42,
+    b: 1337,
+    bar: Bar { a: 323 },
+};
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo) {}
diff --git a/cbindgen-0.24.5/tests/rust/prefixed_struct_literal_deep.toml b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal_deep.toml
new file mode 100644
index 0000000..189d09a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/prefixed_struct_literal_deep.toml
@@ -0,0 +1,2 @@
+[export]
+prefix = "PREFIX"
diff --git a/cbindgen-0.24.5/tests/rust/ptrs_as_arrays.rs b/cbindgen-0.24.5/tests/rust/ptrs_as_arrays.rs
new file mode 100644
index 0000000..02cb908
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/ptrs_as_arrays.rs
@@ -0,0 +1,19 @@
+/// cbindgen:ptrs-as-arrays=[[arg;3]]
+#[no_mangle]
+pub unsafe extern "C" fn ptr_as_array(n: u32, arg: *const u32, v: *const u64) {}
+
+/// cbindgen:ptrs-as-arrays=[[arg;3], [v; 4]]
+#[no_mangle]
+pub unsafe extern "C" fn ptr_as_array1(n: u32, arg: *const u32, v: *mut u64) {}
+
+/// cbindgen:ptrs-as-arrays=[[n;2], [arg; ], [v;], [k; 3]]
+#[no_mangle]
+pub unsafe extern "C" fn ptr_as_array2(n: u32, arg: *mut u32, v: *const u64) {}
+
+/// cbindgen:ptrs-as-arrays=[[a;2;3]]
+#[no_mangle]
+pub unsafe extern "C" fn ptr_as_array_wrong_syntax(arg: *mut u32, v: *const u32, _: *const u32) {}
+
+/// cbindgen:ptrs-as-arrays=[[_;2], [_;3]]
+#[no_mangle]
+pub unsafe extern "C" fn ptr_as_array_unnamed(_: *mut u32, _: *const u32) {}
diff --git a/cbindgen-0.24.5/tests/rust/raw_ident.rs b/cbindgen-0.24.5/tests/rust/raw_ident.rs
new file mode 100644
index 0000000..d3ceb56
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/raw_ident.rs
@@ -0,0 +1,20 @@
+#[repr(u8)]
+pub enum r#Enum {
+    r#a,
+    r#b,
+}
+
+#[repr(C)]
+pub struct r#Struct {
+    r#field: r#Enum,
+}
+
+#[no_mangle]
+pub extern "C" fn r#fn(r#arg: r#Struct) {
+    println!("Hello world");
+}
+
+pub mod r#mod {
+    #[no_mangle]
+    pub static r#STATIC: r#Enum = r#Enum::r#b;
+}
diff --git a/cbindgen-0.24.5/tests/rust/raw_lines.rs b/cbindgen-0.24.5/tests/rust/raw_lines.rs
new file mode 100644
index 0000000..03de69f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/raw_lines.rs
@@ -0,0 +1,3 @@
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/raw_lines.toml b/cbindgen-0.24.5/tests/rust/raw_lines.toml
new file mode 100644
index 0000000..13a2eba
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/raw_lines.toml
@@ -0,0 +1,3 @@
+include_guard = "INCLUDE_GUARD_H"
+no_includes = false
+after_includes = "#define VERSION 1"
diff --git a/cbindgen-0.24.5/tests/rust/rename.rs b/cbindgen-0.24.5/tests/rust/rename.rs
new file mode 100644
index 0000000..ba10249
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/rename.rs
@@ -0,0 +1,47 @@
+struct A {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+struct B {
+    x: i32,
+    y: f32,
+}
+
+union C {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+union D {
+    x: i32,
+    y: f32,
+}
+
+#[repr(u8)]
+enum E {
+    x = 0,
+    y = 1,
+}
+
+type F = A;
+
+#[no_mangle]
+pub static G: i32 = 10;
+
+pub const H: i32 = 10;
+
+pub const I: isize = 10 as *mut F as isize;
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: *const A,
+    b: B,
+    c: C,
+    d: D,
+    e: E,
+    f: F,
+) { }
+
diff --git a/cbindgen-0.24.5/tests/rust/rename.toml b/cbindgen-0.24.5/tests/rust/rename.toml
new file mode 100644
index 0000000..1b76559
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/rename.toml
@@ -0,0 +1,5 @@
+[export]
+prefix = "C_"
+
+[export.rename]
+"B" = "AwesomeB"
diff --git a/cbindgen-0.24.5/tests/rust/rename_case.rs b/cbindgen-0.24.5/tests/rust/rename_case.rs
new file mode 100644
index 0000000..e83227d
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/rename_case.rs
@@ -0,0 +1,19 @@
+/// cbindgen:rename-all=CamelCase
+#[no_mangle]
+pub extern "C" fn test_camel_case(foo_bar: i32) {}
+
+/// cbindgen:rename-all=PascalCase
+#[no_mangle]
+pub extern "C" fn test_pascal_case(foo_bar: i32) {}
+
+/// cbindgen:rename-all=SnakeCase
+#[no_mangle]
+pub extern "C" fn test_snake_case(foo_bar: i32) {}
+
+/// cbindgen:rename-all=ScreamingSnakeCase
+#[no_mangle]
+pub extern "C" fn test_screaming_snake_case(foo_bar: i32) {}
+
+/// cbindgen:rename-all=GeckoCase
+#[no_mangle]
+pub extern "C" fn test_gecko_case(foo_bar: i32) {}
diff --git a/cbindgen-0.24.5/tests/rust/renaming_overrides_prefixing.rs b/cbindgen-0.24.5/tests/rust/renaming_overrides_prefixing.rs
new file mode 100644
index 0000000..3212ee5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/renaming_overrides_prefixing.rs
@@ -0,0 +1,13 @@
+struct A {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+struct B {
+    x: i32,
+    y: f32,
+}
+
+#[no_mangle]
+pub extern "C" fn root(a: *const A, b: B) {}
diff --git a/cbindgen-0.24.5/tests/rust/renaming_overrides_prefixing.toml b/cbindgen-0.24.5/tests/rust/renaming_overrides_prefixing.toml
new file mode 100644
index 0000000..3cd8cf9
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/renaming_overrides_prefixing.toml
@@ -0,0 +1,6 @@
+[export]
+prefix = "Style"
+renaming_overrides_prefixing = true
+
+[export.rename]
+"B" = "B" # B should remain unprefixed.
diff --git a/cbindgen-0.24.5/tests/rust/reserved.rs b/cbindgen-0.24.5/tests/rust/reserved.rs
new file mode 100644
index 0000000..df9d9a5
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/reserved.rs
@@ -0,0 +1,37 @@
+#[repr(C)]
+struct A {
+    namespace: i32,
+    float: f32,
+}
+
+/// cbindgen:field-names=[namespace, float]
+#[repr(C)]
+struct B(i32, f32);
+
+#[repr(C, u8)]
+enum C {
+    D { namespace: i32, float: f32 },
+}
+
+#[repr(C, u8)]
+enum E {
+    Double(f64),
+    Float(f32),
+}
+
+#[repr(C, u8)]
+enum F {
+    double(f64),
+    float(f32),
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: A,
+    b: B,
+    c: C,
+    e: E,
+    f: F,
+    namespace: i32,
+    float: f32,
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/sentinel.rs b/cbindgen-0.24.5/tests/rust/sentinel.rs
new file mode 100644
index 0000000..601b6ee
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/sentinel.rs
@@ -0,0 +1,23 @@
+#[repr(u8)]
+pub enum A {
+    A1,
+    A2,
+    A3,
+}
+
+#[repr(u8)]
+pub enum B {
+    B1,
+    B2,
+    B3,
+}
+
+#[repr(u8)]
+pub enum C {
+    C1 { a: u32 },
+    C2 { b: u32 },
+    C3,
+}
+
+#[no_mangle]
+pub extern "C" fn root(a: A, b: B, c: C) {}
diff --git a/cbindgen-0.24.5/tests/rust/sentinel.toml b/cbindgen-0.24.5/tests/rust/sentinel.toml
new file mode 100644
index 0000000..281803f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/sentinel.toml
@@ -0,0 +1,3 @@
+[enum]
+add_sentinel = true
+prefix_with_name = true
diff --git a/cbindgen-0.24.5/tests/rust/simplify_option_ptr.rs b/cbindgen-0.24.5/tests/rust/simplify_option_ptr.rs
new file mode 100644
index 0000000..22eeef8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/simplify_option_ptr.rs
@@ -0,0 +1,28 @@
+
+struct Opaque();
+
+#[repr(C)]
+struct Foo {
+    x: Option<&Opaque>,
+    y: Option<&mut Opaque>,
+    z: Option<fn () -> ()>,
+    zz: *mut Option<fn () -> ()>,
+}
+
+#[repr(C)]
+union Bar {
+    x: Option<&Opaque>,
+    y: Option<&mut Opaque>,
+    z: Option<fn () -> ()>,
+    zz: *mut Option<fn () -> ()>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+	a: Option<&Opaque>,
+    b: Option<&mut Opaque>,
+    c: Foo,
+    d: Bar,
+    e: *mut Option<*mut Opaque>,
+    f: extern "C" fn(Option<&Opaque>),
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/size_types.rs b/cbindgen-0.24.5/tests/rust/size_types.rs
new file mode 100644
index 0000000..6dfaeb2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/size_types.rs
@@ -0,0 +1,15 @@
+type Usize = usize;
+type Isize = isize;
+
+#[repr(usize)]
+enum UE {
+    UV,
+}
+
+#[repr(isize)]
+enum IE {
+    IV,
+}
+
+#[no_mangle]
+pub extern "C" fn root(_: Usize, _: Isize, _: UE, _: IE) {}
diff --git a/cbindgen-0.24.5/tests/rust/size_types.toml b/cbindgen-0.24.5/tests/rust/size_types.toml
new file mode 100644
index 0000000..b020c68
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/size_types.toml
@@ -0,0 +1 @@
+usize_is_size_t = true
diff --git a/cbindgen-0.24.5/tests/rust/static.rs b/cbindgen-0.24.5/tests/rust/static.rs
new file mode 100644
index 0000000..a18e4a2
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/static.rs
@@ -0,0 +1,17 @@
+#[no_mangle]
+pub static NUMBER: i32 = 10;
+
+#[repr(C)]
+struct Foo {
+}
+
+struct Bar {
+}
+
+#[no_mangle]
+pub static mut FOO: Foo = Foo { };
+#[no_mangle]
+pub static BAR: Bar = Bar { };
+
+#[no_mangle]
+pub extern "C" fn root() { }
diff --git a/cbindgen-0.24.5/tests/rust/std_lib.rs b/cbindgen-0.24.5/tests/rust/std_lib.rs
new file mode 100644
index 0000000..05e0f2a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/std_lib.rs
@@ -0,0 +1,6 @@
+#[no_mangle]
+pub extern "C" fn root(
+	a: &Vec<String>,
+    b: &Option<i32>,
+    c: &Result<i32, String>
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/struct.rs b/cbindgen-0.24.5/tests/rust/struct.rs
new file mode 100644
index 0000000..7569901
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/struct.rs
@@ -0,0 +1,38 @@
+use std::marker::PhantomData;
+
+struct Opaque {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+struct Normal {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+struct NormalWithZST {
+    x: i32,
+    y: f32,
+    z: (),
+    w: PhantomData<i32>,
+    v: PhantomPinned,
+}
+
+/// cbindgen:rename-all=GeckoCase
+#[repr(C)]
+struct TupleRenamed(i32, f32);
+
+/// cbindgen:field-names=[x, y]
+#[repr(C)]
+struct TupleNamed(i32, f32);
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: *mut Opaque,
+    b: Normal,
+    c: NormalWithZST,
+    d: TupleRenamed,
+    e: TupleNamed
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/struct_literal.rs b/cbindgen-0.24.5/tests/rust/struct_literal.rs
new file mode 100644
index 0000000..733dac3
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/struct_literal.rs
@@ -0,0 +1,23 @@
+#[repr(C)]
+struct Foo {
+    a: i32,
+    b: u32,
+}
+
+struct Bar {
+    a: i32,
+    b: u32,
+}
+
+impl Foo {
+    pub const FOO: Foo = Foo { a: 42, b: 47, };
+    pub const FOO2: Self = Foo { a: 42, b: 47, };
+    pub const FOO3: Self = Self { a: 42, b: 47, };
+    pub const BAZ: Bar = Bar { a: 42, b: 47, };
+}
+
+pub const BAR: Foo = Foo { a: 42, b: 1337, };
+pub const BAZZ: Bar = Bar { a: 42, b: 1337, };
+
+#[no_mangle]
+pub extern "C" fn root(x: Foo, bar: Bar) { }
diff --git a/cbindgen-0.24.5/tests/rust/struct_literal_order.rs b/cbindgen-0.24.5/tests/rust/struct_literal_order.rs
new file mode 100644
index 0000000..a5336c0
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/struct_literal_order.rs
@@ -0,0 +1,28 @@
+#[repr(C)]
+struct ABC {
+    pub a: f32,
+    pub b: u32,
+    pub c: u32,
+}
+
+#[repr(C)]
+struct BAC {
+    pub b: u32,
+    pub a: f32,
+    pub c: i32,
+}
+
+impl ABC {
+    pub const abc: ABC = ABC { a: 1.0, b: 2, c: 3 };
+    pub const bac: ABC = ABC { b: 2, a: 1.0, c: 3 };
+    pub const cba: ABC = ABC { c: 3, b: 2, a: 1.0 };
+}
+
+impl BAC {
+    pub const abc: BAC = BAC { a: 2.0, b: 1, c: 3 };
+    pub const bac: BAC = BAC { b: 1, a: 2.0, c: 3 };
+    pub const cba: BAC = BAC { c: 3, b: 1, a: 2.0 };
+}
+
+#[no_mangle]
+pub extern "C" fn root(a1: ABC, a2: BAC) {}
diff --git a/cbindgen-0.24.5/tests/rust/struct_self.rs b/cbindgen-0.24.5/tests/rust/struct_self.rs
new file mode 100644
index 0000000..9432082
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/struct_self.rs
@@ -0,0 +1,14 @@
+#[repr(C)]
+pub struct Foo<T> {
+    something: *const i32,
+    phantom: std::marker::PhantomData<T>,
+}
+
+#[repr(C)]
+pub struct Bar {
+    something: i32,
+    subexpressions: Foo<Self>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(b: Bar) {}
diff --git a/cbindgen-0.24.5/tests/rust/style_crash.rs b/cbindgen-0.24.5/tests/rust/style_crash.rs
new file mode 100644
index 0000000..ef692d8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/style_crash.rs
@@ -0,0 +1,7 @@
+pub trait SpecifiedValueInfo {
+    const SUPPORTED_TYPES: u8 = 0;
+}
+
+impl<T: SpecifiedValueInfo> SpecifiedValueInfo for [T] {
+    const SUPPORTED_TYPES: u8 = T::SUPPORTED_TYPES;
+}
diff --git a/cbindgen-0.24.5/tests/rust/swift_name.rs b/cbindgen-0.24.5/tests/rust/swift_name.rs
new file mode 100644
index 0000000..01cfdbe
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/swift_name.rs
@@ -0,0 +1,133 @@
+#[export_name="rust_print_hello_world"]
+pub extern fn say_hello() {
+  println!("Hello, World!");
+}
+
+#[repr(C)]
+pub struct SelfTypeTestStruct {
+  times: u8,
+}
+
+impl SelfTypeTestStruct {
+  #[export_name="SelfTypeTestStruct_should_exist_ref"]
+  #[no_mangle]
+  pub extern fn should_exist_ref(&self) {
+    println!("should_exist_ref");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_ref_mut"]
+  #[no_mangle]
+  pub extern fn should_exist_ref_mut(&mut self) {
+    println!("should_exist_ref_mut");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_not_exist_box"]
+  #[no_mangle]
+  pub extern fn should_not_exist_box(self: Box<SelfTypeTestStruct>) {
+    println!("should_not_exist_box");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_not_exist_return_box"]
+  #[no_mangle]
+  pub extern fn should_not_exist_box() -> Box<Self> {
+    println!("should_not_exist_box");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_annotated_self"]
+  #[no_mangle]
+  pub extern fn should_exist_annotated_self(self: Self) {
+    println!("should_exist_annotated_self");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_annotated_mut_self"]
+  #[no_mangle]
+  #[allow(unused_mut)]
+  pub extern fn should_exist_annotated_mut_self(mut self: Self) {
+    println!("should_exist_annotated_mut_self");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_annotated_by_name"]
+  #[no_mangle]
+  pub extern fn should_exist_annotated_by_name(self: SelfTypeTestStruct) {
+    println!("should_exist_annotated_by_name");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_annotated_mut_by_name"]
+  #[no_mangle]
+  #[allow(unused_mut)]
+  pub extern fn should_exist_annotated_mut_by_name(mut self: SelfTypeTestStruct) {
+    println!("should_exist_annotated_mut_by_name");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_unannotated"]
+  #[no_mangle]
+  pub extern fn should_exist_unannotated(self) {
+    println!("should_exist_unannotated");
+  }
+
+  #[export_name="SelfTypeTestStruct_should_exist_mut_unannotated"]
+  #[no_mangle]
+  #[allow(unused_mut)]
+  pub extern fn should_exist_mut_unannotated(mut self) {
+    println!("should_exist_mut_unannotated");
+  }
+}
+
+#[no_mangle]
+#[allow(unused_variables)]
+pub extern fn free_function_should_exist_ref(test_struct: &SelfTypeTestStruct) {
+  println!("free_function_should_exist_ref");
+}
+
+#[no_mangle]
+#[allow(unused_variables)]
+pub extern fn free_function_should_exist_ref_mut(test_struct: &mut SelfTypeTestStruct) {
+  println!("free_function_should_exist_ref_mut");
+}
+
+#[no_mangle]
+pub extern fn unnamed_argument(_: &mut SelfTypeTestStruct) {
+  println!("unnamed_argument");
+}
+
+#[no_mangle]
+#[allow(unused_variables)]
+pub extern fn free_function_should_not_exist_box(boxed: Box<SelfTypeTestStruct>) {
+  println!("free_function_should_not_exist_box");
+}
+
+#[no_mangle]
+#[allow(unused_variables)]
+pub extern fn free_function_should_exist_annotated_by_name(test_struct: SelfTypeTestStruct) {
+  println!("free_function_should_exist_annotated_by_name");
+}
+
+#[no_mangle]
+#[allow(unused_mut)]
+#[allow(unused_variables)]
+pub extern fn free_function_should_exist_annotated_mut_by_name(mut test_struct: SelfTypeTestStruct) {
+  println!("free_function_should_exist_annotated_mut_by_name");
+}
+
+struct Opaque {
+  times: u8
+}
+
+#[repr(C)]
+pub struct PointerToOpaque { ptr: *mut Opaque }
+
+impl PointerToOpaque {
+  #[export_name="PointerToOpaque_create"]
+  pub extern fn create(times: u8) -> PointerToOpaque {
+    PointerToOpaque { ptr: Box::into_raw(Box::new(Opaque { times })) }
+  }
+
+  #[export_name="PointerToOpaque_sayHello"]
+  pub extern fn say_hello(self: PointerToOpaque) {
+    if let Some(nonnull) = std::ptr::NonNull::new(self.ptr) {
+      for _ in 0 .. unsafe { nonnull.as_ref().times } {
+        println!("Hello!")
+      }
+    }
+  }
+}
diff --git a/cbindgen-0.24.5/tests/rust/swift_name.toml b/cbindgen-0.24.5/tests/rust/swift_name.toml
new file mode 100644
index 0000000..b04dc63
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/swift_name.toml
@@ -0,0 +1,4 @@
+header = "#define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name)))"
+
+[fn]
+swift_name_macro = "CF_SWIFT_NAME"
diff --git a/cbindgen-0.24.5/tests/rust/transform_op.rs b/cbindgen-0.24.5/tests/rust/transform_op.rs
new file mode 100644
index 0000000..fd5c093
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/transform_op.rs
@@ -0,0 +1,43 @@
+#[repr(C)]
+pub struct Point<T> {
+    pub x: T,
+    pub y: T,
+}
+
+#[repr(u8)]
+pub enum Foo<T> {
+    Foo { x: i32, y: Point<T>, z: Point<f32>, },
+    Bar(T),
+    Baz(Point<T>),
+    Bazz,
+}
+
+#[repr(C)]
+pub enum Bar<T> {
+    Bar1 { x: i32, y: Point<T>, z: Point<f32>, u: unsafe extern "C" fn(i32) -> i32,  },
+    Bar2(T),
+    Bar3(Point<T>),
+    Bar4,
+}
+
+#[repr(u8)]
+pub enum Baz {
+    Baz1(Bar<u32>),
+    Baz2(Point<i32>),
+    Baz3,
+}
+
+#[repr(C, u8)]
+pub enum Taz {
+    Taz1(Bar<u32>),
+    Taz2(Baz),
+    Taz3,
+}
+
+#[no_mangle]
+pub extern "C" fn foo(
+    foo: *const Foo<i32>,
+    bar: *const Bar<i32>,
+    baz: *const Baz,
+    taz: *const Taz,
+) {}
diff --git a/cbindgen-0.24.5/tests/rust/transform_op.toml b/cbindgen-0.24.5/tests/rust/transform_op.toml
new file mode 100644
index 0000000..d11adff
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/transform_op.toml
@@ -0,0 +1,7 @@
+[export]
+prefix = "Style"
+
+[enum]
+derive_helper_methods = true
+derive_const_casts = true
+derive_mut_casts = true
diff --git a/cbindgen-0.24.5/tests/rust/transparent.rs b/cbindgen-0.24.5/tests/rust/transparent.rs
new file mode 100644
index 0000000..6dc77c1
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/transparent.rs
@@ -0,0 +1,67 @@
+struct DummyStruct;
+
+// Transparent struct tuple wrapping a struct.
+#[repr(transparent)]
+struct TransparentComplexWrappingStructTuple(DummyStruct);
+
+// Transparent struct tuple wrapping a primitive.
+#[repr(transparent)]
+struct TransparentPrimitiveWrappingStructTuple(u32);
+
+// Transparent structure wrapping a struct.
+#[repr(transparent)]
+struct TransparentComplexWrappingStructure { only_field: DummyStruct }
+
+// Transparent structure wrapping a primitive.
+#[repr(transparent)]
+struct TransparentPrimitiveWrappingStructure { only_field: u32 }
+
+// Transparent struct wrapper with a marker wrapping a struct.
+#[repr(transparent)]
+struct TransparentComplexWrapper<T> {
+    only_non_zero_sized_field: DummyStruct,
+    marker: PhantomData<T>,
+}
+
+// Transparent struct wrapper with a marker wrapping a primitive.
+#[repr(transparent)]
+struct TransparentPrimitiveWrapper<T> {
+    only_non_zero_sized_field: u32,
+    marker: PhantomData<T>,
+}
+
+// Associated constant declared before struct declaration.
+impl TransparentPrimitiveWithAssociatedConstants {
+    pub const ZERO: TransparentPrimitiveWithAssociatedConstants = TransparentPrimitiveWithAssociatedConstants {
+        bits: 0
+    };
+}
+
+// Transparent structure wrapping a primitive with associated constants.
+#[repr(transparent)]
+struct TransparentPrimitiveWithAssociatedConstants { bits: u32 }
+
+// Associated constant declared after struct declaration.
+impl TransparentPrimitiveWithAssociatedConstants {
+    pub const ONE: TransparentPrimitiveWithAssociatedConstants = TransparentPrimitiveWithAssociatedConstants {
+        bits: 1
+    };
+}
+
+enum EnumWithAssociatedConstantInImpl { A }
+
+impl EnumWithAssociatedConstantInImpl {
+    pub const TEN: TransparentPrimitiveWrappingStructure = TransparentPrimitiveWrappingStructure { only_field: 10 };
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: TransparentComplexWrappingStructTuple,
+    b: TransparentPrimitiveWrappingStructTuple,
+    c: TransparentComplexWrappingStructure,
+    d: TransparentPrimitiveWrappingStructure,
+    e: TransparentComplexWrapper<i32>,
+    f: TransparentPrimitiveWrapper<i32>,
+    g: TransparentPrimitiveWithAssociatedConstants,
+    h: EnumWithAssociatedConstantInImpl,
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/typedef.rs b/cbindgen-0.24.5/tests/rust/typedef.rs
new file mode 100644
index 0000000..bf7ceb8
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/typedef.rs
@@ -0,0 +1,11 @@
+#[repr(C)]
+struct Foo<T, U> {
+    x: T,
+    y: U,
+}
+
+type IntFoo<T> = Foo<i32, T>;
+
+#[no_mangle]
+pub extern "C" fn root(a: IntFoo<i32>)
+{ }
diff --git a/cbindgen-0.24.5/tests/rust/union.rs b/cbindgen-0.24.5/tests/rust/union.rs
new file mode 100644
index 0000000..b76f98a
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/union.rs
@@ -0,0 +1,27 @@
+use std::marker::PhantomData;
+
+union Opaque {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+union Normal {
+    x: i32,
+    y: f32,
+}
+
+#[repr(C)]
+union NormalWithZST {
+    x: i32,
+    y: f32,
+    z: (),
+    w: PhantomData<i32>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(
+    a: *mut Opaque,
+    b: Normal,
+    c: NormalWithZST
+) { }
diff --git a/cbindgen-0.24.5/tests/rust/union_self.rs b/cbindgen-0.24.5/tests/rust/union_self.rs
new file mode 100644
index 0000000..77b0b0f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/union_self.rs
@@ -0,0 +1,14 @@
+#[repr(C)]
+pub struct Foo<T> {
+    something: *const i32,
+    phantom: std::marker::PhantomData<T>,
+}
+
+#[repr(C)]
+pub union Bar {
+    something: i32,
+    subexpressions: Foo<Self>,
+}
+
+#[no_mangle]
+pub extern "C" fn root(b: Bar) {}
diff --git a/cbindgen-0.24.5/tests/rust/using_namespaces.rs b/cbindgen-0.24.5/tests/rust/using_namespaces.rs
new file mode 100644
index 0000000..03de69f
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/using_namespaces.rs
@@ -0,0 +1,3 @@
+#[no_mangle]
+pub extern "C" fn root() {
+}
diff --git a/cbindgen-0.24.5/tests/rust/using_namespaces.toml b/cbindgen-0.24.5/tests/rust/using_namespaces.toml
new file mode 100644
index 0000000..a1dd9a7
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/using_namespaces.toml
@@ -0,0 +1,2 @@
+namespaces = ["root"]
+using_namespaces = ["std"]
\ No newline at end of file
diff --git a/cbindgen-0.24.5/tests/rust/va_list.rs b/cbindgen-0.24.5/tests/rust/va_list.rs
new file mode 100644
index 0000000..1016091
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/va_list.rs
@@ -0,0 +1,6 @@
+use std::ffi::VaList;
+
+#[no_mangle]
+pub unsafe extern "C" fn va_list_test(mut ap: VaList) -> int32_t {
+    ap.arg()
+}
diff --git a/cbindgen-0.24.5/tests/rust/zst.rs b/cbindgen-0.24.5/tests/rust/zst.rs
new file mode 100644
index 0000000..8a3e467
--- /dev/null
+++ b/cbindgen-0.24.5/tests/rust/zst.rs
@@ -0,0 +1,10 @@
+#[repr(C)]
+pub struct TraitObject {
+    pub data: *mut (),
+    pub vtable: *mut (),
+}
+
+#[no_mangle]
+pub extern "C" fn root(ptr: *const (), t: TraitObject) -> *mut () {
+    std::ptr::null_mut()
+}
diff --git a/cbindgen-0.24.5/tests/testing-helpers.h b/cbindgen-0.24.5/tests/testing-helpers.h
new file mode 100644
index 0000000..29e4499
--- /dev/null
+++ b/cbindgen-0.24.5/tests/testing-helpers.h
@@ -0,0 +1,20 @@
+#ifndef testing_helpers_h
+#define testing_helpers_h
+
+// This is a helper file to easily add static_asserts to C / C++ tests.
+
+#ifndef __cplusplus
+#include <assert.h>
+#endif
+
+#if defined(CBINDGEN_STYLE_TAG) && !defined(__cplusplus)
+#define CBINDGEN_STRUCT(name) struct name
+#define CBINDGEN_UNION(name) union name
+#define CBINDGEN_ENUM(name) enum name
+#else
+#define CBINDGEN_STRUCT(name) name
+#define CBINDGEN_UNION(name) name
+#define CBINDGEN_ENUM(name) name
+#endif
+
+#endif
diff --git a/cbindgen-0.24.5/tests/tests.rs b/cbindgen-0.24.5/tests/tests.rs
new file mode 100644
index 0000000..88a1c40
--- /dev/null
+++ b/cbindgen-0.24.5/tests/tests.rs
@@ -0,0 +1,299 @@
+extern crate cbindgen;
+
+use cbindgen::*;
+use std::collections::HashSet;
+use std::path::Path;
+use std::process::Command;
+use std::{env, fs, str};
+
+fn style_str(style: Style) -> &'static str {
+    match style {
+        Style::Both => "both",
+        Style::Tag => "tag",
+        Style::Type => "type",
+    }
+}
+
+fn run_cbindgen(
+    cbindgen_path: &'static str,
+    path: &Path,
+    output: &Path,
+    language: Language,
+    cpp_compat: bool,
+    style: Option<Style>,
+) -> Vec<u8> {
+    let program = Path::new(cbindgen_path);
+    let mut command = Command::new(program);
+    match language {
+        Language::Cxx => {}
+        Language::C => {
+            command.arg("--lang").arg("c");
+
+            if cpp_compat {
+                command.arg("--cpp-compat");
+            }
+        }
+        Language::Cython => {
+            command.arg("--lang").arg("cython");
+        }
+    }
+
+    if let Some(style) = style {
+        command.arg("--style").arg(style_str(style));
+    }
+
+    let config = path.with_extension("toml");
+    if config.exists() {
+        command.arg("--config").arg(config);
+    }
+
+    command.arg(path);
+
+    println!("Running: {:?}", command);
+    let cbindgen_output = command.output().expect("failed to execute process");
+    assert!(
+        cbindgen_output.status.success(),
+        "cbindgen failed: {:?} with error: {}",
+        output,
+        str::from_utf8(&cbindgen_output.stderr).unwrap_or_default()
+    );
+    cbindgen_output.stdout
+}
+
+fn compile(
+    cbindgen_output: &Path,
+    tests_path: &Path,
+    tmp_dir: &Path,
+    language: Language,
+    style: Option<Style>,
+    skip_warning_as_error: bool,
+) {
+    let cc = match language {
+        Language::Cxx => env::var("CXX").unwrap_or_else(|_| "g++".to_owned()),
+        Language::C => env::var("CC").unwrap_or_else(|_| "gcc".to_owned()),
+        Language::Cython => env::var("CYTHON").unwrap_or_else(|_| "cython".to_owned()),
+    };
+
+    let file_name = cbindgen_output
+        .file_name()
+        .expect("cbindgen output should be a file");
+    let mut object = tmp_dir.join(file_name);
+    object.set_extension("o");
+
+    let mut command = Command::new(cc);
+    match language {
+        Language::Cxx | Language::C => {
+            command.arg("-D").arg("DEFINED");
+            command.arg("-I").arg(tests_path);
+            command.arg("-Wall");
+            if !skip_warning_as_error {
+                command.arg("-Werror");
+            }
+            // `swift_name` is not recognzied by gcc.
+            command.arg("-Wno-attributes");
+            // clang warns about unused const variables.
+            command.arg("-Wno-unused-const-variable");
+            // clang also warns about returning non-instantiated templates (they could
+            // be specialized, but they're not so it's fine).
+            command.arg("-Wno-return-type-c-linkage");
+            if let Language::Cxx = language {
+                // enum class is a c++11 extension which makes g++ on macos 10.14 error out
+                // inline variables are are a c++17 extension
+                command.arg("-std=c++17");
+                // Prevents warnings when compiling .c files as c++.
+                command.arg("-x").arg("c++");
+                if let Ok(extra_flags) = env::var("CXXFLAGS") {
+                    command.args(extra_flags.split_whitespace());
+                }
+            } else if let Ok(extra_flags) = env::var("CFLAGS") {
+                command.args(extra_flags.split_whitespace());
+            }
+
+            if let Some(style) = style {
+                command.arg("-D");
+                command.arg(format!(
+                    "CBINDGEN_STYLE_{}",
+                    style_str(style).to_uppercase()
+                ));
+            }
+
+            command.arg("-o").arg(&object);
+            command.arg("-c").arg(cbindgen_output);
+        }
+        Language::Cython => {
+            command.arg("-Wextra");
+            if !skip_warning_as_error {
+                command.arg("-Werror");
+            }
+            command.arg("-3");
+            command.arg("-o").arg(&object);
+            command.arg(cbindgen_output);
+        }
+    }
+
+    println!("Running: {:?}", command);
+    let out = command.output().expect("failed to compile");
+    assert!(out.status.success(), "Output failed to compile: {:?}", out);
+
+    if object.exists() {
+        fs::remove_file(object).unwrap();
+    }
+}
+
+const SKIP_WARNING_AS_ERROR_SUFFIX: &str = ".skip_warning_as_error";
+
+#[allow(clippy::too_many_arguments)]
+fn run_compile_test(
+    cbindgen_path: &'static str,
+    name: &'static str,
+    path: &Path,
+    tmp_dir: &Path,
+    language: Language,
+    cpp_compat: bool,
+    style: Option<Style>,
+    cbindgen_outputs: &mut HashSet<Vec<u8>>,
+) {
+    let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
+    let tests_path = Path::new(&crate_dir).join("tests");
+    let mut generated_file = tests_path.join("expectations");
+    fs::create_dir_all(&generated_file).unwrap();
+
+    let style_ext = style
+        .map(|style| match style {
+            Style::Both => ".both",
+            Style::Tag => ".tag",
+            Style::Type => "",
+        })
+        .unwrap_or_default();
+    let lang_ext = match language {
+        Language::Cxx => ".cpp",
+        Language::C if cpp_compat => ".compat.c",
+        Language::C => ".c",
+        // cbindgen is supposed to generate declaration files (`.pxd`), but `cython` compiler
+        // is extension-sensitive and won't work on them, so we use implementation files (`.pyx`)
+        // in the test suite.
+        Language::Cython => ".pyx",
+    };
+
+    let skip_warning_as_error = name.rfind(SKIP_WARNING_AS_ERROR_SUFFIX).is_some();
+
+    let source_file =
+        format!("{}{}{}", name, style_ext, lang_ext).replace(SKIP_WARNING_AS_ERROR_SUFFIX, "");
+
+    generated_file.push(source_file);
+
+    let cbindgen_output = run_cbindgen(
+        cbindgen_path,
+        path,
+        &generated_file,
+        language,
+        cpp_compat,
+        style,
+    );
+
+    if cbindgen_outputs.contains(&cbindgen_output) {
+        // We already generated an identical file previously.
+        if env::var_os("CBINDGEN_TEST_VERIFY").is_some() {
+            assert!(!generated_file.exists());
+        } else if generated_file.exists() {
+            fs::remove_file(&generated_file).unwrap();
+        }
+    } else {
+        if env::var_os("CBINDGEN_TEST_VERIFY").is_some() {
+            let prev_cbindgen_output = fs::read(&generated_file).unwrap();
+            assert_eq!(cbindgen_output, prev_cbindgen_output);
+        } else {
+            fs::write(&generated_file, &cbindgen_output).unwrap();
+        }
+
+        cbindgen_outputs.insert(cbindgen_output);
+
+        if env::var_os("CBINDGEN_TEST_NO_COMPILE").is_some() {
+            return;
+        }
+
+        compile(
+            &generated_file,
+            &tests_path,
+            tmp_dir,
+            language,
+            style,
+            skip_warning_as_error,
+        );
+
+        if language == Language::C && cpp_compat {
+            compile(
+                &generated_file,
+                &tests_path,
+                tmp_dir,
+                Language::Cxx,
+                style,
+                skip_warning_as_error,
+            );
+        }
+    }
+}
+
+fn test_file(cbindgen_path: &'static str, name: &'static str, filename: &'static str) {
+    let test = Path::new(filename);
+    let tmp_dir = tempfile::Builder::new()
+        .prefix("cbindgen-test-output")
+        .tempdir()
+        .expect("Creating tmp dir failed");
+    let tmp_dir = tmp_dir.path();
+    // Run tests in deduplication priority order. C++ compatibility tests are run first,
+    // otherwise we would lose the C++ compiler run if they were deduplicated.
+    let mut cbindgen_outputs = HashSet::new();
+    for cpp_compat in &[true, false] {
+        for style in &[Style::Type, Style::Tag, Style::Both] {
+            run_compile_test(
+                cbindgen_path,
+                name,
+                test,
+                tmp_dir,
+                Language::C,
+                *cpp_compat,
+                Some(*style),
+                &mut cbindgen_outputs,
+            );
+        }
+    }
+
+    run_compile_test(
+        cbindgen_path,
+        name,
+        test,
+        tmp_dir,
+        Language::Cxx,
+        /* cpp_compat = */ false,
+        None,
+        &mut HashSet::new(),
+    );
+
+    // `Style::Both` should be identical to `Style::Tag` for Cython.
+    let mut cbindgen_outputs = HashSet::new();
+    for style in &[Style::Type, Style::Tag] {
+        run_compile_test(
+            cbindgen_path,
+            name,
+            test,
+            tmp_dir,
+            Language::Cython,
+            /* cpp_compat = */ false,
+            Some(*style),
+            &mut cbindgen_outputs,
+        );
+    }
+}
+
+macro_rules! test_file {
+    ($cbindgen_path:expr, $test_function_name:ident, $name:expr, $file:tt) => {
+        #[test]
+        fn $test_function_name() {
+            test_file($cbindgen_path, $name, $file);
+        }
+    };
+}
+
+// This file is generated by build.rs
+include!(concat!(env!("OUT_DIR"), "/tests.rs"));
