|
@@ -9617,6 +9617,17 @@ static unsigned long ssl_id_callback(void)
|
|
|
#ifdef _WIN32
|
|
|
return GetCurrentThreadId();
|
|
|
#else
|
|
|
+
|
|
|
+#ifdef __clang__
|
|
|
+#pragma clang diagnostic push
|
|
|
+#pragma clang diagnostic ignored "-Wunreachable-code"
|
|
|
+/* For every compiler, either "sizeof(pthread_t) > sizeof(unsigned long)"
|
|
|
+ * or not, so one of the two conditions will be unreachable by construction.
|
|
|
+ * Unfortunately the C standard does not define a way to check this at
|
|
|
+ * compile time, since the #if preprocessor conditions can not use the sizeof
|
|
|
+ * operator as an argument. */
|
|
|
+#endif
|
|
|
+
|
|
|
if (sizeof(pthread_t) > sizeof(unsigned long)) {
|
|
|
/* This is the problematic case for CRYPTO_set_id_callback:
|
|
|
* The OS pthread_t can not be cast to unsigned long. */
|
|
@@ -9633,6 +9644,11 @@ static unsigned long ssl_id_callback(void)
|
|
|
} else {
|
|
|
return (unsigned long)pthread_self();
|
|
|
}
|
|
|
+
|
|
|
+#ifdef __clang__
|
|
|
+#pragma clang diagnostic pop
|
|
|
+#endif
|
|
|
+
|
|
|
#endif
|
|
|
}
|
|
|
|