diff options
| author | reez12g <reez12g@gmail.com> | 2022-02-22 08:37:52 +0900 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2022-03-03 22:41:27 -0500 |
| commit | bca67fe02f010754b5522c2c6234375cffa66b81 (patch) | |
| tree | bd94d4205ae556425b5d4f2cc7a9d0e122dcb94c | |
| parent | 6d7684101a51f1c375ec84aef5d2fbdeb214bbc2 (diff) | |
| download | rust-bca67fe02f010754b5522c2c6234375cffa66b81.tar.gz rust-bca67fe02f010754b5522c2c6234375cffa66b81.zip | |
Add #[track_caller] to track callers when initializing poisoned Once
| -rw-r--r-- | library/std/src/sync/once.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-87707.rs | 15 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-87707.run.stderr | 3 |
3 files changed, 20 insertions, 0 deletions
diff --git a/library/std/src/sync/once.rs b/library/std/src/sync/once.rs index f76d0759561..511de863dc5 100644 --- a/library/std/src/sync/once.rs +++ b/library/std/src/sync/once.rs @@ -256,6 +256,7 @@ impl Once { /// /// [poison]: struct.Mutex.html#poisoning #[stable(feature = "rust1", since = "1.0.0")] + #[track_caller] pub fn call_once<F>(&self, f: F) where F: FnOnce(), @@ -390,6 +391,7 @@ impl Once { // currently no way to take an `FnOnce` and call it via virtual dispatch // without some allocation overhead. #[cold] + #[track_caller] fn call_inner(&self, ignore_poisoning: bool, init: &mut dyn FnMut(&OnceState)) { let mut state_and_queue = self.state_and_queue.load(Ordering::Acquire); loop { diff --git a/src/test/ui/issues/issue-87707.rs b/src/test/ui/issues/issue-87707.rs new file mode 100644 index 00000000000..d2e9343f86c --- /dev/null +++ b/src/test/ui/issues/issue-87707.rs @@ -0,0 +1,15 @@ +// test for #87707 +// edition:2018 +// run-fail +// check-run-results + +use std::sync::Once; +use std::panic; + +fn main() { + let o = Once::new(); + let _ = panic::catch_unwind(|| { + o.call_once(|| panic!("Here Once instance is poisoned.")); + }); + o.call_once(|| {}); +} diff --git a/src/test/ui/issues/issue-87707.run.stderr b/src/test/ui/issues/issue-87707.run.stderr new file mode 100644 index 00000000000..8f82ccc0c2a --- /dev/null +++ b/src/test/ui/issues/issue-87707.run.stderr @@ -0,0 +1,3 @@ +thread 'main' panicked at 'Here Once instance is poisoned.', $DIR/issue-87707.rs:12:24 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +thread 'main' panicked at 'Once instance has previously been poisoned', $DIR/issue-87707.rs:14:7 |
