From c20f8d2fd62344658b53cccf7b599eeb9a8d1de6 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 2 Apr 2022 11:37:53 -0700 Subject: [PATCH 1/2] Add test of thread_local! breaking on redefined u8 --- src/test/ui/thread-local/name-collision.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/test/ui/thread-local/name-collision.rs diff --git a/src/test/ui/thread-local/name-collision.rs b/src/test/ui/thread-local/name-collision.rs new file mode 100644 index 0000000000000..dcff9183ad95a --- /dev/null +++ b/src/test/ui/thread-local/name-collision.rs @@ -0,0 +1,15 @@ +// check-pass + +#[allow(non_camel_case_types)] +struct u8; + +std::thread_local! { + pub static A: i32 = f(); + pub static B: i32 = const { 0 }; +} + +fn f() -> i32 { + 0 +} + +fn main() {} From d93af619812711ebf047a8d0e3fa1f86f07d7da9 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 2 Apr 2022 11:12:39 -0700 Subject: [PATCH 2/2] Refer to u8 by absolute path in expansion of thread_local --- library/std/src/thread/local.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/std/src/thread/local.rs b/library/std/src/thread/local.rs index 587e453ceef91..a41cb02a6070d 100644 --- a/library/std/src/thread/local.rs +++ b/library/std/src/thread/local.rs @@ -217,9 +217,9 @@ macro_rules! __thread_local_inner { // 1 == dtor registered, dtor not run // 2 == dtor registered and is running or has run #[thread_local] - static mut STATE: u8 = 0; + static mut STATE: $crate::primitive::u8 = 0; - unsafe extern "C" fn destroy(ptr: *mut u8) { + unsafe extern "C" fn destroy(ptr: *mut $crate::primitive::u8) { let ptr = ptr as *mut $t; unsafe { @@ -235,7 +235,7 @@ macro_rules! __thread_local_inner { // so now. 0 => { $crate::thread::__FastLocalKeyInner::<$t>::register_dtor( - $crate::ptr::addr_of_mut!(VAL) as *mut u8, + $crate::ptr::addr_of_mut!(VAL) as *mut $crate::primitive::u8, destroy, ); STATE = 1;