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}