about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonrad Borowski <konrad@borowski.pw>2022-08-12 15:02:34 +0000
committerKonrad Borowski <konrad@borowski.pw>2023-07-31 10:38:24 +0200
commit0f06b07552e80f3438cb85d30ec407a2cd8995e8 (patch)
tree840ade0bcad0d4ad2b317b8fde7326c66bdfb873
parent03b8b50fcb0c95e1f5ce303572ed4516a59a9b15 (diff)
downloadrust-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.rs3
-rw-r--r--library/std/src/backtrace/tests.rs7
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>();
+}