Skip to content

Commit 02cdafe

Browse files
committed
Test to exercise the can-derive-debug case for opaque templates
1 parent 1da7034 commit 02cdafe

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/* automatically generated by rust-bindgen */
2+
3+
4+
#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)]
5+
6+
7+
#[repr(C)]
8+
#[derive(Debug, Copy, Clone)]
9+
pub struct OpaqueTemplate {
10+
}
11+
impl Default for OpaqueTemplate {
12+
fn default() -> Self { unsafe { ::std::mem::zeroed() } }
13+
}
14+
#[repr(C)]
15+
#[derive(Debug, Default, Copy)]
16+
pub struct ContainsOpaqueTemplate {
17+
pub mBlah: u32,
18+
pub mBaz: ::std::os::raw::c_int,
19+
}
20+
#[test]
21+
fn bindgen_test_layout_ContainsOpaqueTemplate() {
22+
assert_eq!(::std::mem::size_of::<ContainsOpaqueTemplate>() , 8usize ,
23+
concat ! ( "Size of: " , stringify ! ( ContainsOpaqueTemplate )
24+
));
25+
assert_eq! (::std::mem::align_of::<ContainsOpaqueTemplate>() , 4usize ,
26+
concat ! (
27+
"Alignment of " , stringify ! ( ContainsOpaqueTemplate ) ));
28+
assert_eq! (unsafe {
29+
& ( * ( 0 as * const ContainsOpaqueTemplate ) ) . mBlah as *
30+
const _ as usize } , 0usize , concat ! (
31+
"Alignment of field: " , stringify ! ( ContainsOpaqueTemplate
32+
) , "::" , stringify ! ( mBlah ) ));
33+
assert_eq! (unsafe {
34+
& ( * ( 0 as * const ContainsOpaqueTemplate ) ) . mBaz as *
35+
const _ as usize } , 4usize , concat ! (
36+
"Alignment of field: " , stringify ! ( ContainsOpaqueTemplate
37+
) , "::" , stringify ! ( mBaz ) ));
38+
}
39+
impl Clone for ContainsOpaqueTemplate {
40+
fn clone(&self) -> Self { *self }
41+
}
42+
#[repr(C)]
43+
#[derive(Debug, Copy)]
44+
pub struct InheritsOpaqueTemplate {
45+
pub _base: u8,
46+
pub wow: *mut ::std::os::raw::c_char,
47+
}
48+
#[test]
49+
fn bindgen_test_layout_InheritsOpaqueTemplate() {
50+
assert_eq!(::std::mem::size_of::<InheritsOpaqueTemplate>() , 16usize ,
51+
concat ! ( "Size of: " , stringify ! ( InheritsOpaqueTemplate )
52+
));
53+
assert_eq! (::std::mem::align_of::<InheritsOpaqueTemplate>() , 8usize ,
54+
concat ! (
55+
"Alignment of " , stringify ! ( InheritsOpaqueTemplate ) ));
56+
assert_eq! (unsafe {
57+
& ( * ( 0 as * const InheritsOpaqueTemplate ) ) . wow as *
58+
const _ as usize } , 8usize , concat ! (
59+
"Alignment of field: " , stringify ! ( InheritsOpaqueTemplate
60+
) , "::" , stringify ! ( wow ) ));
61+
}
62+
impl Clone for InheritsOpaqueTemplate {
63+
fn clone(&self) -> Self { *self }
64+
}
65+
impl Default for InheritsOpaqueTemplate {
66+
fn default() -> Self { unsafe { ::std::mem::zeroed() } }
67+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// bindgen-flags: --opaque-type 'OpaqueTemplate'
2+
3+
// This is like `opaque-template-inst-member.hpp` except exercising the cases
4+
// where we are OK to derive Debug.
5+
6+
template<typename T>
7+
class OpaqueTemplate {
8+
T mData;
9+
};
10+
11+
// Should derive Debug.
12+
class ContainsOpaqueTemplate {
13+
OpaqueTemplate<int> mBlah;
14+
int mBaz;
15+
};
16+
17+
// Should also derive Debug.
18+
class InheritsOpaqueTemplate : public OpaqueTemplate<bool> {
19+
char* wow;
20+
};

0 commit comments

Comments
 (0)