]> git.lizzy.rs Git - rust.git/blob - tests/ui/panics/panic-handler-chain-update-hook.rs
Rollup merge of #106570 - Xaeroxe:div-duration-tests, r=JohnTitor
[rust.git] / tests / ui / panics / panic-handler-chain-update-hook.rs
1 // run-pass
2 // needs-unwind
3 #![allow(stable_features)]
4
5 // ignore-emscripten no threads support
6
7 #![feature(std_panic)]
8 #![feature(panic_update_hook)]
9
10 use std::sync::atomic::{AtomicUsize, Ordering};
11 use std::panic;
12 use std::thread;
13
14 static A: AtomicUsize = AtomicUsize::new(0);
15 static B: AtomicUsize = AtomicUsize::new(0);
16 static C: AtomicUsize = AtomicUsize::new(0);
17
18 fn main() {
19     panic::set_hook(Box::new(|_| { A.fetch_add(1, Ordering::SeqCst); }));
20     panic::update_hook(|prev, info| {
21         B.fetch_add(1, Ordering::SeqCst);
22         prev(info);
23     });
24     panic::update_hook(|prev, info| {
25         C.fetch_add(1, Ordering::SeqCst);
26         prev(info);
27     });
28
29     let _ = thread::spawn(|| {
30         panic!();
31     }).join();
32
33     assert_eq!(1, A.load(Ordering::SeqCst));
34     assert_eq!(1, B.load(Ordering::SeqCst));
35     assert_eq!(1, C.load(Ordering::SeqCst));
36 }