Revert "lang: get offsetof const fn ready"

This reverts commit 8f89f9ad60.

generates broken code in release builds on current rustc
1.55
This commit is contained in:
Wolfgang Bumiller 2021-11-17 10:04:03 +01:00
parent bbdfd8ede9
commit 5b2e8b4c66

View File

@ -72,21 +72,22 @@ macro_rules! static_assert_size {
/// #[repr(C)] /// #[repr(C)]
/// struct Stuff { /// struct Stuff {
/// first: u32, /// first: u32,
/// second: u16, /// second: u32,
/// third: u16,
/// fourth: u32,
/// } /// }
/// ///
/// assert_eq!(offsetof!(Stuff, first), 0);
/// assert_eq!(offsetof!(Stuff, second), 4); /// assert_eq!(offsetof!(Stuff, second), 4);
/// assert_eq!(offsetof!(Stuff, third), 6);
/// assert_eq!(offsetof!(Stuff, fourth), 8);
/// ///
/// ``` /// ```
// FIXME: With 1.56 we get `const transmute` which may help making this usable `const fn` as we can
// avoid dereferencing the raw pointer by transmuting `0usize` into a proper reference instead.
//
// So with 1.56, do this instead:
//
// unsafe { &(std::mem::transmute::<_, &$ty>(0usize).$field) as *const _ as usize }
#[macro_export] #[macro_export]
macro_rules! offsetof { macro_rules! offsetof {
($ty:ty, $field:ident) => { ($ty:ty, $field:ident) => {
unsafe { &(std::mem::transmute::<_, &$ty>(0usize).$field) as *const _ as usize } unsafe { &(*(std::ptr::null::<$ty>())).$field as *const _ as usize }
}; };
} }