Age | Commit message (Collapse) | Author |
|
|
|
[skip ci]
|
|
[skip ci]
|
|
|
|
Closes #2206
|
|
Instead of dereferencing a null pointer, create a MaybeUninit from which
we can extract well-defined addresses.
|
|
It's impossible to #[derive] from any other trait when not deriving from
Copy when using the newest Rust nightly. Any attempt to do that results
in the following error:
error: `#[derive]` can't be used on a `#[repr(packed)]` struct that does not derive Copy (error E0133)
Fixes: #2083
Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>
|
|
Previously, anonymous enums generated a type alias but did not use it.
For example the following:
```C
enum {
ZERO,
ONE = 4999,
};
```
Generated this:
```Rust
/* automatically generated by rust-bindgen 0.59.2 */
pub const ZERO: ::std::os::raw::c_uint = 0;
pub const ONE: ::std::os::raw::c_uint = 4999;
pub type _bindgen_ty_1 = ::std::os::raw::c_uint;
```
For use cases where humans look at bindgen's Rust output this was a little
strange since it's a deviation from how the Rust output for named enums
is organized, where all constants share the same type using the type
alias. The unused type alias also triggered the dead_code lint.
Change to use the generated type alias.
|
|
this includes comments and must_use annotations
|
|
|
|
This is due to differences in representation of `signed long` and `unsigned long`
on most Linux-based systems and Windows (`64` vs. `32` bits)
|
|
|
|
|
|
|
|
This should have been added in #2155 but was missed then.
|
|
|
|
* Updated tests/expectations/Cargo.toml to use 2018 rust.
* Added Debug and Copy to objective-c structs.
* Fixed lifetimes in objective-c trait templates.
* Fixed imports for objective-c expectations tests.
|
|
Closes #2163
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fixes #2143
|
|
|
|
Update Item to hold a `clang::SourceLocation` and use this to allow
blocklisting based on filename.
The existing code has a special case that always maps <stdint.h> integer
types to corresponding Rust integer types, even if the C types are
blocklisted. To match this special case behaviour, also treat these
C <stdint.h> types as being eligible for derived Copy/Clone/Debug
traits.
Fixes #2096
|
|
Constant and static declaration have a 'static live time by default,
that is already elided since 1.17.
Clippy complains on this kind of strings that are present in the
generated code.
This patch remove the 'static live time for those strings when rustc >
1.17 via a new added RustFeature.
Fix #1612
Signed-off-by: Alberto Planas <aplanas@suse.com>
|
|
|
|
This previously produced a type alias which referred to itself,
which was clearly wrong and resulted in downstream code recursing
infinitely.
The problem case (per bug #2102) is:
template <typename> class B{};
template <typename c> class C {
public:
using U = B<c>;
};
class A : C<A> {
U u;
};
As far as I can tell, we parse clang's definition of B<A>; that leads
us to parse A; to find it has a field U which turns out to be of type
B<A>. And so we hit the line in item.rs which says:
debug!("Avoiding recursion parsing type: {:?}", ty);
and bail out, returning the original item ID: hence, a self-
referential typedef is created.
The 'fix' in this PR creates an opaque type in this case instead,
to avoid later infinite loops. It would be preferable to avoid this
situation in the first place, but presumably that would require
us to split the parsing phase into two:
1) types
2) fields within those types.
Fixes #2102.
|
|
The --explicit-padding flag would make bindgen try to add tail padding
to rust unions, by adding up the size of all the union fields and
subtracting from the size of the union as given by clang. The total size
of a union's fields is always larger than the union, so the subtraction
underflowed and bindgen produced padding fields larger than addressable
RAM.
|
|
|
|
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.
|
|
Fixes #2080
|
|
use the Default trait.
Fixes #2082
|
|
Fixes #1977 as of rust-lang/rust#74060 is available since Rust 1.47
Fixes #2041.
Closes #2070.
|
|
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.
|