diff options
| author | bors <bors@rust-lang.org> | 2016-01-07 01:26:45 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-01-07 01:26:45 +0000 |
| commit | 3ed6e9e6f0213bec36b92fd8e8aa71f954fef99e (patch) | |
| tree | 5c71bd2a5d3697048cac6802e82a420a07f4430a /src/libstd | |
| parent | 43403b416907e6b965c37daa53d071e1c054a302 (diff) | |
| parent | 022c9c70c48581b8caa17895b447a941a9750076 (diff) | |
| download | rust-3ed6e9e6f0213bec36b92fd8e8aa71f954fef99e.tar.gz rust-3ed6e9e6f0213bec36b92fd8e8aa71f954fef99e.zip | |
Auto merge of #30557 - sfackler:panic-propagate, r=aturon
See rust-lang/rfcs#1413. r? @alexcrichton
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/panic.rs | 27 | ||||
| -rw-r--r-- | src/libstd/sys/common/unwind/mod.rs | 2 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/libstd/panic.rs b/src/libstd/panic.rs index 76d9c194b45..8c0a785a102 100644 --- a/src/libstd/panic.rs +++ b/src/libstd/panic.rs @@ -13,6 +13,8 @@ #![unstable(feature = "std_panic", reason = "awaiting feedback", issue = "27719")] +use any::Any; +use boxed::Box; use cell::UnsafeCell; use ops::{Deref, DerefMut}; use ptr::{Unique, Shared}; @@ -259,3 +261,28 @@ pub fn recover<F: FnOnce() -> R + RecoverSafe, R>(f: F) -> Result<R> { } Ok(result.unwrap()) } + +/// Triggers a panic without invoking the panic handler. +/// +/// This is designed to be used in conjunction with `recover` to, for example, +/// carry a panic across a layer of C code. +/// +/// # Examples +/// +/// ```should_panic +/// #![feature(std_panic, recover, panic_propagate)] +/// +/// use std::panic; +/// +/// let result = panic::recover(|| { +/// panic!("oh no!"); +/// }); +/// +/// if let Err(err) = result { +/// panic::propagate(err); +/// } +/// ``` +#[unstable(feature = "panic_propagate", reason = "awaiting feedback", issue = "30752")] +pub fn propagate(payload: Box<Any + Send>) -> ! { + unwind::rust_panic(payload) +} diff --git a/src/libstd/sys/common/unwind/mod.rs b/src/libstd/sys/common/unwind/mod.rs index 0f10e727461..666b2ed72ad 100644 --- a/src/libstd/sys/common/unwind/mod.rs +++ b/src/libstd/sys/common/unwind/mod.rs @@ -172,7 +172,7 @@ pub fn panicking() -> bool { #[inline(never)] #[no_mangle] #[allow(private_no_mangle_fns)] -fn rust_panic(cause: Box<Any + Send + 'static>) -> ! { +pub fn rust_panic(cause: Box<Any + Send + 'static>) -> ! { unsafe { imp::panic(cause) } |
