Sha256: f09c4ec30e476446ab337a4a9ed950edf21c780a42ece7613f0ffc20225331ae

Contents?: true

Size: 1.37 KB

Versions: 34

Compression:

Stored size: 1.37 KB

Contents

/// Asserts that types are equal in alignment.
///
/// This is useful when ensuring that pointer arithmetic is done correctly, or
/// when [FFI] requires a type to have the same alignment as some foreign type.
///
/// # Examples
///
/// A `usize` has the same alignment as any pointer type:
///
/// ```
/// # #[macro_use] extern crate static_assertions; fn main() {}
/// assert_eq_align!(usize, *const u8, *mut u8);
/// ```
///
/// The following passes because `[i32; 4]` has the same alignment as `i32`:
///
/// ```
/// # #[macro_use] extern crate static_assertions; fn main() {}
/// assert_eq_align!([i32; 4], i32);
/// ```
///
/// The following example fails to compile because `i32x4` explicitly has 4
/// times the alignment as `[i32; 4]`:
///
/// ```compile_fail
/// # #[macro_use] extern crate static_assertions; fn main() {}
/// # #[allow(non_camel_case_types)]
/// #[repr(align(16))]
/// struct i32x4([i32; 4]);
///
/// assert_eq_align!(i32x4, [i32; 4]);
/// ```
///
/// [FFI]: https://en.wikipedia.org/wiki/Foreign_function_interface
#[macro_export]
macro_rules! assert_eq_align {
    ($x:ty, $($xs:ty),+ $(,)?) => {
        const _: fn() = || {
            // Assigned instance must match the annotated type or else it will
            // fail to compile
            use $crate::_core::mem::align_of;
            $(let _: [(); align_of::<$x>()] = [(); align_of::<$xs>()];)+
        };
    };
}

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
wasmtime-30.0.2 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-29.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-28.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-27.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-26.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-25.0.2 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-25.0.1 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-25.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-24.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-23.0.2 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-22.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-21.0.1 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-20.0.2 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-20.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-18.0.3 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-17.0.1 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-17.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-16.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-15.0.1 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs
wasmtime-15.0.0 ./ext/cargo-vendor/static_assertions-1.1.0/src/assert_eq_align.rs