Open
Description
Today a destructor in TLS which panics will abort the process:
struct Foo;
impl Drop for Foo {
fn drop(&mut self) { panic!() }
}
thread_local!(static FOO: Foo = Foo);
pub fn main() {
FOO.with(|_| {});
}
When compiled and run (note that it must be run on a recent system due to #19776):
thread '<main>' panicked at 'explicit panic', foo.rs:4
fatal runtime error: Could not unwind stack, error = 5
zsh: illegal hardware instruction ./foo
The reason behind this is that the context in which TLS destructors are running is different than the execution of the main thread itself (e.g. there is no try/catch block).
Is this (a) desirable and (b) should we change it?