Age | Commit message (Collapse) | Author |
|
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.
|
|
Fixes #1946
|
|
|
|
Add a `--fit-macro-constant-types` option to make bindgen try to fit
macro integer constants into types smaller than u32/i32.
Useful especially when dealing with 8/16-bit architectures.
Closes #1945
|
|
|
|
Fixes #1938.
|
|
This makes command_line_args properly return them, instead of dropping
them on the floor.
|
|
This can cause unnecessary padding to be computed otherwise at the end
of the struct.
With repr(packed(n)), a field can have padding to adjacent fields as
long as its alignment is less than n. So reuse the code we have to align
to a field layout, aligning to the struct layout instead.
Fixes #1934
|
|
|
|
Fixes #1919, as otherwise we peek the wrong include paths unless you
pass "-x c++" or such.
|
|
Sometimes, we need customize the implement of `Default` for certain types,
In these cases, the `nodefault` annotation can be used to prevent bindgen
to autoderive the `Default` traits for a type.
|
|
We use it so little that it's not worth it.
|
|
Right now trying to generate a dynamic library with variadic functions
panics because we don't account for the extra `...` in the arguments.
Keeping the current interface for variadic functions is tricky, as we
cannot "wrap" a variadic function (VaList[1] is nightly-only).
However, we don't need to. We're already exposing the libloading error,
so exposing the function pointer field as public is just fine and allows
consumers to call the variadic function.
At that point the can_call() / CheckFoo libraries become pointless (you
can just do library.function.is_ok() or such), so we can simplify the
code as well removing those.
[1]: https://doc.rust-lang.org/std/ffi/struct.VaList.html
|
|
|
|
Closes #1541.
Closes #1846.
Co-authored-by: Michael-F-Bryan <michaelfbryan@gmail.com>
|
|
|
|
Fixes #1899.
This code predated all the derive machinery, and always hardcoded its
derives.
We could avoid hard-coding the other traits, but those seem
usually-useful, so leave them there for backwards compat for now.
|
|
|
|
|
|
|
|
|
|
|
|
* Added TryInto trait implementation from parent to child interfaces.
* Added HashSet for protocols so that the protocol inheritance works as
well.
|
|
|
|
type specification and template opaque type specification
|
|
|
|
|
|
Fixes #1880
|
|
|
|
Fixes #1211.
|
|
|
|
|
|
* Took advantage of the repr transparent to use Bindgen return type
names.
* Updated unit tests and book
|
|
Because the --target was passed after the include path detection, in
cases of cross-compilation, the include path detection would add paths
relevant to the host (e.g. /usr/include/x86_64_linux-gnu on x86_64 linux
while targeting something else), possibly breaking things along the way.
|
|
This will prevent common issues in platforms where the Rust target is
not the clang target, like aarch64-apple-darwin (Rust) vs.
arm64-apple-darwin.
We may want to special-case those too when cross-compiling.
|
|
|
|
* --default-macro-constant-type could be 'signed' or 'unsigned'
* Its default value is 'unsigned' to use u32/u64
for C macro constants that fit into the u32/u64 ranges.
* For old C libraries that use macros as int/long parameter
and/or return value types, their macros are better declared
as i32/i64 if the values fit the i32/i64 ranges,
to be compatible with c_int/c_long types.
They can use "--default-macro-constant-type signed"
|
|
|
|
|
|
|
|
Allow to use the given prefix for the anon fields instead of `__bindgen_anon_`.
|
|
|
|
This was introduced in #1850.
|
|
|
|
|