diff options
author | Nick Fitzgerald <fitzgen@gmail.com> | 2017-07-24 11:51:02 -0700 |
---|---|---|
committer | Nick Fitzgerald <fitzgen@gmail.com> | 2017-07-24 12:42:13 -0700 |
commit | 1da7034a2bb353c8ec492b6ce9aa77f3f5f04ffc (patch) | |
tree | eccbac38d565973a4c8e52c633128fea9a77ebe5 | |
parent | aebf1703a9d9d3dd7a922597ef50ece3b3cf8ba3 (diff) |
Fix opaque template test to exercise the cannot derive case
And also not just fields, but also base members.
-rw-r--r-- | tests/expectations/tests/opaque-template-inst-member.rs | 33 | ||||
-rw-r--r-- | tests/headers/opaque-template-inst-member.hpp | 10 |
2 files changed, 36 insertions, 7 deletions
diff --git a/tests/expectations/tests/opaque-template-inst-member.rs b/tests/expectations/tests/opaque-template-inst-member.rs index f7b23546..6e239521 100644 --- a/tests/expectations/tests/opaque-template-inst-member.rs +++ b/tests/expectations/tests/opaque-template-inst-member.rs @@ -12,14 +12,13 @@ impl Default for OpaqueTemplate { fn default() -> Self { unsafe { ::std::mem::zeroed() } } } #[repr(C)] -#[derive(Debug, Default, Copy)] pub struct ContainsOpaqueTemplate { - pub mBlah: [u32; 11usize], + pub mBlah: [u32; 101usize], pub mBaz: ::std::os::raw::c_int, } #[test] fn bindgen_test_layout_ContainsOpaqueTemplate() { - assert_eq!(::std::mem::size_of::<ContainsOpaqueTemplate>() , 48usize , + assert_eq!(::std::mem::size_of::<ContainsOpaqueTemplate>() , 408usize , concat ! ( "Size of: " , stringify ! ( ContainsOpaqueTemplate ) )); assert_eq! (::std::mem::align_of::<ContainsOpaqueTemplate>() , 4usize , @@ -32,10 +31,32 @@ fn bindgen_test_layout_ContainsOpaqueTemplate() { ) , "::" , stringify ! ( mBlah ) )); assert_eq! (unsafe { & ( * ( 0 as * const ContainsOpaqueTemplate ) ) . mBaz as * - const _ as usize } , 44usize , concat ! ( + const _ as usize } , 404usize , concat ! ( "Alignment of field: " , stringify ! ( ContainsOpaqueTemplate ) , "::" , stringify ! ( mBaz ) )); } -impl Clone for ContainsOpaqueTemplate { - fn clone(&self) -> Self { *self } +impl Default for ContainsOpaqueTemplate { + fn default() -> Self { unsafe { ::std::mem::zeroed() } } +} +#[repr(C)] +pub struct InheritsOpaqueTemplate { + pub _base: [u8; 401usize], + pub wow: *mut ::std::os::raw::c_char, +} +#[test] +fn bindgen_test_layout_InheritsOpaqueTemplate() { + assert_eq!(::std::mem::size_of::<InheritsOpaqueTemplate>() , 416usize , + concat ! ( "Size of: " , stringify ! ( InheritsOpaqueTemplate ) + )); + assert_eq! (::std::mem::align_of::<InheritsOpaqueTemplate>() , 8usize , + concat ! ( + "Alignment of " , stringify ! ( InheritsOpaqueTemplate ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const InheritsOpaqueTemplate ) ) . wow as * + const _ as usize } , 408usize , concat ! ( + "Alignment of field: " , stringify ! ( InheritsOpaqueTemplate + ) , "::" , stringify ! ( wow ) )); +} +impl Default for InheritsOpaqueTemplate { + fn default() -> Self { unsafe { ::std::mem::zeroed() } } } diff --git a/tests/headers/opaque-template-inst-member.hpp b/tests/headers/opaque-template-inst-member.hpp index 9ee356ad..7748007b 100644 --- a/tests/headers/opaque-template-inst-member.hpp +++ b/tests/headers/opaque-template-inst-member.hpp @@ -3,10 +3,18 @@ template<typename T> class OpaqueTemplate { T mData; - bool mCannotDebug[40]; + bool mCannotDebug[400]; }; +// This should not end up deriving Debug because its `mBlah` field cannot derive +// Debug because the instantiation's definition cannot derive Debug. class ContainsOpaqueTemplate { OpaqueTemplate<int> mBlah; int mBaz; }; + +// This shold not end up deriving Debug either, for similar reasons, although +// we're exercising base member edges now. +class InheritsOpaqueTemplate : public OpaqueTemplate<bool> { + char* wow; +}; |