diff options
Diffstat (limited to 'src/libstd/thread')
| -rw-r--r-- | src/libstd/thread/local.rs | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs index 02347bf4906..4ee8132f55c 100644 --- a/src/libstd/thread/local.rs +++ b/src/libstd/thread/local.rs @@ -159,8 +159,9 @@ macro_rules! thread_local { #[allow_internal_unstable] #[allow_internal_unsafe] macro_rules! __thread_local_inner { - ($(#[$attr:meta])* $vis:vis $name:ident, $t:ty, $init:expr) => { - $(#[$attr])* $vis static $name: $crate::thread::LocalKey<$t> = { + (@key $(#[$attr:meta])* $vis:vis $name:ident, $t:ty, $init:expr) => { + { + #[inline] fn __init() -> $t { $init } unsafe fn __getit() -> $crate::option::Option< @@ -182,7 +183,16 @@ macro_rules! __thread_local_inner { unsafe { $crate::thread::LocalKey::new(__getit, __init) } - }; + } + }; + ($(#[$attr:meta])* $vis:vis $name:ident, $t:ty, $init:expr) => { + #[cfg(stage0)] + $(#[$attr])* $vis static $name: $crate::thread::LocalKey<$t> = + __thread_local_inner!(@key $(#[$attr])* $vis $name, $t, $init); + + #[cfg(not(stage0))] + $(#[$attr])* $vis const $name: $crate::thread::LocalKey<$t> = + __thread_local_inner!(@key $(#[$attr])* $vis $name, $t, $init); } } |
