summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2017-06-16codegen: Respect prepend_enum_name in constified variants.Emilio Cobos Álvarez
Fixes #755
2017-06-16Correct mangling hack for win32Xidorn Quan
2017-06-15Auto merge of #750 - emilio:that-bug-is-going-to-hunt-me-down, r=fitzgenbors-servo
ir: Make the workaround for LLVM bug 9069 more reliable. Should fix https://github.com/zzeroo/libmodbus-rs/issues/4
2017-06-15ir: Correct mac target check.Emilio Cobos Álvarez
Because I'm stupid.
2017-06-15ir: Make the workaround for LLVM bug 9069 more reliable.Emilio Cobos Álvarez
Should fix https://github.com/zzeroo/libmodbus-rs/issues/4
2017-06-14Add typedef/namespace tests for module const enumTravis Finkenauer
2017-06-11Convert comment to a doc commentTravis Finkenauer
2017-06-11Adds `--constified-enum-module` option per #699Travis Finkenauer
2017-06-10ir: Prevent integer overflow when using word-size bitfields.Emilio Cobos Álvarez
Fixes #739
2017-06-05ir: Fix a bunch of bitfield correctness issues.Emilio Cobos Álvarez
In particular, the "flush the allocation unit" logic is only valid for ms_structs (that is, MSVC). It's slightly annoying to have this different behavior, but it'd work just fine if we'd turn that on for MSVC. This patch doesn't do that, yet at least, and adds tests for all the weird bitfield alignments around. Fixes #726 (and another set of hidden issues by the old code).
2017-06-02ir: Give a better error message for unknown ABI.Emilio Cobos Álvarez
Fixes #727
2017-06-01ir: Use the mangling hack in win32 too.Emilio Cobos Álvarez
Fixes #593 Fixes #728
2017-06-01Add a way to get the target triple, and do our best guess at it until we ↵Emilio Cobos Álvarez
have proper clang support.
2017-05-26ir: Don't panic when finding an unknown calling convention until code ↵Emilio Cobos Álvarez
generation.
2017-05-25Allow asserting expectations across different libclang versionsNick Fitzgerald
Rather than having a tests that we only run if libclang >= 3.9, this makes the test suite dynamically detect when we have different expectations for different libclang versions. It does this by adding `tests/expectations/tests/libclang-$VERSION` directories, and `testing_only_libclang_$VERSION` features that are consulted when the usual expectation file does not exist. Fixes #697
2017-05-24Fix bitfield generation bug with const functionzzhu
Const function can't have variables or blocks.
2017-05-24Fix osx mangling hackzzhu
Rust automatically adds one _ in the symbol. If we don't remove it, we will endup getting three _.
2017-05-20codegen: Reuse the next_child_local_id hack for template instantiations.Emilio Cobos Álvarez
This should be good enough, following the pattern of anonymous items, and should prevent most of the current noise in stylo updates. Closes #620 Fixes #619
2017-05-19Flatten nesting in Bitfield::extend_ctor_implNick Fitzgerald
This commit flattens the nesting in `Bitfield::extend_ctor_impl`, as requested in review, because it was getting pretty deep. Should be easier to read now.
2017-05-19Add bitfield allocation unit constructorsNick Fitzgerald
This commit gives bindgen the ability to generate constructors for bitfield allocation units. This enables more ergonomic use of struct literals for bindings structs that contain bitfields. Additionally, when we are generating unstable Rust, these constructors are marked as const functions. This enables the creation of const binding structs that contain bitfields.
2017-05-18Move bitfields into the IRNick Fitzgerald
This commit moves bitfields and the computation of their allocation units into the IR. They were previously computed on-the-fly during code generation. In addition to breaking up and compartmentalizaing a portion of the gargantuan `CodeGeneration` implementation for `CompInfo`, this paves the way for adding const-fn bitfield unit constructors.
2017-05-10Add other bitwise ops for bitflag enumsJon Gjengset
2017-05-10Auto merge of #696 - emilio:template-alias-inst, r=fitzgenbors-servo
ir: Handle properly template alias instantiations in clang >3.9
2017-05-10ir: Handle properly template alias instantiations in clang >3.9.Emilio Cobos Álvarez
This fixes tests/expectations/tests/type_alias_template_specialized.rs in those clang versions (without regressions, hopefully), and makes the behavior the proper one, without needing replacements.
2017-05-10ir: Handle default template parameters in libclang >3.9.Emilio Cobos Álvarez
Fixes #585
2017-05-08codegen: Make phantom fields public.v0.25.0Emilio Cobos Álvarez
Otherwise you can't construct structs outside of the bindings file, which is breaking. Also, given the previous change was breaking and I didn't notice, I yanked 0.24.1.
2017-05-08ir: Don't assume template instantiation argument with vtable implies vtable.Emilio Cobos Álvarez
2017-05-08Bump clang-sys to 0.17.0Kyle Mayes
2017-05-05Emit `PhantomData<UnsafeCell<T>>` members for all generic parametersKowasaki
This makes generated generic structs lifetime invariant, since we cannot know the C++ type's true variance. Fixes #506
2017-05-03objc: Fix broken option handlingMikko Lehtonen
2017-05-03objc: Handle class and instance method with same nameMikko Lehtonen
Prefixes the clashing class method with class_ prefix
2017-05-03objc: Fix infinite recursionMikko Lehtonen
While parsing a Objective C property with function pointer type, bindgen hanged and died. This is still not generating valid code function signature for the property, but at least it is not dying. The actual fix was proposed by emilio.
2017-05-03objc: Handle template paramsMikko Lehtonen
The objetive-c template type params were handled as Typedefs so every interface generated its own, clashing in the namespace. This now maps them to id.
2017-05-01Auto merge of #681 - fitzgen:allow-multiple-headers, r=emiliobors-servo
Generate bindings to all headers passed to `Builder::header` Inspired by real misconfiguration from inside stylo. The previous behavior was that it would reconfigure the builder to generate bindings to the last header `Builder::header` was invoked with. This was not what people would expect: they expected it to generate bindings for all of the headers, and were accidentally misconfiguring their builders. This is a breaking change, but moves us inline with users' expectations. r? @emilio
2017-05-01Auto merge of #680 - emilio:nested-ns, r=fitzgenbors-servo
ir: Support nested namespace specifiers. Fixes #677
2017-05-01Generate bindings to all headers passed to `Builder::header`Nick Fitzgerald
The previous behavior was that it would reconfigure the builder to generate bindings to the last header `Builder::header` was invoked with. This was not what people would expect: they expected it to generate bindings for all of the headers, and were accidentally misconfiguring their builders. This is a breaking change, but moves us inline with users' expectations.
2017-05-01ir: Support nested namespace specifiers.Emilio Cobos Álvarez
2017-05-01Remove rustc-serialize dependency.Emilio Cobos Álvarez
Fixes #659
2017-05-01Trace opaque types' template parameters and inner typesNick Fitzgerald
The template parameter usage analysis needs to see the template parameters' definitions and have edges from any inner type to the parent in order to propagate data flow through dependencies properly. Fixes #674
2017-04-28Clarify wording of command line helpTravis Finkenauer
2017-04-26Fix blacklisting and fix instantiations in the template analysisNick Fitzgerald
For correctness, I now realize that we need to consider the full transitive closure of whitelisted items, including blacklisted items that we would otherwise not consider as whitelisted. We need this so that the data flow propagates properly through dependencies that may or may not be blacklisted. This means that tracing infrastructure needs to trace items regardless if they are hidden or blacklisted. It is now the responsibility of consumers of a traversal to filter out such items if they are unwanted. I did this by turning the `ir::context::WhitelistedItems` type alias into a proper struct that performs the filtering. This approach avoids changing the many callers of whitelisted items traversal iteration. Additionally, and equally importantly, I realized that the case of template instantiations' template usages were subtly wrong. Before this commit, we only considered a template argument used if it itself was a template parameter. This breaks down in the face of template instantiations used as arguments to another template instantiation. If the inner instantiation used a template parameter, we would accidentally lose that usage. For example: ```c++ template <class T> struct Foo { // Direct usage of a template parameter T in an instantiation always worked. Bar<T> member; // While indirect usage of a template parameter nested within another // instantiation did NOT previously work. Bar< Qux<T> > another_member; }; ``` The solution is to take the union of each template arguments' template usages, not the template arguments themselves but only if they were themselves a template parameter. Obvious in retrospect!
2017-04-24Auto merge of #657 - emilio:cxx-mangling, r=fitzgenbors-servo
ir: Try to get C++ manglings with the appropriate API first. As pointed out in #653, clang 3.8 asserts when trying to mangle a C++ constructor or a destructor. The following patch tries to use the `clang_Cursor_getCXXManglings` function first. This assumes that the last mangling we're interested in is the proper one, which seems to be true looking at LLVM, and on trunk on my machine. Fixes #653
2017-04-24Auto merge of #656 - emilio:fn-collision, r=fitzgenbors-servo
codegen: Change forward-declared types to avoid collisions with functions. Fixes #654
2017-04-24Fix doc commentsTravis Finkenauer
2017-04-23ir: Try to get C++ manglings with the appropriate API first.Emilio Cobos Álvarez
As pointed out in #653, clang 3.8 asserts when trying to mangle a C++ constructor or a destructor. The following patch tries to use the `clang_Cursor_getCXXManglings` function first. This assumes that the last mangling we're interested in is the proper one, which seems to be true looking at LLVM, and on trunk on my machine.
2017-04-23codegen: Change forward-declared types to avoid collisions with functions.Emilio Cobos Álvarez
Fixes #654
2017-04-19Resolve blacklisted instantiations' args through refs and aliasesNick Fitzgerald
When resolving a template argument in an instantiation of a blacklisted template, we should resolve through type references and aliases so that we don't accidentally lose template parameter usage information. Basically, this case should have been in bce1330, but slipped through the cracks. Fixes #645.
2017-04-19ir: consider all nested definitions inside structs to be inner types.Emilio Cobos Álvarez
Fixes #643
2017-04-18Auto merge of #641 - emilio:anon-struct-typedef, r=fitzgenbors-servo
ir: Ensure we check for typedefs of anonymous structs at the right time. They appear later in the clang AST, so we need to check for them as a special-case before flushing the new field.
2017-04-18ir: Ensure we check for typedefs of anonymous structs at the right time.Emilio Cobos Álvarez
They appear later in the clang AST, so we need to check for them as a special-case before flushing the new field. Fixes #639