summaryrefslogtreecommitdiff
path: root/src/ir
AgeCommit message (Collapse)Author
2022-10-04split the repo into a workspaceChristian Poveda
remove `clap` dependency :tada: update the book installation instructions
2022-10-03address clippy lintsChristian Poveda
2022-10-03Merge pull request #2285 from ferrous-systems/clone-optionsChristian Poveda
Make `BindgenOptions` clonable
2022-10-03remove referenceChristian Poveda
2022-09-28Don't traverse through special-cased <stdint.h> types.Geoffry Song
2022-09-26make `BindgenOptions` clonableChristian Poveda
2022-09-22codegen: Implement manuallydrop fields better.Emilio Cobos Álvarez
This doesn't change behavior but makes the code make more sense.
2022-09-22handle `__attribute__((noreturn))` attributeChristian Poveda
2022-09-22handle c++ `[[noreturn]]` attributeChristian Poveda
2022-09-22find all attributes in a single passChristian Poveda
2022-09-22gate `_Noreturn` detection behind `--enable-fucntion-attribute-detection`Christian Poveda
2022-09-22check for noreturn attributeChristian Poveda
2022-09-22add `is_divergent` fieldChristian Poveda
2022-09-11add `--newtype-global-enum` optionChristian Poveda
2022-09-08fix clippy lintsChristian Poveda
2022-09-05replace the `TraversalPredicate` trait with an alias typeChristian Poveda
2022-09-01address clippy lintsChristian 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-18rustfmtChristian Poveda
2022-08-18emit warnings laterChristian Poveda
2022-08-18store warnings and emit them laterChristian Poveda
2022-07-27adds 'await' to list of matches in 'rust_mangle'Bryn M. Reeves
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-05Fix some clippy warningsDarren Kulp
cargo clippy --fix --tests cargo +nightly fmt
2022-06-05ir: Centralize must_use checks and simplify codegen.Emilio Cobos Álvarez
2022-06-05Look for `must_use` on typdefs in function returnIan Chamberlain
Closes #2206
2022-03-15ir: Make TargetInfo::new infallibleDarren Kulp
Now that we require Clang 5.0, there is no way for this function to return None.
2022-03-15Added support for `vectorcall` ABIDavid Cole
2022-02-18Add --allowlist-file optionDavid Drysdale
2022-02-18parser: Simplify handle_function_macro for clang 4.0+Darren Kulp
2022-02-18parser: Simplify parse_macro for clang 4.0+Darren Kulp
Here we delete a workaround that is no longer needed.
2021-12-07Fix warnings on testsMikuroXina
2021-12-07Remove fields never readMikuroXina
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-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-27Shorten patternsMikuroXina
2021-10-27Bring back commentMikuroXina
2021-10-27Extract as is_reached_limitMikuroXina
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-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-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-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-30ir: Use early return in c_naming_prefix.Emilio Cobos Álvarez