[Bug libstdc++/105880] eh_globals_init destructor not setting _M_init to false
chrisj at rtems dot org
gcc-bugzilla@gcc.gnu.org
Wed Jun 8 06:00:41 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105880
--- Comment #4 from Chris Johns <chrisj at rtems dot org> ---
(In reply to Andrew Pinski from comment #3)
> Sounds like the order of deconstructors is wrong.
> Where is __cxxabiv1::__cxa_get_globals being called from that is the problem?
The `std::ios_base::Init::~Init()` is being called after this object has
destructed.
The ios_base class uses a sentry to check the state. The code in it's
destructor is:
if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
The std::cerr object has ios_base::unitbuf set so uncaught_exception() is
called. This call gets the cxa globals:
__cxa_eh_globals *globals = __cxa_get_globals ();
More information about the Gcc-bugs
mailing list