diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-01-03 18:14:01 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-01-03 18:14:01 +0100 |
| commit | 75b2e143f125d7e214b8d3e54b3079caba1cc065 (patch) | |
| tree | 28d56df8c5fe4e03dd821ef580e9e45650dc515a | |
| parent | 140936307e692c324815c9640696b3e3f0c7ae78 (diff) | |
| download | rust-75b2e143f125d7e214b8d3e54b3079caba1cc065.tar.gz rust-75b2e143f125d7e214b8d3e54b3079caba1cc065.zip | |
Make CompileController thread-safe
| -rw-r--r-- | src/librustc_data_structures/sync.rs | 1 | ||||
| -rw-r--r-- | src/librustc_driver/driver.rs | 7 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/librustc_data_structures/sync.rs b/src/librustc_data_structures/sync.rs index d935eb7bdab..c18a5328dd5 100644 --- a/src/librustc_data_structures/sync.rs +++ b/src/librustc_data_structures/sync.rs @@ -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) {} diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 9b232edc11d..31e267ef3b6 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -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(), @@ -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> { |
