diff --git a/src/librustrt/lib.rs b/src/librustrt/lib.rs index a150408ac2e..2fe0c32153a 100644 --- a/src/librustrt/lib.rs +++ b/src/librustrt/lib.rs @@ -33,7 +33,7 @@ extern crate collections; #[cfg(test)] #[phase(plugin, link)] extern crate std; pub use self::util::{Stdio, Stdout, Stderr}; -pub use self::unwind::{begin_unwind, begin_unwind_fmt}; +pub use self::unwind::{begin_unwind, begin_unwind_fmt, begin_unwind_no_time_to_explain}; use core::prelude::*; diff --git a/src/librustrt/unwind.rs b/src/librustrt/unwind.rs index f26cccdd3ed..cb1b6f46afe 100644 --- a/src/librustrt/unwind.rs +++ b/src/librustrt/unwind.rs @@ -432,6 +432,11 @@ pub fn begin_unwind(msg: M, file: &'static str, line: uint) -> ! begin_unwind_inner(box msg, file, line) } +/// Unwinding for `fail!()`. Saves passing a string. +#[inline(never)] #[cold] #[experimental] +pub fn begin_unwind_no_time_to_explain(file: &'static str, line: uint) -> ! { + begin_unwind_inner(box () ("explicit failure"), file, line) +} /// The core of the unwinding. /// diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index 8b79af8c931..3c6c860f516 100644 --- a/src/libstd/macros.rs +++ b/src/libstd/macros.rs @@ -39,7 +39,7 @@ #[macro_export] macro_rules! fail( () => ( - fail!("explicit failure") + ::std::rt::begin_unwind_no_time_to_explain(file!(), line!()) ); ($msg:expr) => ( ::std::rt::begin_unwind($msg, file!(), line!()) diff --git a/src/libstd/rt/mod.rs b/src/libstd/rt/mod.rs index 4490977bde6..023a30de027 100644 --- a/src/libstd/rt/mod.rs +++ b/src/libstd/rt/mod.rs @@ -66,7 +66,8 @@ pub use self::util::{default_sched_threads, min_stack, running_on_valgrind}; // standard library which work together to create the entire runtime. pub use alloc::{heap, libc_heap}; pub use rustrt::{task, local, mutex, exclusive, stack, args, rtio, thread}; -pub use rustrt::{Stdio, Stdout, Stderr, begin_unwind, begin_unwind_fmt}; +pub use rustrt::{Stdio, Stdout, Stderr}; +pub use rustrt::{begin_unwind, begin_unwind_fmt, begin_unwind_no_time_to_explain}; pub use rustrt::{bookkeeping, at_exit, unwind, DEFAULT_ERROR_CODE, Runtime}; // Simple backtrace functionality (to print on failure)