This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 1 file changed +5
-2
lines changed
compiler/rustc_data_structures/src Expand file tree Collapse file tree 1 file changed +5
-2
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ use crate::owning_ref::{Erased, OwningRef};
2121use std:: collections:: HashMap ;
2222use std:: hash:: { BuildHasher , Hash } ;
2323use std:: ops:: { Deref , DerefMut } ;
24+ use std:: panic:: { catch_unwind, resume_unwind, AssertUnwindSafe } ;
2425
2526pub use std:: sync:: atomic:: Ordering ;
2627pub use std:: sync:: atomic:: Ordering :: SeqCst ;
@@ -41,7 +42,6 @@ cfg_if! {
4142 }
4243
4344 use std:: ops:: Add ;
44- use std:: panic:: { resume_unwind, catch_unwind, AssertUnwindSafe } ;
4545
4646 /// This is a single threaded variant of `AtomicU64`, `AtomicUsize`, etc.
4747 /// It has explicit ordering arguments and is only intended for use with
@@ -339,7 +339,10 @@ cfg_if! {
339339 t: T ,
340340 for_each: impl Fn ( T :: Item ) + Sync + Send ,
341341 ) {
342- t. into_par_iter( ) . for_each( for_each)
342+ let ps: Vec <_> = t. into_par_iter( ) . map( |i| catch_unwind( AssertUnwindSafe ( || for_each( i) ) ) ) . collect( ) ;
343+ ps. into_iter( ) . for_each( |p| if let Err ( panic) = p {
344+ resume_unwind( panic)
345+ } ) ;
343346 }
344347
345348 pub type MetadataRef = OwningRef <Box <dyn Erased + Send + Sync >, [ u8 ] >;
You can’t perform that action at this time.
0 commit comments