Skip to content

Commit

Permalink
Require rust >= 1.37 and drop libc_underscore_const_names conditional
Browse files Browse the repository at this point in the history
[ disable static assert that ctest can't handle - Trevor ]
  • Loading branch information
joshtriplett authored and tgross35 committed Nov 17, 2024
1 parent a8ed1c2 commit f0febd5
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 38 deletions.
6 changes: 0 additions & 6 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ const ALLOWED_CFGS: &'static [&'static str] = &[
"libc_deny_warnings",
"libc_long_array",
"libc_thread_local",
"libc_underscore_const_names",
"libc_ctest",
];

Expand Down Expand Up @@ -86,11 +85,6 @@ fn main() {
set_cfg("libc_long_array");
}

// Rust >= 1.37.0 allows underscores as anonymous constant names.
if rustc_minor_ver >= 37 || rustc_dep_of_std {
set_cfg("libc_underscore_const_names");
}

// #[thread_local] is currently unstable
if rustc_dep_of_std {
set_cfg("libc_thread_local");
Expand Down
62 changes: 30 additions & 32 deletions src/fixed_width_ints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,41 +59,39 @@ cfg_if! {
/// C __uint128_t (alternate name for [__uint128][])
pub type __uint128_t = u128;

cfg_if! {
if #[cfg(libc_underscore_const_names)] {
macro_rules! static_assert_eq {
($a:expr, $b:expr) => {
const _: [(); $a] = [(); $b];
};
}
// NOTE: if you add more platforms to here, you may need to cfg
// these consts. They should always match the platform's values
// for `sizeof(__int128)` and `_Alignof(__int128)`.
const _SIZE_128: usize = 16;
const _ALIGN_128: usize = 16;

// NOTE: if you add more platforms to here, you may need to cfg
// these consts. They should always match the platform's values
// for `sizeof(__int128)` and `_Alignof(__int128)`.
const _SIZE_128: usize = 16;
const _ALIGN_128: usize = 16;

// Since Rust doesn't officially guarantee that these types
// have compatible ABIs, we const assert that these values have the
// known size/align of the target platform's libc. If rustc ever
// tries to regress things, it will cause a compilation error.
//
// This isn't a bullet-proof solution because e.g. it doesn't
// catch the fact that llvm and gcc disagree on how x64 __int128
// is actually *passed* on the stack (clang underaligns it for
// the same reason that rustc *never* properly aligns it).
static_assert_eq!(core::mem::size_of::<__int128>(), _SIZE_128);
static_assert_eq!(core::mem::align_of::<__int128>(), _ALIGN_128);
// FIXME(ctest): ctest doesn't handle `_` as an identifier so these tests are temporarily
// disabled.
// macro_rules! static_assert_eq {
// ($a:expr, $b:expr) => {
// const _: [(); $a] = [(); $b];
// };
// }
//
// // Since Rust doesn't officially guarantee that these types
// // have compatible ABIs, we const assert that these values have the
// // known size/align of the target platform's libc. If rustc ever
// // tries to regress things, it will cause a compilation error.
// //
// // This isn't a bullet-proof solution because e.g. it doesn't
// // catch the fact that llvm and gcc disagree on how x64 __int128
// // is actually *passed* on the stack (clang underaligns it for
// // the same reason that rustc *never* properly aligns it).
// static_assert_eq!(core::mem::size_of::<__int128>(), _SIZE_128);
// static_assert_eq!(core::mem::align_of::<__int128>(), _ALIGN_128);

static_assert_eq!(core::mem::size_of::<__uint128>(), _SIZE_128);
static_assert_eq!(core::mem::align_of::<__uint128>(), _ALIGN_128);
// static_assert_eq!(core::mem::size_of::<__uint128>(), _SIZE_128);
// static_assert_eq!(core::mem::align_of::<__uint128>(), _ALIGN_128);

static_assert_eq!(core::mem::size_of::<__int128_t>(), _SIZE_128);
static_assert_eq!(core::mem::align_of::<__int128_t>(), _ALIGN_128);
// static_assert_eq!(core::mem::size_of::<__int128_t>(), _SIZE_128);
// static_assert_eq!(core::mem::align_of::<__int128_t>(), _ALIGN_128);

static_assert_eq!(core::mem::size_of::<__uint128_t>(), _SIZE_128);
static_assert_eq!(core::mem::align_of::<__uint128_t>(), _ALIGN_128);
}
}
// static_assert_eq!(core::mem::size_of::<__uint128_t>(), _SIZE_128);
// static_assert_eq!(core::mem::align_of::<__uint128_t>(), _ALIGN_128);
}
}

0 comments on commit f0febd5

Please sign in to comment.