From 847f4613e0a60ce657924439f9339706911bbfab Mon Sep 17 00:00:00 2001 From: Chris Denton Date: Mon, 1 Aug 2022 01:46:49 +0100 Subject: [PATCH] Never inline Windows dtor access --- library/std/src/sys/windows/thread_local_dtor.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/std/src/sys/windows/thread_local_dtor.rs b/library/std/src/sys/windows/thread_local_dtor.rs index 25d1c6e8e87c2..9707a95dff21b 100644 --- a/library/std/src/sys/windows/thread_local_dtor.rs +++ b/library/std/src/sys/windows/thread_local_dtor.rs @@ -8,10 +8,14 @@ #[thread_local] static mut DESTRUCTORS: Vec<(*mut u8, unsafe extern "C" fn(*mut u8))> = Vec::new(); +// Ensure this can never be inlined because otherwise this may break in dylibs. +// See #44391. +#[inline(never)] pub unsafe fn register_dtor(t: *mut u8, dtor: unsafe extern "C" fn(*mut u8)) { DESTRUCTORS.push((t, dtor)); } +#[inline(never)] // See comment above /// Runs destructors. This should not be called until thread exit. pub unsafe fn run_keyless_dtors() { // Drop all the destructors.