diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-09-25 12:47:58 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-25 12:47:58 -0500 |
commit | 8f3c5753e3c61b715771dec1614170eb7bd3e214 (patch) | |
tree | 9e6f3e3d7fb6b9c0e2a1f2f9d370f5fdba59afe4 | |
parent | f5b6e0029f3faffd725620b2a70e298f144a2419 (diff) | |
parent | 39765b85d5bca4346f26cfd67c5a5a8b15a30203 (diff) |
Auto merge of #1030 - emilio:repr, r=fitzgen
codegen: Avoid generating wrong type for enums with unknown representation
Fixes #1025
-rw-r--r-- | src/codegen/mod.rs | 5 | ||||
-rw-r--r-- | tests/expectations/tests/issue-1025-unknown-enum-repr.rs | 12 | ||||
-rw-r--r-- | tests/headers/issue-1025-unknown-enum-repr.hpp | 4 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 0da01175..895422b0 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -2426,7 +2426,10 @@ impl CodeGenerator for Enum { let repr = self.repr() .and_then(|repr| repr.try_to_rust_ty_or_opaque(ctx, &()).ok()) - .unwrap_or_else(|| helpers::ast_ty::raw_type(ctx, repr_name)); + .unwrap_or_else(|| { + let repr_name = ctx.rust_ident_raw(repr_name); + quote! { #repr_name } + }); let mut builder = EnumBuilder::new( &name, diff --git a/tests/expectations/tests/issue-1025-unknown-enum-repr.rs b/tests/expectations/tests/issue-1025-unknown-enum-repr.rs new file mode 100644 index 00000000..26510910 --- /dev/null +++ b/tests/expectations/tests/issue-1025-unknown-enum-repr.rs @@ -0,0 +1,12 @@ +/* automatically generated by rust-bindgen */ + + +#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] + + +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct a { + pub _address: u8, +} +pub type a__bindgen_ty_1 = i32; diff --git a/tests/headers/issue-1025-unknown-enum-repr.hpp b/tests/headers/issue-1025-unknown-enum-repr.hpp new file mode 100644 index 00000000..589b3c25 --- /dev/null +++ b/tests/headers/issue-1025-unknown-enum-repr.hpp @@ -0,0 +1,4 @@ + +template <typename> class a { + enum {}; +}; |