Crate dbg_unreachable

Source
Expand description

This crate defines an unreachable! macro that is conditionally compiled depending on the build profile.

If the build is debug , it translates to core::unreachable

If the build is release, it translates to core::hint::unreachable_unchecked

There are cases where unreachable_unchecked is faster that unreachable. This macro uses the unchecked version on release mode, but still checks on debug mode, allowing you to catch cases in which the unreachable code is reached.

§Example

use dbg_unreachable::unreachable;

let a = Some(12_i32);
match a {
    Some(n) if n >= 0 => {},
    Some(n) if n < 0 => {},
    Some(_) => unreachable!("The two arms above cover all possible cases"),
    None => {},
}

The piece of code above translates to this two pieces.

Debug

use dbg_unreachable::unreachable;

let a = Some(12_i32);
match a {
    Some(n) if n >= 0 => {},
    Some(n) if n < 0 => {},
    Some(_) => core::unreachable!("The two arms above cover all possible cases"),
    None => {},
}

Release

use dbg_unreachable::unreachable;

let a = Some(12_i32);
match a {
    Some(n) if n >= 0 => {},
    Some(n) if n < 0 => {},
    Some(_) => unsafe { core::hint::unreachable_unchecked() },
    None => {},
}

Macros§

unreachable