Module panicking
Panic support for core
In core, panicking is always done with a message, resulting in a core::panic::PanicInfo
containing a fmt::Arguments. In std, however, panicking can be done with panic_any, which
throws a Box<dyn Any> containing any type of value. Because of this,
std::panic::PanicHookInfo is a different type, which contains a &dyn Any instead of a
fmt::Arguments. std's panic handler will convert the fmt::Arguments to a &dyn Any
containing either a &'static str or String containing the formatted message.
The core library cannot define any panic handler, but it can invoke it. 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:
!
#
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.
Modules
Functions
- const_panic_fmt This function is used instead of panic_fmt in const eval.
-
panic
The underlying implementation of core's
panic!macro when no formatting is used. - panic_display
- panic_fmt The entry point for panicking with a formatted message.
-
panic_nounwind
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, callpanic_nounwind_fmtdirectly. -
panic_nounwind_fmt
Like
panic_fmt, but for non-unwinding panics. -
panic_nounwind_nobacktrace
Like
panic_nounwind, but also inhibits showing a backtrace. -
panic_str_2015
This exists solely for the 2015 edition
panic!macro to trigger a lint onpanic!(my_str_variable);. - unreachable_display