Skip to content

Commit de242c9

Browse files
committed
Remove parallel code
1 parent dd3c5a4 commit de242c9

File tree

2 files changed

+41
-30
lines changed

2 files changed

+41
-30
lines changed

src/librustc/session/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1233,7 +1233,7 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
12331233
"prints the llvm optimization passes being run"),
12341234
ast_json: bool = (false, parse_bool, [UNTRACKED],
12351235
"print the AST as JSON and halt"),
1236-
threads: Option<usize> = (None, parse_opt_uint, [UNTRACKED],
1236+
threads: Option<usize> = (Some(1), parse_opt_uint, [UNTRACKED],
12371237
"use a thread pool with N threads"),
12381238
ast_json_noexpand: bool = (false, parse_bool, [UNTRACKED],
12391239
"print the pre-expansion AST as JSON and halt"),

src/librustc_data_structures/sync.rs

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -311,47 +311,58 @@ cfg_if! {
311311

312312
use std;
313313
use std::thread;
314-
pub use rayon::{join, scope};
314+
315+
pub use self::serial_join as join;
316+
pub use self::serial_scope as scope;
315317

316-
/// Runs a list of blocks in parallel. The first block is executed immediately on
317-
/// the current thread. Use that for the longest running block.
318318
#[macro_export]
319319
macro_rules! parallel {
320-
(impl $fblock:tt [$($c:tt,)*] [$block:tt $(, $rest:tt)*]) => {
321-
parallel!(impl $fblock [$block, $($c,)*] [$($rest),*])
322-
};
323-
(impl $fblock:tt [$($blocks:tt,)*] []) => {
324-
::rustc_data_structures::sync::scope(|s| {
325-
$(
326-
s.spawn(|_| $blocks);
327-
)*
328-
$fblock;
329-
})
330-
};
331-
($fblock:tt, $($blocks:tt),*) => {
332-
// Reverse the order of the later blocks since Rayon executes them in reverse order
333-
// when using a single thread. This ensures the execution order matches that
334-
// of a single threaded rustc
335-
parallel!(impl $fblock [] [$($blocks),*]);
336-
};
320+
($($blocks:tt),*) => {
321+
// We catch panics here ensuring that all the blocks execute.
322+
// This makes behavior consistent with the parallel compiler.
323+
let mut panic = None;
324+
$(
325+
if let Err(p) = ::std::panic::catch_unwind(
326+
::std::panic::AssertUnwindSafe(|| $blocks)
327+
) {
328+
if panic.is_none() {
329+
panic = Some(p);
330+
}
331+
}
332+
)*
333+
if let Some(panic) = panic {
334+
::std::panic::resume_unwind(panic);
335+
}
336+
}
337337
}
338338

339339
pub use rayon_core::WorkerLocal;
340+
use std::panic::{resume_unwind, catch_unwind, AssertUnwindSafe};
340341

341-
pub use rayon::iter::ParallelIterator;
342-
use rayon::iter::IntoParallelIterator;
342+
pub use std::iter::Iterator as ParallelIterator;
343343

344-
pub fn par_iter<T: IntoParallelIterator>(t: T) -> T::Iter {
345-
t.into_par_iter()
344+
pub fn par_iter<T: IntoIterator>(t: T) -> T::IntoIter {
345+
t.into_iter()
346346
}
347347

348-
pub fn par_for_each_in<T: IntoParallelIterator>(
348+
pub fn par_for_each_in<T: IntoIterator>(
349349
t: T,
350-
for_each: impl Fn(
351-
<<T as IntoParallelIterator>::Iter as ParallelIterator>::Item
352-
) + Sync + Send
350+
for_each:
351+
impl Fn(<<T as IntoIterator>::IntoIter as Iterator>::Item) + Sync + Send
353352
) {
354-
t.into_par_iter().for_each(for_each)
353+
// We catch panics here ensuring that all the loop iterations execute.
354+
// This makes behavior consistent with the parallel compiler.
355+
let mut panic = None;
356+
t.into_iter().for_each(|i| {
357+
if let Err(p) = catch_unwind(AssertUnwindSafe(|| for_each(i))) {
358+
if panic.is_none() {
359+
panic = Some(p);
360+
}
361+
}
362+
});
363+
if let Some(panic) = panic {
364+
resume_unwind(panic);
365+
}
355366
}
356367

357368
pub type MetadataRef = OwningRef<Box<dyn Erased + Send + Sync>, [u8]>;

0 commit comments

Comments
 (0)