diff options
| author | Nikita Popov <npopov@redhat.com> | 2022-07-27 13:07:48 +0200 |
|---|---|---|
| committer | Nikita Popov <npopov@redhat.com> | 2022-07-27 16:19:07 +0200 |
| commit | c87e20bab091ef007d7ecdfd09353f2d53886897 (patch) | |
| tree | 1806fefd37e5dfb70615d3ff5e5e6c73ab2d16bc /compiler/rustc_codegen_ssa/src | |
| parent | b00d0fa0c9b8b8b2465f827dfc081e8c9a07d882 (diff) | |
| download | rust-c87e20bab091ef007d7ecdfd09353f2d53886897.tar.gz rust-c87e20bab091ef007d7ecdfd09353f2d53886897.zip | |
Also wait on other threads if a WorkerFatalError occurs
This means that codegen_aborted may be set when new codegen requests arrive, so drop some related assertions. The new work will simply be ignored.
Diffstat (limited to 'compiler/rustc_codegen_ssa/src')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/write.rs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/write.rs b/compiler/rustc_codegen_ssa/src/back/write.rs index d1643eb271e..1b5ad87107a 100644 --- a/compiler/rustc_codegen_ssa/src/back/write.rs +++ b/compiler/rustc_codegen_ssa/src/back/write.rs @@ -1475,14 +1475,12 @@ fn start_executing_work<B: ExtraBackendMethods>( if !cgcx.opts.unstable_opts.no_parallel_llvm { helper.request_token(); } - assert!(!codegen_aborted); assert_eq!(main_thread_worker_state, MainThreadWorkerState::Codegenning); main_thread_worker_state = MainThreadWorkerState::Idle; } Message::CodegenComplete => { codegen_done = true; - assert!(!codegen_aborted); assert_eq!(main_thread_worker_state, MainThreadWorkerState::Codegenning); main_thread_worker_state = MainThreadWorkerState::Idle; } @@ -1494,7 +1492,6 @@ fn start_executing_work<B: ExtraBackendMethods>( // then conditions above will ensure no more work is spawned but // we'll keep executing this loop until `running` hits 0. Message::CodegenAborted => { - assert!(!codegen_aborted); codegen_done = true; codegen_aborted = true; } @@ -1536,8 +1533,11 @@ fn start_executing_work<B: ExtraBackendMethods>( Message::Done { result: Err(None), worker_id: _ } => { bug!("worker thread panicked"); } - Message::Done { result: Err(Some(WorkerFatalError)), worker_id: _ } => { - return Err(()); + Message::Done { result: Err(Some(WorkerFatalError)), worker_id } => { + // Similar to CodegenAborted, wait for remaining work to finish. + free_worker(worker_id); + codegen_done = true; + codegen_aborted = true; } Message::CodegenItem => bug!("the coordinator should not receive codegen requests"), } |
