https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108331
--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:e2fc12a5dafadf15d804e1d2541528296e97a847

commit r13-5143-ge2fc12a5dafadf15d804e1d2541528296e97a847
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Thu Jan 12 10:40:49 2023 +0000

    libstdc++: Fix unintended layout change to std::basic_filebuf [PR108331]

    GCC 13 has a new implementation of gthr-win32.h which supports C++11
    mutexes, threads etc. but this causes an unintended ABI break. The
    __gthread_mutex_t type is always used in std::basic_filebuf even in
    C++98, so independent of whether C++11 sync primitives work or not.
    Because that type changed for the win32 thread model, we have a layout
    change in std::basic_filebuf. The member is completely unused, it just
    gets passed to the std::__basic_file constructor and ignored. So we
    don't need that mutex to actually work, we just need its layout to not
    change.

    Introduce a new __gthr_win32_legacy_mutex_t struct in gthr-win32.h with
    the old layout, and conditionally use that in std::basic_filebuf.

            PR libstdc++/108331

    libgcc/ChangeLog:

            * config/i386/gthr-win32.h (__gthr_win32_legacy_mutex_t): New
            struct matching the previous __gthread_mutex_t struct.
            (__GTHREAD_LEGACY_MUTEX_T): Define.

    libstdc++-v3/ChangeLog:

            * config/io/c_io_stdio.h (__c_lock): Define as a typedef for
            __GTHREAD_LEGACY_MUTEX_T if defined.

Reply via email to