Module core::panicking

source ·
🔬This is a nightly-only experimental API. (panic_internals)
Expand description

Panic support for core

The core library cannot define panicking, but it does declare panicking. This means that the functions inside of core are allowed to panic, but to be useful an upstream crate must define panicking for core to use. The current interface for panicking is:

fn panic_impl(pi: &core::panic::PanicInfo<'_>) -> !

This definition allows for panicking with any general message, but it does not allow for failing with a Box<Any> value. (PanicInfo just contains a &(dyn Any + Send), for which we fill in a dummy value in PanicInfo::internal_constructor.) The reason for this is that core is not allowed to allocate.

This module contains a few other panicking functions, but these are just the necessary lang items for the compiler. All panics are funneled through this one function. The actual symbol is declared through the #[panic_handler] attribute.



  • const_panic_fmtExperimental
    This function is used instead of panic_fmt in const eval.
  • panicExperimental
    The underlying implementation of core’s panic! macro when no formatting is used.
  • panic_displayExperimental
  • panic_explicitExperimental
  • panic_fmtExperimental
    The entry point for panicking with a formatted message.
  • panic_nounwindExperimental
    Like panic, but without unwinding and track_caller to reduce the impact on codesize on the caller. If you want #[track_caller] for nicer errors, call panic_nounwind_fmt directly.
  • panic_nounwind_fmtExperimental
    Like panic_fmt, but for non-unwinding panics.
  • Like panic_nounwind, but also inhibits showing a backtrace.
  • panic_str_2015Experimental
    This exists solely for the 2015 edition panic! macro to trigger a lint on panic!(my_str_variable);.