diff options
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/codegen/impl_debug.rs | 2 | ||||
-rw-r--r-- | src/ir/ty.rs | 17 | ||||
-rw-r--r-- | tests/expectations/tests/derive-debug-mangle-name.rs | 112 | ||||
-rw-r--r-- | tests/expectations/tests/issue-1118-using-forward-decl.rs | 119 | ||||
-rw-r--r-- | tests/headers/derive-debug-mangle-name.h | 14 | ||||
-rw-r--r-- | tests/headers/issue-1118-using-forward-decl.hpp | 10 |
8 files changed, 268 insertions, 10 deletions
@@ -23,7 +23,7 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.31.1" +version = "0.31.2" dependencies = [ "cexpr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -13,7 +13,7 @@ name = "bindgen" readme = "README.md" repository = "https://github.com/rust-lang-nursery/rust-bindgen" documentation = "https://docs.rs/bindgen" -version = "0.31.1" +version = "0.31.2" build = "build.rs" include = [ diff --git a/src/codegen/impl_debug.rs b/src/codegen/impl_debug.rs index e0204f4d..ab934ed6 100644 --- a/src/codegen/impl_debug.rs +++ b/src/codegen/impl_debug.rs @@ -117,7 +117,7 @@ impl<'a> ImplDebug<'a> for Item { ctx: &BindgenContext, name: &str, ) -> Option<(String, Vec<quote::Tokens>)> { - let name_ident = ctx.rust_ident_raw(name); + let name_ident = ctx.rust_ident(name); // We don't know if blacklisted items `impl Debug` or not, so we can't // add them to the format string we're building up. diff --git a/src/ir/ty.rs b/src/ir/ty.rs index bfb4c48e..9a51c2b3 100644 --- a/src/ir/ty.rs +++ b/src/ir/ty.rs @@ -925,18 +925,21 @@ impl Type { CXCursor_TypeAliasDecl => { let current = cur.cur_type(); - debug_assert!(current.kind() == - CXType_Typedef); + debug_assert_eq!( + current.kind(), + CXType_Typedef + ); name = current.spelling(); let inner_ty = cur.typedef_type() .expect("Not valid Type?"); - inner = - Item::from_ty(&inner_ty, - cur, - Some(potential_id), - ctx); + inner = Ok(Item::from_ty_or_ref( + inner_ty, + cur, + Some(potential_id), + ctx, + )); } CXCursor_TemplateTypeParameter => { let param = diff --git a/tests/expectations/tests/derive-debug-mangle-name.rs b/tests/expectations/tests/derive-debug-mangle-name.rs new file mode 100644 index 00000000..4f2161fb --- /dev/null +++ b/tests/expectations/tests/derive-debug-mangle-name.rs @@ -0,0 +1,112 @@ +/* automatically generated by rust-bindgen */ + + +#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] + + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct perf_event_attr { + pub type_: ::std::os::raw::c_uint, + pub a: f32, + pub __bindgen_anon_1: perf_event_attr__bindgen_ty_1, +} +#[repr(C)] +#[derive(Copy, Clone)] +pub union perf_event_attr__bindgen_ty_1 { + pub b: ::std::os::raw::c_int, + pub c: ::std::os::raw::c_int, + _bindgen_union_align: u32, +} +#[test] +fn bindgen_test_layout_perf_event_attr__bindgen_ty_1() { + assert_eq!( + ::std::mem::size_of::<perf_event_attr__bindgen_ty_1>(), + 4usize, + concat!("Size of: ", stringify!(perf_event_attr__bindgen_ty_1)) + ); + assert_eq!( + ::std::mem::align_of::<perf_event_attr__bindgen_ty_1>(), + 4usize, + concat!("Alignment of ", stringify!(perf_event_attr__bindgen_ty_1)) + ); + assert_eq!( + unsafe { &(*(0 as *const perf_event_attr__bindgen_ty_1)).b as *const _ as usize }, + 0usize, + concat!( + "Alignment of field: ", + stringify!(perf_event_attr__bindgen_ty_1), + "::", + stringify!(b) + ) + ); + assert_eq!( + unsafe { &(*(0 as *const perf_event_attr__bindgen_ty_1)).c as *const _ as usize }, + 0usize, + concat!( + "Alignment of field: ", + stringify!(perf_event_attr__bindgen_ty_1), + "::", + stringify!(c) + ) + ); +} +impl Default for perf_event_attr__bindgen_ty_1 { + fn default() -> Self { + unsafe { ::std::mem::zeroed() } + } +} +impl ::std::fmt::Debug for perf_event_attr__bindgen_ty_1 { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + write!(f, "perf_event_attr__bindgen_ty_1 {{ union }}") + } +} +#[test] +fn bindgen_test_layout_perf_event_attr() { + assert_eq!( + ::std::mem::size_of::<perf_event_attr>(), + 12usize, + concat!("Size of: ", stringify!(perf_event_attr)) + ); + assert_eq!( + ::std::mem::align_of::<perf_event_attr>(), + 4usize, + concat!("Alignment of ", stringify!(perf_event_attr)) + ); + assert_eq!( + unsafe { &(*(0 as *const perf_event_attr)).type_ as *const _ as usize }, + 0usize, + concat!( + "Alignment of field: ", + stringify!(perf_event_attr), + "::", + stringify!(type_) + ) + ); + assert_eq!( + unsafe { &(*(0 as *const perf_event_attr)).a as *const _ as usize }, + 4usize, + concat!( + "Alignment of field: ", + stringify!(perf_event_attr), + "::", + stringify!(a) + ) + ); +} +impl Default for perf_event_attr { + fn default() -> Self { + unsafe { ::std::mem::zeroed() } + } +} +impl ::std::fmt::Debug for perf_event_attr { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + write!( + f, + "perf_event_attr {{ type: {:?}, a: {:?}, __bindgen_anon_1: {:?} }}", + self.type_, + self.a, + self.__bindgen_anon_1 + ) + } +} diff --git a/tests/expectations/tests/issue-1118-using-forward-decl.rs b/tests/expectations/tests/issue-1118-using-forward-decl.rs new file mode 100644 index 00000000..27537627 --- /dev/null +++ b/tests/expectations/tests/issue-1118-using-forward-decl.rs @@ -0,0 +1,119 @@ +/* automatically generated by rust-bindgen */ + + +#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] + + +pub type c = nsTArray; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct nsTArray_base { + pub d: *mut ::std::os::raw::c_int, +} +#[test] +fn bindgen_test_layout_nsTArray_base() { + assert_eq!( + ::std::mem::size_of::<nsTArray_base>(), + 8usize, + concat!("Size of: ", stringify!(nsTArray_base)) + ); + assert_eq!( + ::std::mem::align_of::<nsTArray_base>(), + 8usize, + concat!("Alignment of ", stringify!(nsTArray_base)) + ); + assert_eq!( + unsafe { &(*(0 as *const nsTArray_base)).d as *const _ as usize }, + 0usize, + concat!( + "Alignment of field: ", + stringify!(nsTArray_base), + "::", + stringify!(d) + ) + ); +} +impl Default for nsTArray_base { + fn default() -> Self { + unsafe { ::std::mem::zeroed() } + } +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct nsTArray { + pub _base: nsTArray_base, +} +impl Default for nsTArray { + fn default() -> Self { + unsafe { ::std::mem::zeroed() } + } +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct nsIContent { + pub foo: nsTArray, +} +#[test] +fn bindgen_test_layout_nsIContent() { + assert_eq!( + ::std::mem::size_of::<nsIContent>(), + 8usize, + concat!("Size of: ", stringify!(nsIContent)) + ); + assert_eq!( + ::std::mem::align_of::<nsIContent>(), + 8usize, + concat!("Alignment of ", stringify!(nsIContent)) + ); + assert_eq!( + unsafe { &(*(0 as *const nsIContent)).foo as *const _ as usize }, + 0usize, + concat!( + "Alignment of field: ", + stringify!(nsIContent), + "::", + stringify!(foo) + ) + ); +} +impl Default for nsIContent { + fn default() -> Self { + unsafe { ::std::mem::zeroed() } + } +} +extern "C" { + #[link_name = "\u{1}_Z35Gecko_GetAnonymousContentForElementv"] + pub fn Gecko_GetAnonymousContentForElement() -> *mut nsTArray; +} +#[test] +fn __bindgen_test_layout_nsTArray_open0_ptr_nsIContent_close0_instantiation() { + assert_eq!( + ::std::mem::size_of::<nsTArray>(), + 8usize, + concat!("Size of template specialization: ", stringify!(nsTArray)) + ); + assert_eq!( + ::std::mem::align_of::<nsTArray>(), + 8usize, + concat!( + "Alignment of template specialization: ", + stringify!(nsTArray) + ) + ); +} +#[test] +fn __bindgen_test_layout_nsTArray_open0_ptr_nsIContent_close0_instantiation_1() { + assert_eq!( + ::std::mem::size_of::<nsTArray>(), + 8usize, + concat!("Size of template specialization: ", stringify!(nsTArray)) + ); + assert_eq!( + ::std::mem::align_of::<nsTArray>(), + 8usize, + concat!( + "Alignment of template specialization: ", + stringify!(nsTArray) + ) + ); +} diff --git a/tests/headers/derive-debug-mangle-name.h b/tests/headers/derive-debug-mangle-name.h new file mode 100644 index 00000000..1cd7db63 --- /dev/null +++ b/tests/headers/derive-debug-mangle-name.h @@ -0,0 +1,14 @@ +// bindgen-flags: --impl-debug +struct perf_event_attr { + + /* + * Major type: hardware/software/tracepoint/etc. + */ + unsigned int type; + + float a; + union { + int b; + int c; + }; +}; diff --git a/tests/headers/issue-1118-using-forward-decl.hpp b/tests/headers/issue-1118-using-forward-decl.hpp new file mode 100644 index 00000000..b6ea63f6 --- /dev/null +++ b/tests/headers/issue-1118-using-forward-decl.hpp @@ -0,0 +1,10 @@ +template <class> class nsTArray; +template <class b> using c = nsTArray<b>; +class nsTArray_base { + int *d; +}; +template <class> class nsTArray : nsTArray_base {}; +class nsIContent { + nsTArray<nsIContent *> foo; +}; +nsTArray<nsIContent*> *Gecko_GetAnonymousContentForElement(); |