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