about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorRyan Prichard <ryan.prichard@gmail.com>2015-03-01 17:25:23 -0800
committerRyan Prichard <ryan.prichard@gmail.com>2015-03-10 22:21:30 -0700
commit9c0057df58fbc4c79720f9a0104dda46d4d7074e (patch)
tree82767aef125c2ff243983f5a338344309ea33962 /src/libcore
parent0eb0ba38d0893f711e68321d3e6fe28a929cd00e (diff)
downloadrust-9c0057df58fbc4c79720f9a0104dda46d4d7074e.tar.gz
rust-9c0057df58fbc4c79720f9a0104dda46d4d7074e.zip
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.
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/panicking.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libcore/panicking.rs b/src/libcore/panicking.rs
index c1c8ac9cc1f..377b5b57ae1 100644
--- a/src/libcore/panicking.rs
+++ b/src/libcore/panicking.rs
@@ -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)]