[cfe-dev] [RFC] Suppress C++ static destructor registration
Bruno Cardoso Lopes via cfe-dev
cfe-dev at lists.llvm.org
Mon Jul 18 13:39:49 PDT 2016
Hi,
C++ static destructors can be problematic in multi-threaded
environment. Some of the issues users often complain about include:
1. Teardown ordering: crashes when one thread is exiting the process
and calling destructors while another thread is still running and
accessing the destructing variables
2. Shared code that is compiled both as an application and as a
library. When library mode is chosen, goto (1).
3. Some projects currently override __cxa_atexit to avoid the behavior
in question.
To get around that, I propose we add a compiler option (e.g.
-fno-cxx-static-destructors) to allow clang to suppress destructor
registration (currently done via __cxa_atexit, atexit):
https://reviews.llvm.org/D22474
I'm opening this discussion here on cfe-dev to get some feedback on the matter
One can argue that dealing with C++ static destructors in
multi-threaded environment is solely the responsibility of the
developer, however since (AFAIK) we don't have any standard guaranteed
semantic for "global destruction vs. threads", it seems fair to me
that we could give developers some option.
Cheers,
--
Bruno Cardoso Lopes
http://www.brunocardoso.cc
More information about the cfe-dev
mailing list