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}