diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-08-01 17:39:09 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-01 17:39:09 +0200 |
| commit | c97af34de1fc1b92a5b600d831cad48e742ed4c3 (patch) | |
| tree | 202457c000970ab3231c9eb9ccf4353394137f96 /library/std/src | |
| parent | c435af0d5c47a333c7cb7f359f3586d5c9dab3ab (diff) | |
| parent | 0f06b07552e80f3438cb85d30ec407a2cd8995e8 (diff) | |
| download | rust-c97af34de1fc1b92a5b600d831cad48e742ed4c3.tar.gz rust-c97af34de1fc1b92a5b600d831cad48e742ed4c3.zip | |
Rollup merge of #100455 - xfix:backtrace-ref-unwind-safe, r=dtolnay
Implement RefUnwindSafe for Backtrace Backtrace doesn't have visible mutable state. See also https://internals.rust-lang.org/t/should-backtrace-be-refunwindsafe/17169?u=xfix
Diffstat (limited to 'library/std/src')
| -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>(); +} |
