Skip to content

Attempts to include all type params #1425

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

adetaylor
Copy link
Collaborator

bindgen can handle a large fraction of C++ code, even with templates, and
autocxx can in turn handle a very large fraction of bindgen output. Pretty much
the only things autocxx can't handle are:

  • bindgen opaque types passed by value
  • Types with unused template parameters

This change, with its associated bindgen change, tries to make progress to
removing this second category of unhandled thing.

It alters bindgen such that it always uses all template parameters, adding a
PhantomData field where necessary.

It's not quite right yet.

Copy link

google-cla bot commented Jan 15, 2025

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

bindgen can handle a large fraction of C++ code, even with templates, and
autocxx can in turn handle a very large fraction of bindgen output. Pretty much
the only things autocxx can't handle are:

* bindgen opaque types passed by value
* Types with unused template parameters

This change, with its associated bindgen change, tries to make progress to
removing this second category of unhandled thing.

It alters bindgen such that it always uses all template parameters, adding a
PhantomData field where necessary.

It's not quite right yet.
@adetaylor adetaylor force-pushed the attempts-to-include-all-type-params branch from 7491a6a to 9408365 Compare January 15, 2025 18:39
@adetaylor adetaylor mentioned this pull request Feb 11, 2025
8 tasks
adetaylor added a commit to adetaylor/rust-bindgen that referenced this pull request Feb 22, 2025
Downstream postprocessors such as autocxx may want to use bindgen's
representation of types to generate additional C++ code. bindgen is remarkably
faithful at passing through enough information to make this possible - but for
some C++ types, bindgen chooses to elide some template parameters. It's not
safe for additional C++ code to be generated which references that type.

This adds a callback by which such tools can recognize types where template
parameters have been elided like this, so that extra C++ is avoided.

This information could be provided in the existing
`new_item_found` callback, but it's very niche and unlikely to be used by
the majority of consumers, so a new callback is added instead.

An alternative approach here is to provide a mode to bindgen where it
*always* uses all template params, by adding additional PhantomData
fields to structs where those params are not currently used.
This is being prototyped in google/autocxx#1425
but is unlikely to be successful, on the assumption that lots of the
templated types can't actually be properly represented by bindgen/Rust,
so the current strategy of discarding them is more likely to work
in the broad strokes.

Part of google/autocxx#124
@adetaylor
Copy link
Collaborator Author

I'm not likely to progress this soon - closing for now.

@adetaylor adetaylor closed this Feb 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant