https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66967
Bug ID: 66967
Summary: thread local's destructor not called if compile with
-fno-use-cxa-atexit
Product: gcc
Version: 5.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: zhykzhykzhyk at gmail dot com
Target Milestone: ---
$ cat a.cc
#include <cstdio>
#include <thread>
struct A {
A() { puts("CONS"); }
~A() { puts("DES"); }
};
static thread_local A a;
int main() {
std::thread t1([]{ a; });
t1.join();
puts("X");
std::thread t2([]{ a; });
t2.join();
}
$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/home/zhyk/gcc5-install/libexec/gcc/x86_64-unknown-linux-gnu/5.2.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/home/zhyk/gcc5-install
--disable-multilib
Thread model: posix
gcc version 5.2.0 (GCC)
$ g++ -std=c++14 -fno-use-cxa-atexit a.cc -lpthread
$ ./a.out
CONS
X
CONS
Expected output:
CONS
DES
X
CONS
DES