#![doc(html_logo_url = "https://gitlab.com/bjoernager/trap-rs/-/raw/master/DOCLOGO.svg")]
#![no_std]
#![allow(unused_imports)]
#![cfg_attr(feature = "nightly", allow(internal_features))]
#![cfg_attr(
feature = "nightly",
feature(
asm_experimental_arch,
core_intrinsics,
),
)]
#[cfg(any(feature = "std", doc))]
extern crate std;
use core::arch::asm;
use core::hint::{spin_loop, unreachable_unchecked};
#[allow(unreachable_code)]
#[cold]
#[inline(never)]
#[track_caller]
pub fn trap() -> ! {
#[cfg(feature = "std")]
std::process::abort();
#[cfg(target_arch = "aarch64")]
unsafe { asm!("brk #1") };
#[cfg(target_arch = "arm")]
unsafe { asm!(".inst 0xE7FFDEFE") };
#[cfg(target_arch = "loongarch32")]
unsafe { asm!("amswap.w $zero, $ra, $zero") };
#[cfg(target_arch = "loongarch64")]
unsafe { asm!("amswap.w $zero, $ra, $zero") };
#[cfg(all(target_arch = "powerpc", feature = "nightly"))]
unsafe { asm!("trap") };
#[cfg(all(target_arch = "powerpc64", feature = "nightly"))]
unsafe { asm!("trap") };
#[cfg(target_arch = "riscv32")]
unsafe { asm!("unimp") };
#[cfg(target_arch = "riscv64")]
unsafe { asm!("unimp") };
#[cfg(all(target_arch = "sparc", feature = "nightly"))]
unsafe { asm!("ta 5") };
#[cfg(all(target_arch = "sparc64", feature = "nightly"))]
unsafe { asm!("ta 5") };
#[cfg(all(target_arch = "wasm32", feature = "nightly"))]
unsafe { asm!("unreachable") };
#[cfg(target_arch = "x86")]
unsafe { asm!("ud2") };
#[cfg(target_arch = "x86_64")]
unsafe { asm!("ud2") };
#[cfg(feature = "nightly")]
core::intrinsics::abort();
loop {
spin_loop();
}
}