diff options
| author | Gary Guo <gary@garyguo.net> | 2023-04-12 14:55:35 +0100 |
|---|---|---|
| committer | Gary Guo <gary@garyguo.net> | 2023-04-13 11:36:22 +0100 |
| commit | 731c6dcb60ffd4980b27338be652bb932790cc83 (patch) | |
| tree | 8db39a0e5dd21bdce5e84113ebc5a75ac2f73f09 | |
| parent | 5c9b371a2f3ef7f08e213e236c53733e2e5981c7 (diff) | |
| download | rust-731c6dcb60ffd4980b27338be652bb932790cc83.tar.gz rust-731c6dcb60ffd4980b27338be652bb932790cc83.zip | |
Document catch_fn in r#try cannot unwind
| -rw-r--r-- | library/core/src/intrinsics.rs | 2 | ||||
| -rw-r--r-- | library/std/src/panicking.rs | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/library/core/src/intrinsics.rs b/library/core/src/intrinsics.rs index 10c5425b7cf..a7c100e1b23 100644 --- a/library/core/src/intrinsics.rs +++ b/library/core/src/intrinsics.rs @@ -2276,6 +2276,8 @@ extern "rust-intrinsic" { /// takes the data pointer and a pointer to the target-specific exception /// object that was caught. For more information see the compiler's /// source as well as std's catch implementation. + /// + /// `catch_fn` must not unwind. #[rustc_nounwind] pub fn r#try(try_fn: fn(*mut u8), data: *mut u8, catch_fn: fn(*mut u8, *mut u8)) -> i32; diff --git a/library/std/src/panicking.rs b/library/std/src/panicking.rs index e505466e535..a46a29cbad6 100644 --- a/library/std/src/panicking.rs +++ b/library/std/src/panicking.rs @@ -498,6 +498,7 @@ pub unsafe fn r#try<R, F: FnOnce() -> R>(f: F) -> Result<R, Box<dyn Any + Send>> // This function cannot be marked as `unsafe` because `intrinsics::r#try` // expects normal function pointers. #[inline] + #[rustc_nounwind] // `intrinsic::r#try` requires catch fn to be nounwind fn do_catch<F: FnOnce() -> R, R>(data: *mut u8, payload: *mut u8) { // SAFETY: this is the responsibility of the caller, see above. // |
