diff --git a/src/tools/miri/tests/fail/panic/thread_local_const_drop_panic.rs b/src/tools/miri/tests/fail/panic/thread_local_const_drop_panic.rs new file mode 100644 index 00000000000..53d169967fa --- /dev/null +++ b/src/tools/miri/tests/fail/panic/thread_local_const_drop_panic.rs @@ -0,0 +1,17 @@ +//@error-in-other-file: aborted execution + +pub struct NoisyDrop {} + +impl Drop for NoisyDrop { + fn drop(&mut self) { + panic!("ow"); + } +} + +thread_local! { + pub static NOISY: NoisyDrop = const { NoisyDrop {} }; +} + +fn main() { + NOISY.with(|_| ()); +} diff --git a/src/tools/miri/tests/fail/panic/thread_local_const_drop_panic.stderr b/src/tools/miri/tests/fail/panic/thread_local_const_drop_panic.stderr new file mode 100644 index 00000000000..122af7babe5 --- /dev/null +++ b/src/tools/miri/tests/fail/panic/thread_local_const_drop_panic.stderr @@ -0,0 +1,26 @@ +thread '' panicked at 'ow', $DIR/thread_local_const_drop_panic.rs:LL:CC +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +fatal runtime error: thread local panicked on drop +error: abnormal termination: the program aborted execution + --> RUSTLIB/std/src/sys/PLATFORM/mod.rs:LL:CC + | +LL | unsafe { libc::abort() } + | ^^^^^^^^^^^^^ the program aborted execution + | + = note: inside `std::sys::PLATFORM::abort_internal` at RUSTLIB/std/src/sys/PLATFORM/mod.rs:LL:CC + = note: inside `::drop` at RUSTLIB/std/src/rt.rs:LL:CC + = note: inside `std::ptr::drop_in_place:: - shim(Some(std::thread::local_impl::abort_on_dtor_unwind::DtorUnwindGuard))` at RUSTLIB/core/src/ptr/mod.rs:LL:CC + = note: inside `RUSTLIB/std/src/sys/PLATFORM/thread_local/fast_local.rs:LL:CC]>` at RUSTLIB/std/src/sys/PLATFORM/thread_local/mod.rs:LL:CC +note: inside `NOISY::__getit::destroy` + --> $DIR/thread_local_const_drop_panic.rs:LL:CC + | +LL | / thread_local! { +LL | | pub static NOISY: NoisyDrop = const { NoisyDrop {} }; +LL | | } + | |_^ + = note: this error originates in the macro `$crate::thread::local_impl::thread_local_inner` which comes from the expansion of the macro `thread_local` (in Nightly builds, run with -Z macro-backtrace for more info) + +note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace + +error: aborting due to previous error + diff --git a/src/tools/miri/tests/fail/panic/thread_local_drop_panic.rs b/src/tools/miri/tests/fail/panic/thread_local_drop_panic.rs new file mode 100644 index 00000000000..7880aeff103 --- /dev/null +++ b/src/tools/miri/tests/fail/panic/thread_local_drop_panic.rs @@ -0,0 +1,17 @@ +//@error-in-other-file: aborted execution + +pub struct NoisyDrop {} + +impl Drop for NoisyDrop { + fn drop(&mut self) { + panic!("ow"); + } +} + +thread_local! { + pub static NOISY: NoisyDrop = NoisyDrop {}; +} + +fn main() { + NOISY.with(|_| ()); +} diff --git a/src/tools/miri/tests/fail/panic/thread_local_drop_panic.stderr b/src/tools/miri/tests/fail/panic/thread_local_drop_panic.stderr new file mode 100644 index 00000000000..6b6627331b4 --- /dev/null +++ b/src/tools/miri/tests/fail/panic/thread_local_drop_panic.stderr @@ -0,0 +1,15 @@ +thread '' panicked at 'ow', $DIR/thread_local_drop_panic.rs:LL:CC +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +fatal runtime error: thread local panicked on drop +error: abnormal termination: the program aborted execution + --> RUSTLIB/std/src/sys/PLATFORM/mod.rs:LL:CC + | +LL | unsafe { libc::abort() } + | ^^^^^^^^^^^^^ the program aborted execution + | + = note: inside `std::sys::PLATFORM::abort_internal` at RUSTLIB/std/src/sys/PLATFORM/mod.rs:LL:CC + = note: inside `std::sys::PLATFORM::thread_local::fast_local::destroy_value::` at RUSTLIB/std/src/rt.rs:LL:CC + = note: inside `std::sys_common::thread_local_dtor::register_dtor_fallback::run_dtors` at RUSTLIB/std/src/sys_common/thread_local_dtor.rs:LL:CC + +error: aborting due to previous error +