mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
rust: static_assert: add static_assert!
macro
Add the `static_assert!` macro, which is a compile-time assert, similar to the C11 `_Static_assert` and C++11 `static_assert` declarations [1,2]. Do so in a new module, called `static_assert`. For instance: static_assert!(42 > 24); static_assert!(core::mem::size_of::<u8>() == 1); const X: &[u8] = b"bar"; static_assert!(X[1] == b'a'); const fn f(x: i32) -> i32 { x + 2 } static_assert!(f(40) == 42); Link: https://en.cppreference.com/w/c/language/_Static_assert [1] Link: https://en.cppreference.com/w/cpp/language/static_assert [2] Co-developed-by: Alex Gaynor <alex.gaynor@gmail.com> Signed-off-by: Alex Gaynor <alex.gaynor@gmail.com> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
bee1688940
commit
ef9e37973c
@ -26,6 +26,7 @@ mod allocator;
|
|||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod prelude;
|
pub mod prelude;
|
||||||
pub mod print;
|
pub mod print;
|
||||||
|
mod static_assert;
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub mod std_vendor;
|
pub mod std_vendor;
|
||||||
pub mod str;
|
pub mod str;
|
||||||
|
@ -19,6 +19,8 @@ pub use macros::{module, vtable};
|
|||||||
|
|
||||||
pub use super::{dbg, pr_alert, pr_crit, pr_debug, pr_emerg, pr_err, pr_info, pr_notice, pr_warn};
|
pub use super::{dbg, pr_alert, pr_crit, pr_debug, pr_emerg, pr_err, pr_info, pr_notice, pr_warn};
|
||||||
|
|
||||||
|
pub use super::static_assert;
|
||||||
|
|
||||||
pub use super::error::{code::*, Error, Result};
|
pub use super::error::{code::*, Error, Result};
|
||||||
|
|
||||||
pub use super::{str::CStr, ThisModule};
|
pub use super::{str::CStr, ThisModule};
|
||||||
|
34
rust/kernel/static_assert.rs
Normal file
34
rust/kernel/static_assert.rs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
//! Static assert.
|
||||||
|
|
||||||
|
/// Static assert (i.e. compile-time assert).
|
||||||
|
///
|
||||||
|
/// Similar to C11 [`_Static_assert`] and C++11 [`static_assert`].
|
||||||
|
///
|
||||||
|
/// The feature may be added to Rust in the future: see [RFC 2790].
|
||||||
|
///
|
||||||
|
/// [`_Static_assert`]: https://en.cppreference.com/w/c/language/_Static_assert
|
||||||
|
/// [`static_assert`]: https://en.cppreference.com/w/cpp/language/static_assert
|
||||||
|
/// [RFC 2790]: https://github.com/rust-lang/rfcs/issues/2790
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// static_assert!(42 > 24);
|
||||||
|
/// static_assert!(core::mem::size_of::<u8>() == 1);
|
||||||
|
///
|
||||||
|
/// const X: &[u8] = b"bar";
|
||||||
|
/// static_assert!(X[1] == b'a');
|
||||||
|
///
|
||||||
|
/// const fn f(x: i32) -> i32 {
|
||||||
|
/// x + 2
|
||||||
|
/// }
|
||||||
|
/// static_assert!(f(40) == 42);
|
||||||
|
/// ```
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! static_assert {
|
||||||
|
($condition:expr) => {
|
||||||
|
const _: () = core::assert!($condition);
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user