about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-01-14 18:02:19 -0800
committerAlex Crichton <alex@alexcrichton.com>2014-01-14 22:52:03 -0800
commit86c60b68f996c45565543370b9fb93f2ce14865d (patch)
treeed79593b056a785a44f0f62f73dfd342c04754bf
parentdd8b011319f5cfbfb3329d9dad185be884f3a4d6 (diff)
Flag failure functions as inline(never)
The failure functions are generic, meaning they're candidates for getting
inlined across crates. This has been happening, leading to monstrosities like
that found in #11549. I have verified that the codegen is *much* better now that
we're not inlining the failure path (the slow path).
-rw-r--r--src/libstd/rt/unwind.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/libstd/rt/unwind.rs b/src/libstd/rt/unwind.rs
index 3a07e8c373b..ffe254574eb 100644
--- a/src/libstd/rt/unwind.rs
+++ b/src/libstd/rt/unwind.rs
@@ -364,6 +364,7 @@ pub mod eabi {
 /// This is the entry point of unwinding for things like lang items and such.
 /// The arguments are normally generated by the compiler, and need to
 /// have static lifetimes.
+#[inline(never)] #[cold] // this is the slow path, please never inline this
 pub fn begin_unwind_raw(msg: *c_char, file: *c_char, line: size_t) -> ! {
     #[inline]
     fn static_char_ptr(p: *c_char) -> &'static str {
@@ -381,6 +382,7 @@ pub fn begin_unwind_raw(msg: *c_char, file: *c_char, line: size_t) -> ! {
 }
 
 /// This is the entry point of unwinding for fail!() and assert!().
+#[inline(never)] #[cold] // this is the slow path, please never inline this
 pub fn begin_unwind<M: Any + Send>(msg: M, file: &'static str, line: uint) -> ! {
     // Note that this should be the only allocation performed in this block.
     // Currently this means that fail!() on OOM will invoke this code path,