aboutsummaryrefslogtreecommitdiff
path: root/vendor/rustix/src/bitcast.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/bitcast.rs')
-rw-r--r--vendor/rustix/src/bitcast.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/vendor/rustix/src/bitcast.rs b/vendor/rustix/src/bitcast.rs
new file mode 100644
index 0000000..77e0e63
--- /dev/null
+++ b/vendor/rustix/src/bitcast.rs
@@ -0,0 +1,34 @@
+//! The `bitcast` and `bitflags_bits` macros.
+
+#![allow(unused_macros)]
+
+// Ensure that the source and destination types are both primitive integer
+// types and the same size, and then bitcast.
+macro_rules! bitcast {
+ ($x:expr) => {{
+ if false {
+ // Ensure the source and destinations are primitive integer types.
+ let _ = !$x;
+ let _ = $x as u8;
+ 0
+ } else if false {
+ // Ensure that the source and destinations are the same size.
+ // SAFETY: This code is under an `if false`.
+ #[allow(unsafe_code, unused_unsafe, clippy::useless_transmute)]
+ unsafe {
+ ::core::mem::transmute($x)
+ }
+ } else {
+ // Do the conversion.
+ $x as _
+ }
+ }};
+}
+
+/// Return a [`bitcast`] of the value of `$x.bits()`, where `$x` is a
+/// `bitflags` type.
+macro_rules! bitflags_bits {
+ ($x:expr) => {{
+ bitcast!($x.bits())
+ }};
+}