summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/codegen/mod.rs6
-rw-r--r--tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-const-mod-enum.rs16
-rw-r--r--tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-enum.rs18
-rw-r--r--tests/headers/issue-1198-alias-rust-const-mod-enum.h13
-rw-r--r--tests/headers/issue-1198-alias-rust-enum.h14
5 files changed, 65 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 1801520a..1a948c05 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -2461,12 +2461,14 @@ impl CodeGenerator for Enum {
}
};
+ // ModuleConsts has higher precedence before Rust in order to avoid problems with
+ // overlapping match patterns
let variation = if self.is_bitfield(ctx, item) {
EnumVariation::Bitfield
- } else if self.is_rustified_enum(ctx, item) {
- EnumVariation::Rust
} else if self.is_constified_enum_module(ctx, item) {
EnumVariation::ModuleConsts
+ } else if self.is_rustified_enum(ctx, item) {
+ EnumVariation::Rust
} else {
// We generate consts by default
EnumVariation::Consts
diff --git a/tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-const-mod-enum.rs b/tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-const-mod-enum.rs
new file mode 100644
index 00000000..ed53fdf9
--- /dev/null
+++ b/tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-const-mod-enum.rs
@@ -0,0 +1,16 @@
+/* automatically generated by rust-bindgen */
+
+#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)]
+
+pub mod MyDupeEnum {
+ pub type Type = u32;
+ pub const A: Type = 0;
+ pub const A_alias: Type = 0;
+ pub const B: Type = 1;
+}
+pub mod MyOtherDupeEnum {
+ pub type Type = u32;
+ pub const C: Type = 0;
+ pub const C_alias: Type = 0;
+ pub const D: Type = 1;
+}
diff --git a/tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-enum.rs b/tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-enum.rs
new file mode 100644
index 00000000..b2902c89
--- /dev/null
+++ b/tests/expectations/tests/libclang-3.9/issue-1198-alias-rust-enum.rs
@@ -0,0 +1,18 @@
+/* automatically generated by rust-bindgen */
+
+#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)]
+
+pub const MyDupeEnum_A_alias: MyDupeEnum = MyDupeEnum::A;
+#[repr(u32)]
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+pub enum MyDupeEnum {
+ A = 0,
+ B = 1,
+}
+pub const MyOtherDupeEnum_C_alias: MyOtherDupeEnum = MyOtherDupeEnum::C;
+#[repr(u32)]
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+pub enum MyOtherDupeEnum {
+ C = 0,
+ D = 1,
+}
diff --git a/tests/headers/issue-1198-alias-rust-const-mod-enum.h b/tests/headers/issue-1198-alias-rust-const-mod-enum.h
new file mode 100644
index 00000000..944fac31
--- /dev/null
+++ b/tests/headers/issue-1198-alias-rust-const-mod-enum.h
@@ -0,0 +1,13 @@
+// bindgen-flags: --rustified-enum '.*' --constified-enum-module '.*'
+
+typedef enum MyDupeEnum {
+ A = 0,
+ A_alias = 0,
+ B,
+} MyDupeEnum;
+
+enum MyOtherDupeEnum {
+ C = 0,
+ C_alias = 0,
+ D,
+}; \ No newline at end of file
diff --git a/tests/headers/issue-1198-alias-rust-enum.h b/tests/headers/issue-1198-alias-rust-enum.h
new file mode 100644
index 00000000..ede44f0a
--- /dev/null
+++ b/tests/headers/issue-1198-alias-rust-enum.h
@@ -0,0 +1,14 @@
+// bindgen-flags: --rustified-enum '.*'
+
+
+typedef enum MyDupeEnum {
+ A = 0,
+ A_alias = 0,
+ B,
+} MyDupeEnum;
+
+enum MyOtherDupeEnum {
+ C = 0,
+ C_alias = 0,
+ D,
+}; \ No newline at end of file