Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
These can happen in certain cases involving incomplete qualified dependent
types. To avoid looping forever, we need to check for them.
Closes #2085.
|
|
derives, or prevent deriving traits
Fixes #2076
|
|
|
|
|
|
|
|
complete type.
It might not if we had to avoid recursion when processing types. Detect that
case and bail out. This bug was being masked by the fact that we didn't always
find definitions for the recursion check and so it didn't trigger, but now that
this check is more reliable we have to be careful in more places.
The test case was reduced from the GCC STL allocator definition.
|
|
In some esoteric cases involving nested templates,
`ty.declaration().definition()` isn't enough to find the definition: we need
`ty.canonical_type().declaration().definition()` instead.
Closes #2078.
|
|
use the Default trait.
Fixes #2082
|
|
Fixes #1977 as of rust-lang/rust#74060 is available since Rust 1.47
Fixes #2041.
Closes #2070.
|
|
This callback allows us to specify arbitrary derive attributes for each
named struct. This is useful for adding things that can't easily be
implemented separately, such as `serde::Deserialize` or
`zerocopy::FromBytes`.
|
|
If a struct needs to be serialized in its native format (padding bytes
and all), for example writing it to a file or sending it on the network,
then explicit padding fields are necessary, as anything reading the
padding bytes of a struct may lead to Undefined Behavior.
|
|
Fixes #2067
|
|
|
|
* Zero out padding in custom Default trait implementations
Previously, we were using `std::mem::zeroed()` which unfortunately does
not necessarily zero out padding. It'd be better if the padding is
zeroed out because some libraries are sensitive to non-zero'd out bytes,
especially when forward/backward compatability is involved.
This commit ensures all bytes are zeroed out in custom Default trait
implementations.
|
|
Closes #2044
Fixes #2043
See https://github.com/rust-lang/rust-bindgen/issues/2043 for details.
|
|
|
|
Closes #2045.
Fixes #1252.
|
|
This fixes a panic with the following header:
template<typename T>
struct Foo {};
template<typename T>
Foo<T> foo{};
void f() {
struct Bar {
Bar() {}
};
foo<Bar>;
}
Because we don't parse the insides of function bodies, code like this could
cause us to parse a type (here, `Bar`) that we didn't see in our initial pass,
which can cause subtle problems.
Closes #2036.
|
|
This makes debugging #2039 a bit easier.
|
|
Needed to auto-bindgen with a ninja build without the build graph
going stale.
|
|
Closes #2009
|
|
|
|
Seems like an oversight from #1990.
Fixes #2022.
|
|
Fixes #2019
|
|
Fixes #2014.
|
|
|
|
|
|
|
|
|
|
Add callback to check derives for blocklisted types
|
|
|
|
Fixes #1454 #2003
|
|
|
|
Fixes #430
|
|
This reverts commit 7286c815f80b14c0ee77773387434da40f511b42, because it
was not intended to be merged after all, see
https://github.com/rust-lang/rust-bindgen/pull/2003#issuecomment-796160427.
|
|
Fixes #1454
|
|
|
|
For the commandline arguments I added undocumented aliases to old flags,
to stay backwards compatible.
|
|
Previously the function assumed that the version number appeared in the
third word. This PR adds a heuristic - take the first word that starts
with a number.
This way we can also parse: `debian clang version 11.0` that my clang
reports.
|
|
Instead of always generating the _bindgen_union_align method (which
shouldn't be needed at all for Rust structs, since the struct layout
tracker already deals with adding repr(align) as necessary) make sure to
visit all fields appropriately to generate the correct alignment.
|
|
|
|
directives to them.
Fixes #1771
Closes #1857
|
|
|
|
space.
Fixes #1947.
There are two separate issues here: First, the change in comp.rs ensures
that we don't round up the amount of storage to the alignment of the
bitfield. That generates the "expected" output in #1947
(`__BindgenBitfieldUnit<[u8; 3], u16>`).
But that's still not enough to fix that test-case because
__BindgenBitfieldUnit would be aligned and have padding, and Rust won't
put the extra field in the padding.
In order to ensure the bitfield starts at the right alignment, but that
Rust can put stuff in the extra field, we need to make a breaking change
and split the generated fields in two: One preceding that guarantees
alignment, and the actual storage, bit-aligned.
This keeps the existing behavior while fixing that test-case.
|