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]
4#[collapse_debuginfo(yes)]
5macro_rules! debug_unreachable {
6    ($($t:tt)*) => {
7        if cfg!(debug_assertions) {
8            unreachable!($($t)*);
9        } else {
10            unsafe { core::hint::unreachable_unchecked() };
11        }
12    };
13}
14
15/// Macro for asserting assumptions in debug builds.
16/// In debug builds, this will trigger unreachable code if the assumption is false.
17/// In release builds, this serves as an optimization hint.
18#[macro_export]
19#[collapse_debuginfo(yes)]
20macro_rules! assume {
21    ($e:expr $(,)?) => {
22        if !$e {
23            debug_unreachable!(stringify!($e));
24        }
25    };
26
27    ($e:expr, $($t:tt)+) => {
28        if !$e {
29            debug_unreachable!($($t)+);
30        }
31    };
32}