diff options
| author | Konrad Borowski <konrad@borowski.pw> | 2022-08-12 15:02:34 +0000 |
|---|---|---|
| committer | Konrad Borowski <konrad@borowski.pw> | 2023-07-31 10:38:24 +0200 |
| commit | 0f06b07552e80f3438cb85d30ec407a2cd8995e8 (patch) | |
| tree | 840ade0bcad0d4ad2b317b8fde7326c66bdfb873 | |
| parent | 03b8b50fcb0c95e1f5ce303572ed4516a59a9b15 (diff) | |
| download | rust-0f06b07552e80f3438cb85d30ec407a2cd8995e8.tar.gz rust-0f06b07552e80f3438cb85d30ec407a2cd8995e8.zip | |
Implement UnwindSafe and RefUnwindSafe for Backtrace
Backtrace doesn't have visible mutable state.
| -rw-r--r-- | library/std/src/backtrace.rs | 3 | ||||
| -rw-r--r-- | library/std/src/backtrace/tests.rs | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/library/std/src/backtrace.rs b/library/std/src/backtrace.rs index f0e199fac73..e7110aebdea 100644 --- a/library/std/src/backtrace.rs +++ b/library/std/src/backtrace.rs @@ -92,6 +92,7 @@ use crate::backtrace_rs::{self, BytesOrWideString}; use crate::env; use crate::ffi::c_void; use crate::fmt; +use crate::panic::UnwindSafe; use crate::sync::atomic::{AtomicUsize, Ordering::Relaxed}; use crate::sync::LazyLock; use crate::sys_common::backtrace::{lock, output_filename}; @@ -427,7 +428,7 @@ impl fmt::Display for Backtrace { } } -type LazyResolve = impl (FnOnce() -> Capture) + Send + Sync; +type LazyResolve = impl (FnOnce() -> Capture) + Send + Sync + UnwindSafe; fn lazy_resolve(mut capture: Capture) -> LazyResolve { move || { diff --git a/library/std/src/backtrace/tests.rs b/library/std/src/backtrace/tests.rs index ef419806dcc..73543a3af54 100644 --- a/library/std/src/backtrace/tests.rs +++ b/library/std/src/backtrace/tests.rs @@ -1,4 +1,5 @@ use super::*; +use crate::panic::{RefUnwindSafe, UnwindSafe}; fn generate_fake_frames() -> Vec<BacktraceFrame> { vec![ @@ -91,3 +92,9 @@ fn test_frames() { assert!(iter.all(|(f, e)| format!("{f:#?}") == *e)); } + +#[test] +fn backtrace_unwind_safe() { + fn assert_unwind_safe<T: UnwindSafe + RefUnwindSafe>() {} + assert_unwind_safe::<Backtrace>(); +} |
