summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;