Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix MinGW build with _WIN32_WINNT<0x600, GCC>=13, model=win32
unordered_dense.h fails to compile on Windows/MinGW with GCC >= 13 with thread model win32, and _WIN32_WINNT < 0x600 (Vista), in CFLAGS/CXXFLAGS. E.g., GDB defines _WIN32_WINNT to 0x501, and it fails to build with GCC 14.2 like so: CXX ada-exp.o In file included from /opt/xpack-mingw-w64-gcc-14.2.0-1/x86_64-w64-mingw32/include/c++/14.2.0/shared_mutex:42, from /opt/xpack-mingw-w64-gcc-14.2.0-1/x86_64-w64-mingw32/include/c++/14.2.0/memory_resource:66, from /home/pedro/gdb/src/gdb/../gdbsupport/unordered_dense.h:104, from /home/pedro/gdb/src/gdb/../gdbsupport/unordered_map.h:21, from /home/pedro/gdb/src/gdb/gdbtypes.h:53, from /home/pedro/gdb/src/gdb/expression.h:23, from /home/pedro/gdb/src/gdb/ada-exp.y:40: /opt/xpack-mingw-w64-gcc-14.2.0-1/x86_64-w64-mingw32/include/c++/14.2.0/bits/std_mutex.h:164:5: error: '__gthread_cond_t' does not name a type; did you mean '__gthread_once_t'? 164 | __gthread_cond_t* native_handle() noexcept { return &_M_cond; } | ^~~~~~~~~~~~~~~~ | __gthread_once_t (... snip other instances of same ...) The problem is that unordered_dense.h includes <memory_resource>, which uses std::mutex, and thus needs to include <mutex>. (See <https://quuxplusone.github.io/blog/2018/06/05/libcpp-memory-resource>, "Notice that synchronized_pool_resource contains a mutex, which means that <memory_resource> effectively must include <mutex>.") GCC 13 rewrote the win32 thread model support, and in that rewrite, support for __gthread_cond_t in std_mutex.h became conditional on _WIN32_WINNT >= 0x600. GCC/libstdc++ also has <experimental/memory_resource> so with this patch, such a configuration takes that branch and succeeds, because <experimental/memory_resource> does not include <mutex>. Tested with MinGW-w64 GCC 14.2, posix and win32 models. Tested with MinGW-w64 GCC 10.1, posix and win32 models. Tested with GNU/Linux GCC 11.4.0.
- Loading branch information