| /* automatically generated by rust-bindgen */ |
| |
| |
| #![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] |
| |
| |
| |
| /// This should not be opaque; we can see the attributes and can pack the |
| /// struct. |
| #[repr(C, packed)] |
| #[derive(Debug, Default, Copy, Clone)] |
| pub struct AlignedToOne { |
| pub i: ::std::os::raw::c_int, |
| } |
| #[test] |
| fn bindgen_test_layout_AlignedToOne() { |
| assert_eq!( |
| ::std::mem::size_of::<AlignedToOne>(), |
| 4usize, |
| concat!("Size of: ", stringify!(AlignedToOne)) |
| ); |
| assert_eq!( |
| ::std::mem::align_of::<AlignedToOne>(), |
| 1usize, |
| concat!("Alignment of ", stringify!(AlignedToOne)) |
| ); |
| assert_eq!( |
| unsafe { &(*(::std::ptr::null::<AlignedToOne>())).i as *const _ as usize }, |
| 0usize, |
| concat!( |
| "Offset of field: ", |
| stringify!(AlignedToOne), |
| "::", |
| stringify!(i) |
| ) |
| ); |
| } |
| /// This should be opaque because although we can see the attributes, Rust |
| /// doesn't have `#[repr(packed = "N")]` yet. |
| #[repr(C)] |
| #[derive(Debug, Default, Copy, Clone)] |
| pub struct AlignedToTwo { |
| pub _bindgen_opaque_blob: [u16; 2usize], |
| } |
| #[test] |
| fn bindgen_test_layout_AlignedToTwo() { |
| assert_eq!( |
| ::std::mem::size_of::<AlignedToTwo>(), |
| 4usize, |
| concat!("Size of: ", stringify!(AlignedToTwo)) |
| ); |
| assert_eq!( |
| ::std::mem::align_of::<AlignedToTwo>(), |
| 2usize, |
| concat!("Alignment of ", stringify!(AlignedToTwo)) |
| ); |
| } |
| /// This should not be opaque because although `libclang` doesn't give us the |
| /// `#pragma pack(1)`, we can detect that alignment is 1 and add |
| /// `#[repr(packed)]` to the struct ourselves. |
| #[repr(C, packed)] |
| #[derive(Debug, Default, Copy, Clone)] |
| pub struct PackedToOne { |
| pub x: ::std::os::raw::c_int, |
| pub y: ::std::os::raw::c_int, |
| } |
| #[test] |
| fn bindgen_test_layout_PackedToOne() { |
| assert_eq!( |
| ::std::mem::size_of::<PackedToOne>(), |
| 8usize, |
| concat!("Size of: ", stringify!(PackedToOne)) |
| ); |
| assert_eq!( |
| ::std::mem::align_of::<PackedToOne>(), |
| 1usize, |
| concat!("Alignment of ", stringify!(PackedToOne)) |
| ); |
| assert_eq!( |
| unsafe { &(*(::std::ptr::null::<PackedToOne>())).x as *const _ as usize }, |
| 0usize, |
| concat!( |
| "Offset of field: ", |
| stringify!(PackedToOne), |
| "::", |
| stringify!(x) |
| ) |
| ); |
| assert_eq!( |
| unsafe { &(*(::std::ptr::null::<PackedToOne>())).y as *const _ as usize }, |
| 4usize, |
| concat!( |
| "Offset of field: ", |
| stringify!(PackedToOne), |
| "::", |
| stringify!(y) |
| ) |
| ); |
| } |
| /// In this case, even if we can detect the weird alignment triggered by |
| /// `#pragma pack(2)`, we can't do anything about it because Rust doesn't have |
| /// `#[repr(packed = "N")]`. Therefore, we must make it opaque. |
| #[repr(C)] |
| #[derive(Debug, Default, Copy, Clone)] |
| pub struct PackedToTwo { |
| pub _bindgen_opaque_blob: [u16; 4usize], |
| } |
| #[test] |
| fn bindgen_test_layout_PackedToTwo() { |
| assert_eq!( |
| ::std::mem::size_of::<PackedToTwo>(), |
| 8usize, |
| concat!("Size of: ", stringify!(PackedToTwo)) |
| ); |
| assert_eq!( |
| ::std::mem::align_of::<PackedToTwo>(), |
| 2usize, |
| concat!("Alignment of ", stringify!(PackedToTwo)) |
| ); |
| } |