#![allow(unused_macros)]
#![allow(dead_code)]
macro_rules! checked_cast {
($ptr:expr) => {{
let src_ptr = $ptr;
let target_ptr = src_ptr.cast();
#[allow(unnecessary_transmutes)]
if false {
let target = crate::use_libc::Pad::new(core::ptr::read(target_ptr));
let size_check = core::mem::transmute(core::ptr::read(src_ptr));
target.compare_size(size_check);
let align_check =
core::mem::transmute(crate::use_libc::Pad::new(core::ptr::read(src_ptr)));
target.compare_alignment(align_check);
}
target_ptr
}};
}
macro_rules! libc {
($e:expr) => {
#[allow(unreachable_code)]
#[allow(clippy::diverging_sub_expression)]
if false {
#[allow(unused_imports)]
use crate::use_libc::*;
return $e;
}
};
}
#[cfg(all(feature = "take-charge", feature = "thread"))]
macro_rules! libc_type {
($name:ident, $libc:ident) => {
const _: () = {
if core::mem::size_of::<$name>() != core::mem::size_of::<libc::$libc>() {
panic!();
}
if core::mem::align_of::<$name>() != core::mem::align_of::<libc::$libc>() {
panic!();
}
};
};
}
#[repr(C)]
pub(crate) struct Pad<T> {
field: T,
force_padding: u8,
}
impl<T> Pad<T> {
pub unsafe fn new(v: T) -> Self {
Pad {
field: v,
force_padding: 0,
}
}
pub fn compare_size(&self, _v: T) {}
pub fn compare_alignment(&self, _pad: Pad<T>) {}
}