    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
    28
    29
    30
    31
    32
    33
    34
    35

    //! Set the panicking behavior to halt
    //!
    //! This crate contains an implementation of `panic_fmt` that simply halt in an infinite loop.
    //!
    //! # Usage
    //!
    //! ``` ignore
    //! #![no_std]
    //!
    //! extern crate panic_halt;
    //!
    //! fn main() {
    //!     panic!("argument is ignored");
    //! }
    //! ```
    //!
    //! # Breakable symbols
    //!
    //! With the panic handler being `#[inline(never)]` the symbol `rust_begin_unwind` will be
    //! available to place a breakpoint on to halt when a panic is happening.

    #![deny(missing_docs)]
    #![deny(warnings)]
    #![no_std]

    use core::panic::PanicInfo;
    use core::sync::atomic::{self, Ordering};

    #[inline(never)]
    #[panic_handler]
    fn panic(_info: &PanicInfo) -> ! {
        loop {
            atomic::compiler_fence(Ordering::SeqCst);
        }
    }