e733e87
The thread start routine must return void *, and int and void *
e733e87
are distinct types.  Compilers increasingly issue errors instead
e733e87
of warnings for such type errors, and this causes the configure
e733e87
probe to fail unconditionally, even if the system supports
e733e87
__thread variables.
e733e87
e733e87
Submitted upstream: <https://github.com/mono/mono/pull/21730>
e733e87
e733e87
diff --git a/configure.ac b/configure.ac
e733e87
index bbbd1622d9728859..5a3a5770c8a3cdb6 100644
e733e87
--- a/configure.ac
e733e87
+++ b/configure.ac
e733e87
@@ -2833,14 +2833,16 @@ if test x$host_win32 = xno; then
e733e87
 			__thread int i;
e733e87
 			static int res1, res2;
e733e87
 
e733e87
-			void thread_main (void *arg)
e733e87
+			void *thread_main (void *parg)
e733e87
 			{
e733e87
+				int arg = *(int *)parg;
e733e87
 				i = arg;
e733e87
 				sleep (1);
e733e87
 				if (arg == 1)
e733e87
 					res1 = (i == arg);
e733e87
 				else
e733e87
 					res2 = (i == arg);
e733e87
+				return NULL;
e733e87
 			}
e733e87
 
e733e87
 			int main () {
e733e87
@@ -2848,8 +2850,10 @@ if test x$host_win32 = xno; then
e733e87
 
e733e87
 				i = 5;
e733e87
 
e733e87
-				pthread_create (&t1, NULL, thread_main, 1);
e733e87
-				pthread_create (&t2, NULL, thread_main, 2);
e733e87
+				int one = 1;
e733e87
+				pthread_create (&t1, NULL, thread_main, &one);
e733e87
+				int two = 2;
e733e87
+				pthread_create (&t2, NULL, thread_main, &two);
e733e87
 
e733e87
 				pthread_join (t1, NULL);
e733e87
 				pthread_join (t2, NULL);
e733e87
--- a/configure	2023-06-14 17:18:48.000000000 +0200
e733e87
+++ b/configure	2023-12-09 10:41:58.001084368 +0100
e733e87
@@ -24906,14 +24894,16 @@
e733e87
 			__thread int i;
e733e87
 			static int res1, res2;
e733e87
 
e733e87
-			void thread_main (void *arg)
e733e87
+			void *thread_main (void *parg)
e733e87
 			{
e733e87
+				int arg = *(int *)parg;
e733e87
 				i = arg;
e733e87
 				sleep (1);
e733e87
 				if (arg == 1)
e733e87
 					res1 = (i == arg);
e733e87
 				else
e733e87
 					res2 = (i == arg);
e733e87
+				return NULL;
e733e87
 			}
e733e87
 
e733e87
 			int main () {
e733e87
@@ -24921,8 +24911,10 @@
e733e87
 
e733e87
 				i = 5;
e733e87
 
e733e87
-				pthread_create (&t1, NULL, thread_main, 1);
e733e87
-				pthread_create (&t2, NULL, thread_main, 2);
e733e87
+				int one = 1;
e733e87
+				pthread_create (&t1, NULL, thread_main, &one);
e733e87
+				int two = 2;
e733e87
+				pthread_create (&t2, NULL, thread_main, &two);
e733e87
 
e733e87
 				pthread_join (t1, NULL);
e733e87
 				pthread_join (t2, NULL);