/* automatically generated by rust-bindgen */


#![allow(non_snake_case)]


#[repr(C)]
#[derive(Debug, Default, Copy)]
pub struct bitfield {
    pub _bitfield_1: u8,
    pub e: ::std::os::raw::c_int,
    pub _bitfield_2: u8,
    pub _bitfield_3: u32,
}
#[test]
fn bindgen_test_layout_bitfield() {
    assert_eq!(::std::mem::size_of::<bitfield>() , 16usize , concat ! (
               "Size of: " , stringify ! ( bitfield ) ));
    assert_eq! (::std::mem::align_of::<bitfield>() , 4usize , concat ! (
                "Alignment of " , stringify ! ( bitfield ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const bitfield ) ) . e as * const _ as usize }
                , 4usize , concat ! (
                "Alignment of field: " , stringify ! ( bitfield ) , "::" ,
                stringify ! ( e ) ));
}
impl Clone for bitfield {
    fn clone(&self) -> Self { *self }
}
