revm_interpreter/macros.rs
1/// Macro that triggers `unreachable!` in debug builds but uses unchecked unreachable in release builds.
2/// This provides better error messages during development while optimizing for performance in release.
3#[macro_export]
4macro_rules! debug_unreachable {
5 ($($t:tt)*) => {
6 if cfg!(debug_assertions) {
7 unreachable!($($t)*);
8 } else {
9 unsafe { core::hint::unreachable_unchecked() };
10 }
11 };
12}
13
14/// Macro for asserting assumptions in debug builds.
15/// In debug builds, this will trigger unreachable code if the assumption is false.
16/// In release builds, this serves as an optimization hint.
17#[macro_export]
18macro_rules! assume {
19 ($e:expr $(,)?) => {
20 if !$e {
21 debug_unreachable!(stringify!($e));
22 }
23 };
24
25 ($e:expr, $($t:tt)+) => {
26 if !$e {
27 debug_unreachable!($($t)+);
28 }
29 };
30}