summaryrefslogtreecommitdiff
path: root/tests
AgeCommit message (Collapse)Author
2022-02-18tests: Remove clang-3.9 expectationsDarren Kulp
2022-01-29Mark all vtable functions as `unsafe extern "C"`Justin Moore
2022-01-29On second thought, don't generate virtual destructorsDr. Chat
2022-01-29Mark all vtable functions as `pub`Dr. Chat
2022-01-29Account for virtual destructorsDr. Chat
2022-01-29Extremely basic Vtable generationDr. Chat
2021-12-29Remove deprecation and ReplaceMikuroXina
2021-12-29Replace generate with gen in testMikuroXina
2021-12-29codegen: Don't automatically derive Debug and Copy for non-rust enums.Emilio Cobos Álvarez
Fixes #2143
2021-12-07Fix warnings on testsMikuroXina
2021-11-26Add --blocklist-file option (#2097)David Drysdale
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
2021-11-26Drop 'static for pub const strings for rustc>1.17Alberto Planas
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>
2021-10-30context: Escape the try keyword properlyFionera
2021-10-27Avoid case of a self-referential type alias.Adrian Taylor
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.
2021-10-27Don't generate 2^64 byte padding fields on unionsTheodore Dubois
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.
2021-10-27Fix warningsMikuroXina
2021-08-24Detect and avoid cycles when resolving items.Patrick Walton
These can happen in certain cases involving incomplete qualified dependent types. To avoid looping forever, we need to check for them. Closes #2085.
2021-08-24Add testsChristian Vetter
2021-08-24Use annotations on enumerations: This enables users to add additional ↵Christian Vetter
derives, or prevent deriving traits Fixes #2076
2021-07-31Also implement div-style must_use_type annotation.Karel Peeters
2021-07-31Implement must_use_type commandline flag and builder option.Karel Peeters
2021-07-31Don't assume that an inner class declaration always immediately yields aPatrick Walton
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.
2021-07-31Canonicalize types before looking for their definitions.Patrick Walton
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.
2021-07-26docs: Fix rustfmt install steps.Emilio Cobos Álvarez
Fixes #2080
2021-07-26codegen: Don't check large_arrays to generate bitfield ctors because they ↵Emilio Cobos Álvarez
use the Default trait. Fixes #2082
2021-07-16Let Rust derive everything but Default for large arrays in 1.47 and laterIan P. Cooke
Fixes #1977 as of rust-lang/rust#74060 is available since Rust 1.47 Fixes #2041. Closes #2070.
2021-07-16Allow explicit padding (#2060)Eric Seppanen
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.
2021-06-21comp: Do a better effort of computing packedness before bitfield units.Emilio Cobos Álvarez
Fixes #2067
2021-05-18Identify forward declarations in params. (#2052)Adrian Taylor
2021-05-11Zero out padding in custom Default trait implementations (#2051)Daniel Xu
* 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.
2021-04-30Don't generate bindings for deleted member functions. (#2044)Martin Boehme
Closes #2044 Fixes #2043 See https://github.com/rust-lang/rust-bindgen/issues/2043 for details.
2021-04-30Add a C naming option (#2045)Boris-Chengbiao Zhou
Closes #2045. Fixes #1252.
2021-04-27Translate types that were declared inside functions as opaque types.Patrick Walton
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.
2021-04-24Support emitting Makefile-syntax depfiles like gcc/clang/rustc.Adam Perry
Needed to auto-bindgen with a ninja build without the build graph going stale.
2021-04-11Fix docstring comment for constantsNico Chatzi
2021-04-03codegen: Deal with overloads in method code generation.Emilio Cobos Álvarez
Fixes #2019
2021-04-03codegen: Don't use a `sym` temporary in dynamic library code.Emilio Cobos Álvarez
Fixes #2014.
2021-04-03Add a flag to ensure all symbols are resolved when a library is loadedDr. Chat
2021-03-22Merge pull request #2007 from jethrogb/jb/issue-1454-altEmilio Cobos Álvarez
Add callback to check derives for blocklisted types
2021-03-22Add from_library for generated dynamic library structs (#2011)Wang, Chi
2021-03-22Add callback to check derives for blocklisted typesJethro Beekman
Fixes #1454 #2003
2021-03-22Use original name when checking allowlist for anonymous enum variantsJethro Beekman
2021-03-22Add test infrastructure for ParseCallbacksJethro Beekman
2021-03-14Add option to translate enum integer types to native Rust integer typesJethro Beekman
Fixes #430
2021-03-11Revert "Add flag to ignore type blocklist when computing derive information"Emilio Cobos Álvarez
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.
2021-03-11Add flag to ignore type blocklist when computing derive informationJethro Beekman
Fixes #1454
2021-03-11Fix typo in roundtrip test error messageJethro Beekman
2021-02-18Rename whitelist -> allowlist and blacklist -> blocklistMarcel Hlopko
For the commandline arguments I added undocumented aliases to old flags, to stay backwards compatible.
2021-02-15tests: Guess modern libclang version when we fail to parse a version.Emilio Cobos Álvarez
Should fix the test failures described in #1991 and #1975 on modern Mac.
2021-02-07codegen: Track union layout more accurately.Emilio Cobos Álvarez
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.