Skip to content

Commit

Permalink
Make CompileController thread-safe
Browse files Browse the repository at this point in the history
  • Loading branch information
Zoxc committed Jan 3, 2019
1 parent 1409363 commit 75b2e14
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/librustc_data_structures/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@ cfg_if! {
}

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

Expand Down
7 changes: 4 additions & 3 deletions src/librustc_driver/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -403,14 +403,15 @@ pub struct CompileController<'a> {

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

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

impl<'a> PhaseController<'a> {
Expand Down

0 comments on commit 75b2e14

Please sign in to comment.