Skip to content

Commit 1da7034

Browse files
committed
Fix opaque template test to exercise the cannot derive case
And also not just fields, but also base members.
1 parent aebf170 commit 1da7034

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

tests/expectations/tests/opaque-template-inst-member.rs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@ impl Default for OpaqueTemplate {
1212
fn default() -> Self { unsafe { ::std::mem::zeroed() } }
1313
}
1414
#[repr(C)]
15-
#[derive(Debug, Default, Copy)]
1615
pub struct ContainsOpaqueTemplate {
17-
pub mBlah: [u32; 11usize],
16+
pub mBlah: [u32; 101usize],
1817
pub mBaz: ::std::os::raw::c_int,
1918
}
2019
#[test]
2120
fn bindgen_test_layout_ContainsOpaqueTemplate() {
22-
assert_eq!(::std::mem::size_of::<ContainsOpaqueTemplate>() , 48usize ,
21+
assert_eq!(::std::mem::size_of::<ContainsOpaqueTemplate>() , 408usize ,
2322
concat ! ( "Size of: " , stringify ! ( ContainsOpaqueTemplate )
2423
));
2524
assert_eq! (::std::mem::align_of::<ContainsOpaqueTemplate>() , 4usize ,
@@ -32,10 +31,32 @@ fn bindgen_test_layout_ContainsOpaqueTemplate() {
3231
) , "::" , stringify ! ( mBlah ) ));
3332
assert_eq! (unsafe {
3433
& ( * ( 0 as * const ContainsOpaqueTemplate ) ) . mBaz as *
35-
const _ as usize } , 44usize , concat ! (
34+
const _ as usize } , 404usize , concat ! (
3635
"Alignment of field: " , stringify ! ( ContainsOpaqueTemplate
3736
) , "::" , stringify ! ( mBaz ) ));
3837
}
39-
impl Clone for ContainsOpaqueTemplate {
40-
fn clone(&self) -> Self { *self }
38+
impl Default for ContainsOpaqueTemplate {
39+
fn default() -> Self { unsafe { ::std::mem::zeroed() } }
40+
}
41+
#[repr(C)]
42+
pub struct InheritsOpaqueTemplate {
43+
pub _base: [u8; 401usize],
44+
pub wow: *mut ::std::os::raw::c_char,
45+
}
46+
#[test]
47+
fn bindgen_test_layout_InheritsOpaqueTemplate() {
48+
assert_eq!(::std::mem::size_of::<InheritsOpaqueTemplate>() , 416usize ,
49+
concat ! ( "Size of: " , stringify ! ( InheritsOpaqueTemplate )
50+
));
51+
assert_eq! (::std::mem::align_of::<InheritsOpaqueTemplate>() , 8usize ,
52+
concat ! (
53+
"Alignment of " , stringify ! ( InheritsOpaqueTemplate ) ));
54+
assert_eq! (unsafe {
55+
& ( * ( 0 as * const InheritsOpaqueTemplate ) ) . wow as *
56+
const _ as usize } , 408usize , concat ! (
57+
"Alignment of field: " , stringify ! ( InheritsOpaqueTemplate
58+
) , "::" , stringify ! ( wow ) ));
59+
}
60+
impl Default for InheritsOpaqueTemplate {
61+
fn default() -> Self { unsafe { ::std::mem::zeroed() } }
4162
}

tests/headers/opaque-template-inst-member.hpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,18 @@
33
template<typename T>
44
class OpaqueTemplate {
55
T mData;
6-
bool mCannotDebug[40];
6+
bool mCannotDebug[400];
77
};
88

9+
// This should not end up deriving Debug because its `mBlah` field cannot derive
10+
// Debug because the instantiation's definition cannot derive Debug.
911
class ContainsOpaqueTemplate {
1012
OpaqueTemplate<int> mBlah;
1113
int mBaz;
1214
};
15+
16+
// This shold not end up deriving Debug either, for similar reasons, although
17+
// we're exercising base member edges now.
18+
class InheritsOpaqueTemplate : public OpaqueTemplate<bool> {
19+
char* wow;
20+
};

0 commit comments

Comments
 (0)