https://gcc.gnu.org/g:0a98b1a6ac91cb1aa0f89f7dcdb9c35daa88c2a1
commit r16-6670-g0a98b1a6ac91cb1aa0f89f7dcdb9c35daa88c2a1 Author: Thomas Koenig <[email protected]> Date: Fri Jan 9 22:00:07 2026 +0100 Fix broken bootstrap on FreeBSD. As analyzed by Steve, on freebsd __gthread_t is a pointer type. I thought it the cleanest solution to remove the #ifdef in gfc_unit, make the "self" member a intptr_t and cast the return value of __gthread_t to that type. PR fortran/123512 libgfortran/ChangeLog: * io/io.h: Change type of self to intptr_t. * io/async.h (LOCK_UNIT): Cast __gthread_self () to intptr_t. (TRYLOCK_UNIT): Likewise. (OWN_THREAD_ID): Likewise. Diff: --- libgfortran/io/async.h | 16 ++++++++-------- libgfortran/io/io.h | 6 +----- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/libgfortran/io/async.h b/libgfortran/io/async.h index c4451f28f318..596b6d6f5f71 100644 --- a/libgfortran/io/async.h +++ b/libgfortran/io/async.h @@ -248,7 +248,7 @@ #define LOCK_UNIT(unit) do { \ LOCK (&(unit)->lock); \ - (unit)->self = __gthread_self (); \ + (unit)->self = (intptr_t) __gthread_self (); \ } while (0) #ifdef __GTHREAD_RWLOCK_INIT @@ -390,11 +390,11 @@ unlocking; the only use for this is checking for recursion. */ #define LOCK_UNIT(unit) do { \ - if (__gthread_active_p ()) { \ - LOCK (&(unit)->lock); (unit)->self = __gthread_self (); \ - } else { \ - (unit)->self = 1; \ - } \ + if (__gthread_active_p ()) { \ + LOCK (&(unit)->lock); (unit)->self = (intptr_t) __gthread_self (); \ + } else { \ + (unit)->self = 1; \ + } \ } while(0) #else @@ -430,7 +430,7 @@ if (__gthread_active_p ()) { \ res = __gthread_mutex_trylock (&(unit)->lock); \ if (!res) \ - (unit)->self = __gthread_self (); \ + (unit)->self = (intptr_t) __gthread_self (); \ } \ else { \ res = (unit)->self; \ @@ -555,7 +555,7 @@ extern __thread gfc_unit *thread_unit; to be 1. */ #ifdef __GTHREADS_CXX0X -#define OWN_THREAD_ID (__gthread_active_p () ? __gthread_self () : 1) +#define OWN_THREAD_ID (__gthread_active_p () ? (intptr_t) __gthread_self () : 1) #else #define OWN_THREAD_ID 1 #endif diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index ebb225296681..7928c196f63f 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -728,11 +728,7 @@ typedef struct gfc_unit int last_char; bool has_size; GFC_IO_INT size_used; -#ifdef __GTHREADS_CXX0X - __gthread_t self; -#else - int self; -#endif + intptr_t self; } gfc_unit;
