summaryrefslogtreecommitdiffstats
path: root/third_party/rust/new_debug_unreachable/src
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/rust/new_debug_unreachable/src
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/new_debug_unreachable/src')
-rw-r--r--third_party/rust/new_debug_unreachable/src/lib.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/third_party/rust/new_debug_unreachable/src/lib.rs b/third_party/rust/new_debug_unreachable/src/lib.rs
new file mode 100644
index 0000000000..db0f968f0a
--- /dev/null
+++ b/third_party/rust/new_debug_unreachable/src/lib.rs
@@ -0,0 +1,36 @@
+#![deny(missing_docs, warnings)]
+
+#![no_std]
+
+//! `panic!()` in debug builds, optimization hint in release.
+
+#[doc(hidden)] pub mod _internal { pub use core::hint::unreachable_unchecked; }
+
+#[macro_export]
+/// `panic!()` in debug builds, optimization hint in release.
+///
+/// Example:
+///
+/// ```
+/// use debug_unreachable::debug_unreachable;
+///
+/// fn main() {
+/// if 0 > 100 {
+/// // Can't happen!
+/// unsafe { debug_unreachable!() }
+/// } else {
+/// println!("Good, 0 <= 100.");
+/// }
+/// }
+/// ```
+macro_rules! debug_unreachable {
+ () => { debug_unreachable!("entered unreachable code") };
+ ($e:expr) => {
+ if cfg!(debug_assertions) {
+ panic!($e)
+ } else {
+ $crate::_internal::unreachable_unchecked()
+ }
+ }
+}
+