summaryrefslogtreecommitdiff
path: root/tests/headers
AgeCommit message (Collapse)Author
2022-10-04split the repo into a workspaceChristian Poveda
remove `clap` dependency :tada: update the book installation instructions
2022-10-02Enables blocklisting of Objective-C methodsCameron Mulhern
2022-09-28Don't traverse through special-cased <stdint.h> types.Geoffry Song
2022-09-23Map size_t to usize by default and check compatibility (fixes #1901, #1903)Geoffrey Thomas
This addresses the underlying issue identified in #1671, that size_t (integer that can hold any object size) isn't guaranteed to match usize, which is defined more like uintptr_t (integer that can hold any pointer). However, on almost all platforms, this is true, and in fact Rust already uses usize extensively in contexts where size_t would be more appropriate, such as slice indexing. So, it's better for ergonomics when interfacing with C code to map the C size_t type to usize. (See also discussion in rust-lang/rust#65473 about how usize really should be defined as size_t, not uintptr_t.) The previous fix for #1671 removed the special case for size_t and defaulted to binding it as a normal typedef. This change effectively reverts that and goes back to mapping size_t to usize (and ssize_t to isize), but also ensures that if size_t is emitted, the typedef'd type of size_t in fact is compatible with usize (defined by checking that the size and alignment match the target pointer width). For (hypothetical) platforms where this is not true, or for compatibility with the default behavior of bindgen between 0.53 and this commit, onwards, you can disable this mapping with --no-size_t-is-usize.
2022-09-22update to rust 1.64Christian Poveda
2022-09-22put tests behind the `nightly` featureChristian Poveda
2022-09-22use `#[feature(core_ffi_c)]` when availableChristian Poveda
2022-09-22test: add test for GH-422Amanjeev Sethi
GitHub issue 422 was fixed but needs a test. https://github.com/rust-lang/rust-bindgen/issues/422 Signed-off-by: Amanjeev Sethi <aj@amanjeev.com>
2022-09-23Add option to deduplicate extern blocks (#2258)Christian Poveda
2022-09-23Option to wrap union members in ManuallyDrop (#2185)Poliorcetics
2022-09-22add the `-- -std=c++11` flagChristian Poveda
2022-09-22handle c++ `[[noreturn]]` attributeChristian Poveda
2022-09-22gate `_Noreturn` detection behind `--enable-fucntion-attribute-detection`Christian Poveda
2022-09-22add testsChristian Poveda
2022-09-11add `--newtype-global-enum` optionChristian Poveda
2022-08-25Generate opaque type for template param dependent bit field widthCollin Baker
libclang's API does not provide a straightforward way to check for this, and calling clang_getFieldDeclBitWidth is actively unsafe in this case. See https://github.com/llvm/llvm-project/issues/56644 We probably can't generate reasonable bindings for such a type, so make the binding opaque. Ideally libclang would report if the bit width could not be evaluated. Unfortunately making such a change would mean bumping the minimum libclang version from 6.0 to 15.0. Instead, add logic to traverse the AST subtree starting from the field's bit width specifier looking for template parameters. If we find one, we make the resulting type opaque.
2022-08-25Sorting the output semantically (#2254)Amanjeev Sethi
Generated code needs some sorting in a way that is semantically appealing. The request[1] asks for basic sorting like "types are declared first, then all structs, then all consts, then all function signatures, etc. [1] https://github.com/rust-lang/rust-bindgen/issues/1743 Signed-off-by: Amanjeev Sethi <aj@amanjeev.com> Co-authored-by: Christian Poveda <christian.poveda@ferrous-systems.com> Co-authored-by: Darren Kulp <darren@kulp.ch>
2022-08-18test warning emissionChristian Poveda
2022-08-09Add test coverage for 'await' and 'async' keywordsBryn M. Reeves
Add declarations for 'await' and 'async' variables to keywords.h and update the expectations in keywords.rs.
2022-07-25ty: Use canonical type to access pointee.Emilio Cobos Álvarez
Using the canonical type fixes this but changes the output of some tests (in particular, pointer to typedefs now point to the underlying type). So do this only in known-bad cases. Fixes #2244
2022-06-05Look for `must_use` on typdefs in function returnIan Chamberlain
Closes #2206
2022-03-15add attributes to dynamic functionsEmil Gardström
this includes comments and must_use annotations
2022-03-15disable some tests on windowsEmil Gardström
This is due to differences in representation of `signed long` and `unsigned long` on most Linux-based systems and Windows (`64` vs. `32` bits)
2022-03-15disable layout tests for `derive-custom` and `convert-cpp-comment-to-rust` testEmil Gardström
2022-03-15tests: Enable a test with a const template paramDarren Kulp
This should have been added in #2155 but was missed then.
2022-03-15Added support for `vectorcall` ABIDavid Cole
2022-03-15Fix macOS test expectationsSebastian Imlay
* 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.
2022-02-18Add --allowlist-file optionDavid Drysdale
2022-01-29Extremely basic Vtable generationDr. Chat
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-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-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-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-11Fix docstring comment for constantsNico Chatzi