| //@ only-x86_64 |
| //@ compile-flags: -Ccode-model=large --crate-type lib |
| //@ build-pass |
| // |
| // Regression test for issue #37508 |
| |
| // FIXME(static_mut_refs): Do not allow `static_mut_refs` lint |
| #![allow(static_mut_refs)] |
| |
| #![no_main] |
| #![no_std] |
| #![feature(thread_local, lang_items)] |
| |
| #[lang = "eh_personality"] |
| extern "C" fn eh_personality() {} |
| |
| use core::panic::PanicInfo; |
| |
| #[panic_handler] |
| fn panic(_panic: &PanicInfo<'_>) -> ! { |
| loop {} |
| } |
| |
| pub struct BB; |
| |
| #[thread_local] |
| static mut KEY: Key = Key { inner: BB, dtor_running: false }; |
| |
| pub unsafe fn set() -> Option<&'static BB> { |
| if KEY.dtor_running { |
| return None; |
| } |
| Some(&KEY.inner) |
| } |
| |
| pub struct Key { |
| inner: BB, |
| dtor_running: bool, |
| } |