Skip to content

Commit 75b2e14

Browse files
committed
Make CompileController thread-safe
1 parent 1409363 commit 75b2e14

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

src/librustc_data_structures/sync.rs

+1
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ cfg_if! {
323323
}
324324

325325
pub fn assert_sync<T: ?Sized + Sync>() {}
326+
pub fn assert_send<T: ?Sized + Send>() {}
326327
pub fn assert_send_val<T: ?Sized + Send>(_t: &T) {}
327328
pub fn assert_send_sync_val<T: ?Sized + Sync + Send>(_t: &T) {}
328329

src/librustc_driver/driver.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -403,14 +403,15 @@ pub struct CompileController<'a> {
403403

404404
/// Allows overriding default rustc query providers,
405405
/// after `default_provide` has installed them.
406-
pub provide: Box<dyn Fn(&mut ty::query::Providers) + 'a>,
406+
pub provide: Box<dyn Fn(&mut ty::query::Providers) + 'a + sync::Send>,
407407
/// Same as `provide`, but only for non-local crates,
408408
/// applied after `default_provide_extern`.
409-
pub provide_extern: Box<dyn Fn(&mut ty::query::Providers) + 'a>,
409+
pub provide_extern: Box<dyn Fn(&mut ty::query::Providers) + 'a + sync::Send>,
410410
}
411411

412412
impl<'a> CompileController<'a> {
413413
pub fn basic() -> CompileController<'a> {
414+
sync::assert_send::<Self>();
414415
CompileController {
415416
after_parse: PhaseController::basic(),
416417
after_expand: PhaseController::basic(),
@@ -500,7 +501,7 @@ pub struct PhaseController<'a> {
500501
// If true then the compiler will try to run the callback even if the phase
501502
// ends with an error. Note that this is not always possible.
502503
pub run_callback_on_error: bool,
503-
pub callback: Box<dyn Fn(&mut CompileState) + 'a>,
504+
pub callback: Box<dyn Fn(&mut CompileState) + 'a + sync::Send>,
504505
}
505506

506507
impl<'a> PhaseController<'a> {

0 commit comments

Comments
 (0)