1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#![no_std]

#![cfg_attr(feature = "nightly", feature(core_intrinsics))]

//! Abnormal termination: see [`abort`].

/// Abnormally terminate the process.
#[inline(always)]
pub fn abort() -> ! { a() }

#[cfg(feature = "nightly")]
#[inline(always)]
fn a() -> ! { core::intrinsics::abort() }

#[cfg(not(feature = "nightly"))]
#[inline(always)]
fn a() -> ! {
    struct A;

    impl Drop for A {
        #[inline(always)]
        fn drop(&mut self) { panic!() }
    }

    let _a = A;
    panic!()
}