Merge pull request #85208 from RandomShaper/fix_mingw_clang
Avoid conflict between mingw-std-threads and Clang's own
This commit is contained in:
commit
f824a670fd
6 changed files with 68 additions and 16 deletions
3
thirdparty/README.md
vendored
3
thirdparty/README.md
vendored
|
@ -530,7 +530,8 @@ Files extracted from upstream repository:
|
||||||
- `mingw.shared_mutex.h`
|
- `mingw.shared_mutex.h`
|
||||||
- `mingw.thread.h`
|
- `mingw.thread.h`
|
||||||
|
|
||||||
Once copied, apply `no_except.patch` (needed because Godot is built without exceptions).
|
Once copied, apply `godot.patch` (needed because Godot is built without exceptions
|
||||||
|
and to avoid std:: replacements leak in Clang builds).
|
||||||
|
|
||||||
|
|
||||||
## minimp3
|
## minimp3
|
||||||
|
|
|
@ -1,7 +1,16 @@
|
||||||
diff --git a/thirdparty/mingw-std-threads/mingw.condition_variable.h b/thirdparty/mingw-std-threads/mingw.condition_variable.h
|
diff --git a/thirdparty/mingw-std-threads/mingw.condition_variable.h b/thirdparty/mingw-std-threads/mingw.condition_variable.h
|
||||||
index 50c5ebd6df..f9e248c154 100644
|
index 50c5ebd6df..d099fad2ec 100644
|
||||||
--- a/thirdparty/mingw-std-threads/mingw.condition_variable.h
|
--- a/thirdparty/mingw-std-threads/mingw.condition_variable.h
|
||||||
+++ b/thirdparty/mingw-std-threads/mingw.condition_variable.h
|
+++ b/thirdparty/mingw-std-threads/mingw.condition_variable.h
|
||||||
|
@@ -58,7 +58,7 @@
|
||||||
|
|
||||||
|
namespace mingw_stdthread
|
||||||
|
{
|
||||||
|
-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
||||||
|
+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
|
enum class cv_status { no_timeout, timeout };
|
||||||
|
#else
|
||||||
|
using std::cv_status;
|
||||||
@@ -87,12 +87,12 @@ public:
|
@@ -87,12 +87,12 @@ public:
|
||||||
: mSemaphore(CreateSemaphoreA(NULL, 0, 0xFFFF, NULL))
|
: mSemaphore(CreateSemaphoreA(NULL, 0, 0xFFFF, NULL))
|
||||||
{
|
{
|
||||||
|
@ -26,8 +35,17 @@ index 50c5ebd6df..f9e248c154 100644
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
|
@@ -547,7 +547,7 @@ namespace std
|
||||||
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
|
// implementation.
|
||||||
|
-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
||||||
|
+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
|
using mingw_stdthread::cv_status;
|
||||||
|
using mingw_stdthread::condition_variable;
|
||||||
|
using mingw_stdthread::condition_variable_any;
|
||||||
diff --git a/thirdparty/mingw-std-threads/mingw.mutex.h b/thirdparty/mingw-std-threads/mingw.mutex.h
|
diff --git a/thirdparty/mingw-std-threads/mingw.mutex.h b/thirdparty/mingw-std-threads/mingw.mutex.h
|
||||||
index 03efa13f8b..73698d13cb 100644
|
index 03efa13f8b..1e881e6c7d 100644
|
||||||
--- a/thirdparty/mingw-std-threads/mingw.mutex.h
|
--- a/thirdparty/mingw-std-threads/mingw.mutex.h
|
||||||
+++ b/thirdparty/mingw-std-threads/mingw.mutex.h
|
+++ b/thirdparty/mingw-std-threads/mingw.mutex.h
|
||||||
@@ -132,7 +132,7 @@ struct _OwnerThread
|
@@ -132,7 +132,7 @@ struct _OwnerThread
|
||||||
|
@ -55,8 +73,17 @@ index 03efa13f8b..73698d13cb 100644
|
||||||
}
|
}
|
||||||
bool try_lock()
|
bool try_lock()
|
||||||
{
|
{
|
||||||
|
@@ -480,7 +480,7 @@ namespace std
|
||||||
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
|
// implementation.
|
||||||
|
-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
||||||
|
+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
|
using mingw_stdthread::recursive_mutex;
|
||||||
|
using mingw_stdthread::mutex;
|
||||||
|
using mingw_stdthread::recursive_timed_mutex;
|
||||||
diff --git a/thirdparty/mingw-std-threads/mingw.shared_mutex.h b/thirdparty/mingw-std-threads/mingw.shared_mutex.h
|
diff --git a/thirdparty/mingw-std-threads/mingw.shared_mutex.h b/thirdparty/mingw-std-threads/mingw.shared_mutex.h
|
||||||
index ff1ac65135..5375b0fbd1 100644
|
index ff1ac65135..ddc46bb826 100644
|
||||||
--- a/thirdparty/mingw-std-threads/mingw.shared_mutex.h
|
--- a/thirdparty/mingw-std-threads/mingw.shared_mutex.h
|
||||||
+++ b/thirdparty/mingw-std-threads/mingw.shared_mutex.h
|
+++ b/thirdparty/mingw-std-threads/mingw.shared_mutex.h
|
||||||
@@ -134,7 +134,7 @@ public:
|
@@ -134,7 +134,7 @@ public:
|
||||||
|
@ -98,12 +125,28 @@ index ff1ac65135..5375b0fbd1 100644
|
||||||
mMutex->unlock_shared();
|
mMutex->unlock_shared();
|
||||||
mOwns = false;
|
mOwns = false;
|
||||||
}
|
}
|
||||||
|
@@ -484,10 +484,10 @@ namespace std
|
||||||
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
|
// implementation.
|
||||||
|
-#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS))
|
||||||
|
+#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__))
|
||||||
|
using mingw_stdthread::shared_mutex;
|
||||||
|
#endif
|
||||||
|
-#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS))
|
||||||
|
+#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__))
|
||||||
|
using mingw_stdthread::shared_timed_mutex;
|
||||||
|
using mingw_stdthread::shared_lock;
|
||||||
|
#elif !defined(MINGW_STDTHREAD_REDUNDANCY_WARNING) // Skip repetition
|
||||||
diff --git a/thirdparty/mingw-std-threads/mingw.thread.h b/thirdparty/mingw-std-threads/mingw.thread.h
|
diff --git a/thirdparty/mingw-std-threads/mingw.thread.h b/thirdparty/mingw-std-threads/mingw.thread.h
|
||||||
index bcdd1a36a8..7ca09e25f5 100644
|
index bcdd1a36a8..60d2200db2 100644
|
||||||
--- a/thirdparty/mingw-std-threads/mingw.thread.h
|
--- a/thirdparty/mingw-std-threads/mingw.thread.h
|
||||||
+++ b/thirdparty/mingw-std-threads/mingw.thread.h
|
+++ b/thirdparty/mingw-std-threads/mingw.thread.h
|
||||||
@@ -196,7 +196,7 @@ public:
|
@@ -193,10 +193,9 @@ public:
|
||||||
int errnum = errno;
|
if (int_handle == 0)
|
||||||
|
{
|
||||||
|
mHandle = kInvalidHandle;
|
||||||
|
- int errnum = errno;
|
||||||
delete call;
|
delete call;
|
||||||
// Note: Should only throw EINVAL, EAGAIN, EACCES
|
// Note: Should only throw EINVAL, EAGAIN, EACCES
|
||||||
- throw std::system_error(errnum, std::generic_category());
|
- throw std::system_error(errnum, std::generic_category());
|
||||||
|
@ -111,7 +154,7 @@ index bcdd1a36a8..7ca09e25f5 100644
|
||||||
} else {
|
} else {
|
||||||
mThreadId.mId = id_receiver;
|
mThreadId.mId = id_receiver;
|
||||||
mHandle = reinterpret_cast<HANDLE>(int_handle);
|
mHandle = reinterpret_cast<HANDLE>(int_handle);
|
||||||
@@ -213,11 +213,11 @@ public:
|
@@ -213,11 +212,11 @@ public:
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
if (get_id() == id(GetCurrentThreadId()))
|
if (get_id() == id(GetCurrentThreadId()))
|
||||||
|
@ -126,7 +169,7 @@ index bcdd1a36a8..7ca09e25f5 100644
|
||||||
WaitForSingleObject(mHandle, kInfinite);
|
WaitForSingleObject(mHandle, kInfinite);
|
||||||
CloseHandle(mHandle);
|
CloseHandle(mHandle);
|
||||||
mHandle = kInvalidHandle;
|
mHandle = kInvalidHandle;
|
||||||
@@ -266,7 +266,7 @@ moving another thread to it.\n");
|
@@ -266,7 +265,7 @@ moving another thread to it.\n");
|
||||||
if (!joinable())
|
if (!joinable())
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -135,3 +178,12 @@ index bcdd1a36a8..7ca09e25f5 100644
|
||||||
}
|
}
|
||||||
if (mHandle != kInvalidHandle)
|
if (mHandle != kInvalidHandle)
|
||||||
{
|
{
|
||||||
|
@@ -326,7 +325,7 @@ namespace std
|
||||||
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
|
// implementation.
|
||||||
|
-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
||||||
|
+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
|
using mingw_stdthread::thread;
|
||||||
|
// Remove ambiguity immediately, to avoid problems arising from the above.
|
||||||
|
//using std::thread;
|
|
@ -58,7 +58,7 @@
|
||||||
|
|
||||||
namespace mingw_stdthread
|
namespace mingw_stdthread
|
||||||
{
|
{
|
||||||
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
enum class cv_status { no_timeout, timeout };
|
enum class cv_status { no_timeout, timeout };
|
||||||
#else
|
#else
|
||||||
using std::cv_status;
|
using std::cv_status;
|
||||||
|
@ -547,7 +547,7 @@ namespace std
|
||||||
// was none. Direct specification (std::), however, would be unaffected.
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
// Take the safe option, and include only in the presence of MinGW's win32
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
// implementation.
|
// implementation.
|
||||||
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
using mingw_stdthread::cv_status;
|
using mingw_stdthread::cv_status;
|
||||||
using mingw_stdthread::condition_variable;
|
using mingw_stdthread::condition_variable;
|
||||||
using mingw_stdthread::condition_variable_any;
|
using mingw_stdthread::condition_variable_any;
|
||||||
|
|
2
thirdparty/mingw-std-threads/mingw.mutex.h
vendored
2
thirdparty/mingw-std-threads/mingw.mutex.h
vendored
|
@ -480,7 +480,7 @@ namespace std
|
||||||
// was none. Direct specification (std::), however, would be unaffected.
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
// Take the safe option, and include only in the presence of MinGW's win32
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
// implementation.
|
// implementation.
|
||||||
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
using mingw_stdthread::recursive_mutex;
|
using mingw_stdthread::recursive_mutex;
|
||||||
using mingw_stdthread::mutex;
|
using mingw_stdthread::mutex;
|
||||||
using mingw_stdthread::recursive_timed_mutex;
|
using mingw_stdthread::recursive_timed_mutex;
|
||||||
|
|
|
@ -484,10 +484,10 @@ namespace std
|
||||||
// was none. Direct specification (std::), however, would be unaffected.
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
// Take the safe option, and include only in the presence of MinGW's win32
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
// implementation.
|
// implementation.
|
||||||
#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS))
|
#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__))
|
||||||
using mingw_stdthread::shared_mutex;
|
using mingw_stdthread::shared_mutex;
|
||||||
#endif
|
#endif
|
||||||
#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS))
|
#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__))
|
||||||
using mingw_stdthread::shared_timed_mutex;
|
using mingw_stdthread::shared_timed_mutex;
|
||||||
using mingw_stdthread::shared_lock;
|
using mingw_stdthread::shared_lock;
|
||||||
#elif !defined(MINGW_STDTHREAD_REDUNDANCY_WARNING) // Skip repetition
|
#elif !defined(MINGW_STDTHREAD_REDUNDANCY_WARNING) // Skip repetition
|
||||||
|
|
3
thirdparty/mingw-std-threads/mingw.thread.h
vendored
3
thirdparty/mingw-std-threads/mingw.thread.h
vendored
|
@ -193,7 +193,6 @@ public:
|
||||||
if (int_handle == 0)
|
if (int_handle == 0)
|
||||||
{
|
{
|
||||||
mHandle = kInvalidHandle;
|
mHandle = kInvalidHandle;
|
||||||
int errnum = errno;
|
|
||||||
delete call;
|
delete call;
|
||||||
// Note: Should only throw EINVAL, EAGAIN, EACCES
|
// Note: Should only throw EINVAL, EAGAIN, EACCES
|
||||||
__builtin_trap();
|
__builtin_trap();
|
||||||
|
@ -326,7 +325,7 @@ namespace std
|
||||||
// was none. Direct specification (std::), however, would be unaffected.
|
// was none. Direct specification (std::), however, would be unaffected.
|
||||||
// Take the safe option, and include only in the presence of MinGW's win32
|
// Take the safe option, and include only in the presence of MinGW's win32
|
||||||
// implementation.
|
// implementation.
|
||||||
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)
|
#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)
|
||||||
using mingw_stdthread::thread;
|
using mingw_stdthread::thread;
|
||||||
// Remove ambiguity immediately, to avoid problems arising from the above.
|
// Remove ambiguity immediately, to avoid problems arising from the above.
|
||||||
//using std::thread;
|
//using std::thread;
|
||||||
|
|
Loading…
Reference in a new issue