112a9d9c8Sopenharmony_ci#![allow(
212a9d9c8Sopenharmony_ci    dead_code,
312a9d9c8Sopenharmony_ci    non_snake_case,
412a9d9c8Sopenharmony_ci    non_camel_case_types,
512a9d9c8Sopenharmony_ci    non_upper_case_globals
612a9d9c8Sopenharmony_ci)]
712a9d9c8Sopenharmony_ci
812a9d9c8Sopenharmony_ci#[repr(C)]
912a9d9c8Sopenharmony_cipub struct BaseWithVtable__bindgen_vtable {}
1012a9d9c8Sopenharmony_ci/// This should have an explicit vtable.
1112a9d9c8Sopenharmony_ci#[repr(C)]
1212a9d9c8Sopenharmony_ci#[derive(Debug, Copy, Clone)]
1312a9d9c8Sopenharmony_cipub struct BaseWithVtable<T> {
1412a9d9c8Sopenharmony_ci    pub vtable_: *const BaseWithVtable__bindgen_vtable,
1512a9d9c8Sopenharmony_ci    pub t: T,
1612a9d9c8Sopenharmony_ci    pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>,
1712a9d9c8Sopenharmony_ci}
1812a9d9c8Sopenharmony_ciimpl<T> Default for BaseWithVtable<T> {
1912a9d9c8Sopenharmony_ci    fn default() -> Self {
2012a9d9c8Sopenharmony_ci        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2112a9d9c8Sopenharmony_ci        unsafe {
2212a9d9c8Sopenharmony_ci            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2312a9d9c8Sopenharmony_ci            s.assume_init()
2412a9d9c8Sopenharmony_ci        }
2512a9d9c8Sopenharmony_ci    }
2612a9d9c8Sopenharmony_ci}
2712a9d9c8Sopenharmony_ci/// This should not have an explicit vtable.
2812a9d9c8Sopenharmony_ci#[repr(C)]
2912a9d9c8Sopenharmony_ci#[derive(Debug, Copy, Clone)]
3012a9d9c8Sopenharmony_cipub struct DerivedWithNoVirtualMethods {
3112a9d9c8Sopenharmony_ci    pub _base: BaseWithVtable<*mut ::std::os::raw::c_char>,
3212a9d9c8Sopenharmony_ci}
3312a9d9c8Sopenharmony_ci#[test]
3412a9d9c8Sopenharmony_cifn bindgen_test_layout_DerivedWithNoVirtualMethods() {
3512a9d9c8Sopenharmony_ci    assert_eq!(
3612a9d9c8Sopenharmony_ci        ::std::mem::size_of::<DerivedWithNoVirtualMethods>(),
3712a9d9c8Sopenharmony_ci        16usize,
3812a9d9c8Sopenharmony_ci        concat!("Size of: ", stringify!(DerivedWithNoVirtualMethods))
3912a9d9c8Sopenharmony_ci    );
4012a9d9c8Sopenharmony_ci    assert_eq!(
4112a9d9c8Sopenharmony_ci        ::std::mem::align_of::<DerivedWithNoVirtualMethods>(),
4212a9d9c8Sopenharmony_ci        8usize,
4312a9d9c8Sopenharmony_ci        concat!("Alignment of ", stringify!(DerivedWithNoVirtualMethods))
4412a9d9c8Sopenharmony_ci    );
4512a9d9c8Sopenharmony_ci}
4612a9d9c8Sopenharmony_ciimpl Default for DerivedWithNoVirtualMethods {
4712a9d9c8Sopenharmony_ci    fn default() -> Self {
4812a9d9c8Sopenharmony_ci        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
4912a9d9c8Sopenharmony_ci        unsafe {
5012a9d9c8Sopenharmony_ci            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
5112a9d9c8Sopenharmony_ci            s.assume_init()
5212a9d9c8Sopenharmony_ci        }
5312a9d9c8Sopenharmony_ci    }
5412a9d9c8Sopenharmony_ci}
5512a9d9c8Sopenharmony_ci/// This should not have an explicit vtable.
5612a9d9c8Sopenharmony_ci#[repr(C)]
5712a9d9c8Sopenharmony_ci#[derive(Debug, Copy, Clone)]
5812a9d9c8Sopenharmony_cipub struct DerivedWithVirtualMethods {
5912a9d9c8Sopenharmony_ci    pub _base: BaseWithVtable<*mut ::std::os::raw::c_char>,
6012a9d9c8Sopenharmony_ci}
6112a9d9c8Sopenharmony_ci#[test]
6212a9d9c8Sopenharmony_cifn bindgen_test_layout_DerivedWithVirtualMethods() {
6312a9d9c8Sopenharmony_ci    assert_eq!(
6412a9d9c8Sopenharmony_ci        ::std::mem::size_of::<DerivedWithVirtualMethods>(),
6512a9d9c8Sopenharmony_ci        16usize,
6612a9d9c8Sopenharmony_ci        concat!("Size of: ", stringify!(DerivedWithVirtualMethods))
6712a9d9c8Sopenharmony_ci    );
6812a9d9c8Sopenharmony_ci    assert_eq!(
6912a9d9c8Sopenharmony_ci        ::std::mem::align_of::<DerivedWithVirtualMethods>(),
7012a9d9c8Sopenharmony_ci        8usize,
7112a9d9c8Sopenharmony_ci        concat!("Alignment of ", stringify!(DerivedWithVirtualMethods))
7212a9d9c8Sopenharmony_ci    );
7312a9d9c8Sopenharmony_ci}
7412a9d9c8Sopenharmony_ciimpl Default for DerivedWithVirtualMethods {
7512a9d9c8Sopenharmony_ci    fn default() -> Self {
7612a9d9c8Sopenharmony_ci        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
7712a9d9c8Sopenharmony_ci        unsafe {
7812a9d9c8Sopenharmony_ci            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
7912a9d9c8Sopenharmony_ci            s.assume_init()
8012a9d9c8Sopenharmony_ci        }
8112a9d9c8Sopenharmony_ci    }
8212a9d9c8Sopenharmony_ci}
8312a9d9c8Sopenharmony_ci/// This should not have any vtable.
8412a9d9c8Sopenharmony_ci#[repr(C)]
8512a9d9c8Sopenharmony_ci#[derive(Debug, Copy, Clone)]
8612a9d9c8Sopenharmony_cipub struct BaseWithoutVtable<U> {
8712a9d9c8Sopenharmony_ci    pub u: U,
8812a9d9c8Sopenharmony_ci    pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<U>>,
8912a9d9c8Sopenharmony_ci}
9012a9d9c8Sopenharmony_ciimpl<U> Default for BaseWithoutVtable<U> {
9112a9d9c8Sopenharmony_ci    fn default() -> Self {
9212a9d9c8Sopenharmony_ci        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
9312a9d9c8Sopenharmony_ci        unsafe {
9412a9d9c8Sopenharmony_ci            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
9512a9d9c8Sopenharmony_ci            s.assume_init()
9612a9d9c8Sopenharmony_ci        }
9712a9d9c8Sopenharmony_ci    }
9812a9d9c8Sopenharmony_ci}
9912a9d9c8Sopenharmony_ci#[repr(C)]
10012a9d9c8Sopenharmony_cipub struct DerivedWithVtable__bindgen_vtable(::std::os::raw::c_void);
10112a9d9c8Sopenharmony_ci/// This should have an explicit vtable.
10212a9d9c8Sopenharmony_ci#[repr(C)]
10312a9d9c8Sopenharmony_ci#[derive(Debug, Copy, Clone)]
10412a9d9c8Sopenharmony_cipub struct DerivedWithVtable {
10512a9d9c8Sopenharmony_ci    pub vtable_: *const DerivedWithVtable__bindgen_vtable,
10612a9d9c8Sopenharmony_ci    pub _base: BaseWithoutVtable<*mut ::std::os::raw::c_char>,
10712a9d9c8Sopenharmony_ci}
10812a9d9c8Sopenharmony_ci#[test]
10912a9d9c8Sopenharmony_cifn bindgen_test_layout_DerivedWithVtable() {
11012a9d9c8Sopenharmony_ci    assert_eq!(
11112a9d9c8Sopenharmony_ci        ::std::mem::size_of::<DerivedWithVtable>(),
11212a9d9c8Sopenharmony_ci        16usize,
11312a9d9c8Sopenharmony_ci        concat!("Size of: ", stringify!(DerivedWithVtable))
11412a9d9c8Sopenharmony_ci    );
11512a9d9c8Sopenharmony_ci    assert_eq!(
11612a9d9c8Sopenharmony_ci        ::std::mem::align_of::<DerivedWithVtable>(),
11712a9d9c8Sopenharmony_ci        8usize,
11812a9d9c8Sopenharmony_ci        concat!("Alignment of ", stringify!(DerivedWithVtable))
11912a9d9c8Sopenharmony_ci    );
12012a9d9c8Sopenharmony_ci}
12112a9d9c8Sopenharmony_ciimpl Default for DerivedWithVtable {
12212a9d9c8Sopenharmony_ci    fn default() -> Self {
12312a9d9c8Sopenharmony_ci        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
12412a9d9c8Sopenharmony_ci        unsafe {
12512a9d9c8Sopenharmony_ci            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
12612a9d9c8Sopenharmony_ci            s.assume_init()
12712a9d9c8Sopenharmony_ci        }
12812a9d9c8Sopenharmony_ci    }
12912a9d9c8Sopenharmony_ci}
13012a9d9c8Sopenharmony_ci/// This should not have any vtable.
13112a9d9c8Sopenharmony_ci#[repr(C)]
13212a9d9c8Sopenharmony_ci#[derive(Debug, Copy, Clone)]
13312a9d9c8Sopenharmony_cipub struct DerivedWithoutVtable {
13412a9d9c8Sopenharmony_ci    pub _base: BaseWithoutVtable<*mut ::std::os::raw::c_char>,
13512a9d9c8Sopenharmony_ci}
13612a9d9c8Sopenharmony_ci#[test]
13712a9d9c8Sopenharmony_cifn bindgen_test_layout_DerivedWithoutVtable() {
13812a9d9c8Sopenharmony_ci    assert_eq!(
13912a9d9c8Sopenharmony_ci        ::std::mem::size_of::<DerivedWithoutVtable>(),
14012a9d9c8Sopenharmony_ci        8usize,
14112a9d9c8Sopenharmony_ci        concat!("Size of: ", stringify!(DerivedWithoutVtable))
14212a9d9c8Sopenharmony_ci    );
14312a9d9c8Sopenharmony_ci    assert_eq!(
14412a9d9c8Sopenharmony_ci        ::std::mem::align_of::<DerivedWithoutVtable>(),
14512a9d9c8Sopenharmony_ci        8usize,
14612a9d9c8Sopenharmony_ci        concat!("Alignment of ", stringify!(DerivedWithoutVtable))
14712a9d9c8Sopenharmony_ci    );
14812a9d9c8Sopenharmony_ci}
14912a9d9c8Sopenharmony_ciimpl Default for DerivedWithoutVtable {
15012a9d9c8Sopenharmony_ci    fn default() -> Self {
15112a9d9c8Sopenharmony_ci        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
15212a9d9c8Sopenharmony_ci        unsafe {
15312a9d9c8Sopenharmony_ci            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
15412a9d9c8Sopenharmony_ci            s.assume_init()
15512a9d9c8Sopenharmony_ci        }
15612a9d9c8Sopenharmony_ci    }
15712a9d9c8Sopenharmony_ci}
15812a9d9c8Sopenharmony_ci#[test]
15912a9d9c8Sopenharmony_cifn __bindgen_test_layout_BaseWithVtable_open0_ptr_char_close0_instantiation() {
16012a9d9c8Sopenharmony_ci    assert_eq!(
16112a9d9c8Sopenharmony_ci        ::std::mem::size_of::<BaseWithVtable<*mut ::std::os::raw::c_char>>(),
16212a9d9c8Sopenharmony_ci        16usize,
16312a9d9c8Sopenharmony_ci        concat!(
16412a9d9c8Sopenharmony_ci            "Size of template specialization: ",
16512a9d9c8Sopenharmony_ci            stringify!(BaseWithVtable<*mut ::std::os::raw::c_char>)
16612a9d9c8Sopenharmony_ci        )
16712a9d9c8Sopenharmony_ci    );
16812a9d9c8Sopenharmony_ci    assert_eq!(
16912a9d9c8Sopenharmony_ci        ::std::mem::align_of::<BaseWithVtable<*mut ::std::os::raw::c_char>>(),
17012a9d9c8Sopenharmony_ci        8usize,
17112a9d9c8Sopenharmony_ci        concat!(
17212a9d9c8Sopenharmony_ci            "Alignment of template specialization: ",
17312a9d9c8Sopenharmony_ci            stringify!(BaseWithVtable<*mut ::std::os::raw::c_char>)
17412a9d9c8Sopenharmony_ci        )
17512a9d9c8Sopenharmony_ci    );
17612a9d9c8Sopenharmony_ci}
17712a9d9c8Sopenharmony_ci#[test]
17812a9d9c8Sopenharmony_cifn __bindgen_test_layout_BaseWithVtable_open0_ptr_char_close0_instantiation_1()
17912a9d9c8Sopenharmony_ci{
18012a9d9c8Sopenharmony_ci    assert_eq!(
18112a9d9c8Sopenharmony_ci        ::std::mem::size_of::<BaseWithVtable<*mut ::std::os::raw::c_char>>(),
18212a9d9c8Sopenharmony_ci        16usize,
18312a9d9c8Sopenharmony_ci        concat!(
18412a9d9c8Sopenharmony_ci            "Size of template specialization: ",
18512a9d9c8Sopenharmony_ci            stringify!(BaseWithVtable<*mut ::std::os::raw::c_char>)
18612a9d9c8Sopenharmony_ci        )
18712a9d9c8Sopenharmony_ci    );
18812a9d9c8Sopenharmony_ci    assert_eq!(
18912a9d9c8Sopenharmony_ci        ::std::mem::align_of::<BaseWithVtable<*mut ::std::os::raw::c_char>>(),
19012a9d9c8Sopenharmony_ci        8usize,
19112a9d9c8Sopenharmony_ci        concat!(
19212a9d9c8Sopenharmony_ci            "Alignment of template specialization: ",
19312a9d9c8Sopenharmony_ci            stringify!(BaseWithVtable<*mut ::std::os::raw::c_char>)
19412a9d9c8Sopenharmony_ci        )
19512a9d9c8Sopenharmony_ci    );
19612a9d9c8Sopenharmony_ci}
19712a9d9c8Sopenharmony_ci#[test]
19812a9d9c8Sopenharmony_cifn __bindgen_test_layout_BaseWithoutVtable_open0_ptr_char_close0_instantiation()
19912a9d9c8Sopenharmony_ci{
20012a9d9c8Sopenharmony_ci    assert_eq!(
20112a9d9c8Sopenharmony_ci        ::std::mem::size_of::<BaseWithoutVtable<*mut ::std::os::raw::c_char>>(),
20212a9d9c8Sopenharmony_ci        8usize,
20312a9d9c8Sopenharmony_ci        concat!(
20412a9d9c8Sopenharmony_ci            "Size of template specialization: ",
20512a9d9c8Sopenharmony_ci            stringify!(BaseWithoutVtable<*mut ::std::os::raw::c_char>)
20612a9d9c8Sopenharmony_ci        )
20712a9d9c8Sopenharmony_ci    );
20812a9d9c8Sopenharmony_ci    assert_eq!(
20912a9d9c8Sopenharmony_ci        ::std::mem::align_of::<BaseWithoutVtable<*mut ::std::os::raw::c_char>>(
21012a9d9c8Sopenharmony_ci        ),
21112a9d9c8Sopenharmony_ci        8usize,
21212a9d9c8Sopenharmony_ci        concat!(
21312a9d9c8Sopenharmony_ci            "Alignment of template specialization: ",
21412a9d9c8Sopenharmony_ci            stringify!(BaseWithoutVtable<*mut ::std::os::raw::c_char>)
21512a9d9c8Sopenharmony_ci        )
21612a9d9c8Sopenharmony_ci    );
21712a9d9c8Sopenharmony_ci}
21812a9d9c8Sopenharmony_ci#[test]
21912a9d9c8Sopenharmony_cifn __bindgen_test_layout_BaseWithoutVtable_open0_ptr_char_close0_instantiation_1(
22012a9d9c8Sopenharmony_ci) {
22112a9d9c8Sopenharmony_ci    assert_eq!(
22212a9d9c8Sopenharmony_ci        ::std::mem::size_of::<BaseWithoutVtable<*mut ::std::os::raw::c_char>>(),
22312a9d9c8Sopenharmony_ci        8usize,
22412a9d9c8Sopenharmony_ci        concat!(
22512a9d9c8Sopenharmony_ci            "Size of template specialization: ",
22612a9d9c8Sopenharmony_ci            stringify!(BaseWithoutVtable<*mut ::std::os::raw::c_char>)
22712a9d9c8Sopenharmony_ci        )
22812a9d9c8Sopenharmony_ci    );
22912a9d9c8Sopenharmony_ci    assert_eq!(
23012a9d9c8Sopenharmony_ci        ::std::mem::align_of::<BaseWithoutVtable<*mut ::std::os::raw::c_char>>(
23112a9d9c8Sopenharmony_ci        ),
23212a9d9c8Sopenharmony_ci        8usize,
23312a9d9c8Sopenharmony_ci        concat!(
23412a9d9c8Sopenharmony_ci            "Alignment of template specialization: ",
23512a9d9c8Sopenharmony_ci            stringify!(BaseWithoutVtable<*mut ::std::os::raw::c_char>)
23612a9d9c8Sopenharmony_ci        )
23712a9d9c8Sopenharmony_ci    );
23812a9d9c8Sopenharmony_ci}
239