diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-05-19 20:44:06 +0200 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-05-27 08:58:05 +0200 |
| commit | 3ed05613eeadd6baf332f6d4021c1973cb37ac21 (patch) | |
| tree | fdb872e46533093b05d09e1d450bd622a80c4daf | |
| parent | be10e6277b738df3cc8ac316872227879118cc64 (diff) | |
| download | rust-3ed05613eeadd6baf332f6d4021c1973cb37ac21.tar.gz rust-3ed05613eeadd6baf332f6d4021c1973cb37ac21.zip | |
Short circuit Send and Sync impls for TokenTree
| -rw-r--r-- | src/libsyntax/tokenstream.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs index 79efc6bf689..397fb45513c 100644 --- a/src/libsyntax/tokenstream.rs +++ b/src/libsyntax/tokenstream.rs @@ -49,6 +49,28 @@ pub enum TokenTree { Delimited(DelimSpan, DelimToken, TokenStream), } +// Ensure all fields of `TokenTree` is `Send` and `Sync`. +#[cfg(parallel_compiler)] +fn _dummy() +where + Span: Send + Sync, + token::Token: Send + Sync, + DelimSpan: Send + Sync, + DelimToken: Send + Sync, + TokenStream: Send + Sync, +{} + +// These are safe since we ensure that they hold for all fields in the `_dummy` function. +// +// These impls are only here because the compiler takes forever to compute the Send and Sync +// bounds without them. +// FIXME: Remove these impls when the compiler can compute the bounds quickly again. +// See https://github.com/rust-lang/rust/issues/60846 +#[cfg(parallel_compiler)] +unsafe impl Send for TokenTree {} +#[cfg(parallel_compiler)] +unsafe impl Sync for TokenTree {} + impl TokenTree { /// Use this token tree as a matcher to parse given tts. pub fn parse(cx: &base::ExtCtxt<'_>, mtch: &[quoted::TokenTree], tts: TokenStream) |
