summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2019-10-22 18:53:13 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2019-10-22 17:48:52 +0200
commitfa6a68d7c768cd9d4efc418f5d8d9ceb104704ad (patch)
treef308583ea8731eda342f797f29cbfb511f3b1fa4
parentc462b63ec4c0f14833e581a698ed870f19a66c61 (diff)
codegen: Handle opaque aliases to enums correctly.
Opaque types don't use the path to their aliased type but an opaque type like an array or primitive with the right alignment. Fixes #1599.
-rw-r--r--src/codegen/mod.rs4
-rw-r--r--tests/expectations/tests/issue-1599-opaque-typedef-to-enum.rs13
-rw-r--r--tests/headers/issue-1599-opaque-typedef-to-enum.h3
3 files changed, 19 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index c1bac621..f8db5bba 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -703,7 +703,8 @@ impl CodeGenerator for Type {
let mut outer_params = item.used_template_params(ctx);
- let inner_rust_type = if item.is_opaque(ctx, &()) {
+ let is_opaque = item.is_opaque(ctx, &());
+ let inner_rust_type = if is_opaque {
outer_params = vec![];
self.to_opaque(ctx, item)
} else {
@@ -756,6 +757,7 @@ impl CodeGenerator for Type {
'A'..='Z' | 'a'..='z' | '0'..='9' | ':' | '_' | ' ' => true,
_ => false,
}) && outer_params.is_empty() &&
+ !is_opaque &&
inner_item.expect_type().canonical_type(ctx).is_enum()
{
tokens.append_all(quote! {
diff --git a/tests/expectations/tests/issue-1599-opaque-typedef-to-enum.rs b/tests/expectations/tests/issue-1599-opaque-typedef-to-enum.rs
new file mode 100644
index 00000000..f98c6211
--- /dev/null
+++ b/tests/expectations/tests/issue-1599-opaque-typedef-to-enum.rs
@@ -0,0 +1,13 @@
+/* automatically generated by rust-bindgen */
+
+#![allow(
+ dead_code,
+ non_snake_case,
+ non_camel_case_types,
+ non_upper_case_globals
+)]
+
+pub const a_b: a = 0;
+pub const a_c: a = 1;
+pub type a = u32;
+pub type d = u32;
diff --git a/tests/headers/issue-1599-opaque-typedef-to-enum.h b/tests/headers/issue-1599-opaque-typedef-to-enum.h
new file mode 100644
index 00000000..85e845b8
--- /dev/null
+++ b/tests/headers/issue-1599-opaque-typedef-to-enum.h
@@ -0,0 +1,3 @@
+// bindgen-flags: --opaque-type d
+
+typedef enum a { b, c } d;