-
Notifications
You must be signed in to change notification settings - Fork 14.9k
Description
Since #145621, building LLDB for windows/mingw fails, if using libstdc++ configured with posix threads. (This is commonly the default configuration of libstdc++.) CC @ashgti
Building fails with errors like these:
/home/martin/code/llvm-project/lldb/source/Host/windows/MainLoopWindows.cpp: In destructor ‘virtual {anonymous}::PipeEvent::~PipeEvent()’:
/home/martin/code/llvm-project/lldb/source/Host/windows/MainLoopWindows.cpp:61:66: error: invalid conversion from ‘std::thread::native_handle_type’ {aka ‘long long unsigned int’} to ‘HANDLE’ {aka ‘void*’} [-fpermissive]
61 | } while (WaitForSingleObject(m_monitor_thread.native_handle(), 1) ==
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
| |
| std::thread::native_handle_type {aka long long unsigned int}
In file included from /home/martin/gcc-mingw/x86_64-w64-mingw32/include/winbase.h:35,
from /home/martin/gcc-mingw/x86_64-w64-mingw32/include/windows.h:70,
from /home/martin/code/llvm-project/lldb/include/lldb/Host/windows/windows.h:19,
from /home/martin/code/llvm-project/lldb/include/lldb/Host/SocketAddress.h:15,
from /home/martin/code/llvm-project/lldb/include/lldb/Host/Socket.h:20,
from /home/martin/code/llvm-project/lldb/source/Host/windows/MainLoopWindows.cpp:11:
/home/martin/gcc-mingw/x86_64-w64-mingw32/include/synchapi.h:115:55: note: initializing argument 1 of ‘DWORD WaitForSingleObject(HANDLE, DWORD)’
115 | WINBASEAPI DWORD WINAPI WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds);
| ~~~~~~~^~~~~~
When libstdc++ is configured with posix threads, the native thread handle isn't a win32 HANDLE
, but a pthread_t
.
It's possible to try to inspect the C++ standard libraries to see which way they are configured, but this is not a stable API or something a consumer is supposed to inspect; see b4130be for an earlier attempt at doing the same elsewhere, which ended up being backed out in 87f4bc0 as libc++ changed the internal interface that was inspected.
Instead of mixing std::thread
and native Windows APIs like WaitForSingleObject
, is it possible to achieve the same with standard C++ std::thread
methods?