Remove core::panicking::panic's dependence on str's Display::fmt impl

Display::fmt for str calls into Formatter::pad, which is modest in size
and also pulls in string-related functions for its truncation and padding
abilities.  For size-critical programs (e.g. embedded), this call site
may be the only reason Formatter::pad is linked into the output.
This commit is contained in:
Ryan Prichard 2015-03-01 17:25:23 -08:00
parent 0eb0ba38d0
commit 9c0057df58

View file

@ -35,8 +35,14 @@ use fmt;
#[cold] #[inline(never)] // this is the slow path, always
#[lang="panic"]
pub fn panic(expr_file_line: &(&'static str, &'static str, u32)) -> ! {
// Use Arguments::new_v1 instead of format_args!("{}", expr) to potentially
// reduce size overhead. The format_args! macro uses str's Display trait to
// write expr, which calls Formatter::pad, which must accommodate string
// truncation and padding (even though none is used here). Using
// Arguments::new_v1 may allow the compiler to omit Formatter::pad from the
// output binary, saving up to a few kilobytes.
let (expr, file, line) = *expr_file_line;
panic_fmt(format_args!("{}", expr), &(file, line))
panic_fmt(fmt::Arguments::new_v1(&[expr], &[]), &(file, line))
}
#[cold] #[inline(never)]