mirror of
https://github.com/EmbarkStudios/rust-gpu.git
synced 2025-02-16 08:54:56 +00:00
Get rid of run_in_thread_pool_with_globals
altogether,
This commit is contained in:
parent
94a752d9db
commit
8bd42bcc3a
@ -3,8 +3,7 @@ use crate::codegen_cx::SpirvMetadata;
|
||||
use pipe::pipe;
|
||||
use rspirv::dr::{Loader, Module};
|
||||
use rustc_errors::registry::Registry;
|
||||
use rustc_span::edition::Edition;
|
||||
use std::{io::Read, thread};
|
||||
use std::io::Read;
|
||||
|
||||
// https://github.com/colin-kiegel/rust-pretty-assertions/issues/24
|
||||
#[derive(PartialEq, Eq)]
|
||||
@ -55,43 +54,6 @@ fn load(bytes: &[u8]) -> Module {
|
||||
loader.module()
|
||||
}
|
||||
|
||||
// HACK(shesp) This function was taken from `rustc_interface::util` since it's
|
||||
// no longer public. It's the non-parallel version since it's simpler and good
|
||||
// enough for our tests.
|
||||
fn run_in_thread_pool_with_globals<F: FnOnce() -> R + Send, R: Send>(
|
||||
edition: Edition,
|
||||
_threads: usize,
|
||||
f: F,
|
||||
) -> R {
|
||||
// The "thread pool" is a single spawned thread in the non-parallel
|
||||
// compiler. We run on a spawned thread instead of the main thread (a) to
|
||||
// provide control over the stack size, and (b) to increase similarity with
|
||||
// the parallel compiler, in particular to ensure there is no accidental
|
||||
// sharing of data between the main thread and the compilation thread
|
||||
// (which might cause problems for the parallel compiler).
|
||||
let mut builder = thread::Builder::new().name("rustc".to_string());
|
||||
const STACK_SIZE: usize = 8 * 1024 * 1024;
|
||||
builder = builder.stack_size(STACK_SIZE);
|
||||
|
||||
// We build the session globals and run `f` on the spawned thread, because
|
||||
// `SessionGlobals` does not impl `Send` in the non-parallel compiler.
|
||||
thread::scope(|s| {
|
||||
// `unwrap` is ok here because `spawn_scoped` only panics if the thread
|
||||
// name contains null bytes.
|
||||
let r = builder
|
||||
.spawn_scoped(s, move || {
|
||||
rustc_span::create_session_globals_then(edition, f)
|
||||
})
|
||||
.unwrap()
|
||||
.join();
|
||||
|
||||
match r {
|
||||
Ok(v) => v,
|
||||
Err(e) => std::panic::resume_unwind(e),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn assemble_and_link(binaries: &[&[u8]]) -> Result<Module, PrettyString> {
|
||||
let modules = binaries.iter().cloned().map(load).collect::<Vec<_>>();
|
||||
|
||||
@ -118,7 +80,7 @@ fn assemble_and_link(binaries: &[&[u8]]) -> Result<Module, PrettyString> {
|
||||
let matches = rustc_driver::handle_options(&["".to_string(), "x.rs".to_string()]).unwrap();
|
||||
let sopts = rustc_session::config::build_session_options(&matches);
|
||||
|
||||
run_in_thread_pool_with_globals(sopts.edition, sopts.unstable_opts.threads, || {
|
||||
rustc_span::create_session_globals_then(sopts.edition, || {
|
||||
let mut sess = rustc_session::build_session(
|
||||
sopts,
|
||||
None,
|
||||
|
Loading…
Reference in New Issue
Block a user