diff options
| author | bors <bors@rust-lang.org> | 2025-02-23 08:06:25 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-02-23 08:06:25 +0000 |
| commit | 1805b3348341e0918912ab61cb1dffad41648d23 (patch) | |
| tree | de386957c473de14144f4871298ec81b38ad5bab /library/std/src/sync | |
| parent | bb2cc59a2172d6e35c89b409a4e6b5058d9039d7 (diff) | |
| parent | d41520052e7cd2305097af1ed0be1741ff899d7b (diff) | |
| download | rust-1805b3348341e0918912ab61cb1dffad41648d23.tar.gz rust-1805b3348341e0918912ab61cb1dffad41648d23.zip | |
Auto merge of #137466 - jhpratt:rollup-spyi02y, r=jhpratt
Rollup of 9 pull requests
Successful merges:
- #135354 ([Debuginfo] Add MSVC Synthetic and Summary providers to LLDB)
- #136826 (Replace mem::zeroed with mem::MaybeUninit::uninit for large struct in Unix)
- #137194 (More const {} init in thread_local)
- #137334 (Greatly simplify lifetime captures in edition 2024)
- #137382 (bootstrap: add doc for vendor build step)
- #137423 (Improve a bit HIR pretty printer)
- #137435 (Fix "missing match arm body" suggestion involving `!`)
- #137448 (Fix bugs due to unhandled `ControlFlow` in compiler)
- #137458 (Fix missing self subst when rendering `impl Fn*<T>` with no output type)
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'library/std/src/sync')
| -rw-r--r-- | library/std/src/sync/mpmc/mod.rs | 3 | ||||
| -rw-r--r-- | library/std/src/sync/mpmc/tests.rs | 14 | ||||
| -rw-r--r-- | library/std/src/sync/mpmc/waker.rs | 2 |
3 files changed, 18 insertions, 1 deletions
diff --git a/library/std/src/sync/mpmc/mod.rs b/library/std/src/sync/mpmc/mod.rs index 8caa2dcfad9..8712332dd27 100644 --- a/library/std/src/sync/mpmc/mod.rs +++ b/library/std/src/sync/mpmc/mod.rs @@ -1382,3 +1382,6 @@ impl<T> fmt::Debug for Receiver<T> { f.pad("Receiver { .. }") } } + +#[cfg(test)] +mod tests; diff --git a/library/std/src/sync/mpmc/tests.rs b/library/std/src/sync/mpmc/tests.rs new file mode 100644 index 00000000000..6deb4dc2fe0 --- /dev/null +++ b/library/std/src/sync/mpmc/tests.rs @@ -0,0 +1,14 @@ +// Ensure that thread_local init with `const { 0 }` still has unique address at run-time +#[test] +fn waker_current_thread_id() { + let first = super::waker::current_thread_id(); + let t = crate::thread::spawn(move || { + let second = super::waker::current_thread_id(); + assert_ne!(first, second); + assert_eq!(second, super::waker::current_thread_id()); + }); + + assert_eq!(first, super::waker::current_thread_id()); + t.join().unwrap(); + assert_eq!(first, super::waker::current_thread_id()); +} diff --git a/library/std/src/sync/mpmc/waker.rs b/library/std/src/sync/mpmc/waker.rs index 1895466f95d..f5e764e69bd 100644 --- a/library/std/src/sync/mpmc/waker.rs +++ b/library/std/src/sync/mpmc/waker.rs @@ -204,6 +204,6 @@ impl Drop for SyncWaker { pub fn current_thread_id() -> usize { // `u8` is not drop so this variable will be available during thread destruction, // whereas `thread::current()` would not be - thread_local! { static DUMMY: u8 = 0 } + thread_local! { static DUMMY: u8 = const { 0 } } DUMMY.with(|x| (x as *const u8).addr()) } |
